This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Perl_sv_vcatpvfn_flags: reduce scope of 'int i'
[perl5.git] / sv.c
... / ...
CommitLineData
1/* sv.c
2 *
3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5 * and others
6 *
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
9 *
10 */
11
12/*
13 * 'I wonder what the Entish is for "yes" and "no",' he thought.
14 * --Pippin
15 *
16 * [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17 */
18
19/*
20 *
21 *
22 * This file contains the code that creates, manipulates and destroys
23 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24 * structure of an SV, so their creation and destruction is handled
25 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26 * level functions (eg. substr, split, join) for each of the types are
27 * in the pp*.c files.
28 */
29
30#include "EXTERN.h"
31#define PERL_IN_SV_C
32#include "perl.h"
33#include "regcomp.h"
34#ifdef __VMS
35# include <rms.h>
36#endif
37
38#ifdef __Lynx__
39/* Missing proto on LynxOS */
40 char *gconvert(double, int, int, char *);
41#endif
42
43#ifdef USE_QUADMATH
44# define SNPRINTF_G(nv, buffer, size, ndig) \
45 quadmath_snprintf(buffer, size, "%.*Qg", (int)ndig, (NV)(nv))
46#else
47# define SNPRINTF_G(nv, buffer, size, ndig) \
48 PERL_UNUSED_RESULT(Gconvert((NV)(nv), (int)ndig, 0, buffer))
49#endif
50
51#ifndef SV_COW_THRESHOLD
52# define SV_COW_THRESHOLD 0 /* COW iff len > K */
53#endif
54#ifndef SV_COWBUF_THRESHOLD
55# define SV_COWBUF_THRESHOLD 1250 /* COW iff len > K */
56#endif
57#ifndef SV_COW_MAX_WASTE_THRESHOLD
58# define SV_COW_MAX_WASTE_THRESHOLD 80 /* COW iff (len - cur) < K */
59#endif
60#ifndef SV_COWBUF_WASTE_THRESHOLD
61# define SV_COWBUF_WASTE_THRESHOLD 80 /* COW iff (len - cur) < K */
62#endif
63#ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
64# define SV_COW_MAX_WASTE_FACTOR_THRESHOLD 2 /* COW iff len < (cur * K) */
65#endif
66#ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
67# define SV_COWBUF_WASTE_FACTOR_THRESHOLD 2 /* COW iff len < (cur * K) */
68#endif
69/* Work around compiler warnings about unsigned >= THRESHOLD when thres-
70 hold is 0. */
71#if SV_COW_THRESHOLD
72# define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
73#else
74# define GE_COW_THRESHOLD(cur) 1
75#endif
76#if SV_COWBUF_THRESHOLD
77# define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
78#else
79# define GE_COWBUF_THRESHOLD(cur) 1
80#endif
81#if SV_COW_MAX_WASTE_THRESHOLD
82# define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
83#else
84# define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
85#endif
86#if SV_COWBUF_WASTE_THRESHOLD
87# define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
88#else
89# define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
90#endif
91#if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
92# define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
93#else
94# define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
95#endif
96#if SV_COWBUF_WASTE_FACTOR_THRESHOLD
97# define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
98#else
99# define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
100#endif
101
102#define CHECK_COW_THRESHOLD(cur,len) (\
103 GE_COW_THRESHOLD((cur)) && \
104 GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
105 GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
106)
107#define CHECK_COWBUF_THRESHOLD(cur,len) (\
108 GE_COWBUF_THRESHOLD((cur)) && \
109 GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
110 GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
111)
112
113#ifdef PERL_UTF8_CACHE_ASSERT
114/* if adding more checks watch out for the following tests:
115 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
116 * lib/utf8.t lib/Unicode/Collate/t/index.t
117 * --jhi
118 */
119# define ASSERT_UTF8_CACHE(cache) \
120 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
121 assert((cache)[2] <= (cache)[3]); \
122 assert((cache)[3] <= (cache)[1]);} \
123 } STMT_END
124#else
125# define ASSERT_UTF8_CACHE(cache) NOOP
126#endif
127
128static const char S_destroy[] = "DESTROY";
129#define S_destroy_len (sizeof(S_destroy)-1)
130
131/* ============================================================================
132
133=head1 Allocation and deallocation of SVs.
134An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
135sv, av, hv...) contains type and reference count information, and for
136many types, a pointer to the body (struct xrv, xpv, xpviv...), which
137contains fields specific to each type. Some types store all they need
138in the head, so don't have a body.
139
140In all but the most memory-paranoid configurations (ex: PURIFY), heads
141and bodies are allocated out of arenas, which by default are
142approximately 4K chunks of memory parcelled up into N heads or bodies.
143Sv-bodies are allocated by their sv-type, guaranteeing size
144consistency needed to allocate safely from arrays.
145
146For SV-heads, the first slot in each arena is reserved, and holds a
147link to the next arena, some flags, and a note of the number of slots.
148Snaked through each arena chain is a linked list of free items; when
149this becomes empty, an extra arena is allocated and divided up into N
150items which are threaded into the free list.
151
152SV-bodies are similar, but they use arena-sets by default, which
153separate the link and info from the arena itself, and reclaim the 1st
154slot in the arena. SV-bodies are further described later.
155
156The following global variables are associated with arenas:
157
158 PL_sv_arenaroot pointer to list of SV arenas
159 PL_sv_root pointer to list of free SV structures
160
161 PL_body_arenas head of linked-list of body arenas
162 PL_body_roots[] array of pointers to list of free bodies of svtype
163 arrays are indexed by the svtype needed
164
165A few special SV heads are not allocated from an arena, but are
166instead directly created in the interpreter structure, eg PL_sv_undef.
167The size of arenas can be changed from the default by setting
168PERL_ARENA_SIZE appropriately at compile time.
169
170The SV arena serves the secondary purpose of allowing still-live SVs
171to be located and destroyed during final cleanup.
172
173At the lowest level, the macros new_SV() and del_SV() grab and free
174an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
175to return the SV to the free list with error checking.) new_SV() calls
176more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
177SVs in the free list have their SvTYPE field set to all ones.
178
179At the time of very final cleanup, sv_free_arenas() is called from
180perl_destruct() to physically free all the arenas allocated since the
181start of the interpreter.
182
183The function visit() scans the SV arenas list, and calls a specified
184function for each SV it finds which is still live - ie which has an SvTYPE
185other than all 1's, and a non-zero SvREFCNT. visit() is used by the
186following functions (specified as [function that calls visit()] / [function
187called by visit() for each SV]):
188
189 sv_report_used() / do_report_used()
190 dump all remaining SVs (debugging aid)
191
192 sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
193 do_clean_named_io_objs(),do_curse()
194 Attempt to free all objects pointed to by RVs,
195 try to do the same for all objects indir-
196 ectly referenced by typeglobs too, and
197 then do a final sweep, cursing any
198 objects that remain. Called once from
199 perl_destruct(), prior to calling sv_clean_all()
200 below.
201
202 sv_clean_all() / do_clean_all()
203 SvREFCNT_dec(sv) each remaining SV, possibly
204 triggering an sv_free(). It also sets the
205 SVf_BREAK flag on the SV to indicate that the
206 refcnt has been artificially lowered, and thus
207 stopping sv_free() from giving spurious warnings
208 about SVs which unexpectedly have a refcnt
209 of zero. called repeatedly from perl_destruct()
210 until there are no SVs left.
211
212=head2 Arena allocator API Summary
213
214Private API to rest of sv.c
215
216 new_SV(), del_SV(),
217
218 new_XPVNV(), del_XPVGV(),
219 etc
220
221Public API:
222
223 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
224
225=cut
226
227 * ========================================================================= */
228
229/*
230 * "A time to plant, and a time to uproot what was planted..."
231 */
232
233#ifdef PERL_MEM_LOG
234# define MEM_LOG_NEW_SV(sv, file, line, func) \
235 Perl_mem_log_new_sv(sv, file, line, func)
236# define MEM_LOG_DEL_SV(sv, file, line, func) \
237 Perl_mem_log_del_sv(sv, file, line, func)
238#else
239# define MEM_LOG_NEW_SV(sv, file, line, func) NOOP
240# define MEM_LOG_DEL_SV(sv, file, line, func) NOOP
241#endif
242
243#ifdef DEBUG_LEAKING_SCALARS
244# define FREE_SV_DEBUG_FILE(sv) STMT_START { \
245 if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
246 } STMT_END
247# define DEBUG_SV_SERIAL(sv) \
248 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) del_SV\n", \
249 PTR2UV(sv), (long)(sv)->sv_debug_serial))
250#else
251# define FREE_SV_DEBUG_FILE(sv)
252# define DEBUG_SV_SERIAL(sv) NOOP
253#endif
254
255#ifdef PERL_POISON
256# define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
257# define SvARENA_CHAIN_SET(sv,val) (sv)->sv_u.svu_rv = MUTABLE_SV((val))
258/* Whilst I'd love to do this, it seems that things like to check on
259 unreferenced scalars
260# define POISON_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
261*/
262# define POISON_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
263 PoisonNew(&SvREFCNT(sv), 1, U32)
264#else
265# define SvARENA_CHAIN(sv) SvANY(sv)
266# define SvARENA_CHAIN_SET(sv,val) SvANY(sv) = (void *)(val)
267# define POISON_SV_HEAD(sv)
268#endif
269
270/* Mark an SV head as unused, and add to free list.
271 *
272 * If SVf_BREAK is set, skip adding it to the free list, as this SV had
273 * its refcount artificially decremented during global destruction, so
274 * there may be dangling pointers to it. The last thing we want in that
275 * case is for it to be reused. */
276
277#define plant_SV(p) \
278 STMT_START { \
279 const U32 old_flags = SvFLAGS(p); \
280 MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__); \
281 DEBUG_SV_SERIAL(p); \
282 FREE_SV_DEBUG_FILE(p); \
283 POISON_SV_HEAD(p); \
284 SvFLAGS(p) = SVTYPEMASK; \
285 if (!(old_flags & SVf_BREAK)) { \
286 SvARENA_CHAIN_SET(p, PL_sv_root); \
287 PL_sv_root = (p); \
288 } \
289 --PL_sv_count; \
290 } STMT_END
291
292#define uproot_SV(p) \
293 STMT_START { \
294 (p) = PL_sv_root; \
295 PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p)); \
296 ++PL_sv_count; \
297 } STMT_END
298
299
300/* make some more SVs by adding another arena */
301
302STATIC SV*
303S_more_sv(pTHX)
304{
305 SV* sv;
306 char *chunk; /* must use New here to match call to */
307 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
308 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
309 uproot_SV(sv);
310 return sv;
311}
312
313/* new_SV(): return a new, empty SV head */
314
315#ifdef DEBUG_LEAKING_SCALARS
316/* provide a real function for a debugger to play with */
317STATIC SV*
318S_new_SV(pTHX_ const char *file, int line, const char *func)
319{
320 SV* sv;
321
322 if (PL_sv_root)
323 uproot_SV(sv);
324 else
325 sv = S_more_sv(aTHX);
326 SvANY(sv) = 0;
327 SvREFCNT(sv) = 1;
328 SvFLAGS(sv) = 0;
329 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
330 sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
331 ? PL_parser->copline
332 : PL_curcop
333 ? CopLINE(PL_curcop)
334 : 0
335 );
336 sv->sv_debug_inpad = 0;
337 sv->sv_debug_parent = NULL;
338 sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
339
340 sv->sv_debug_serial = PL_sv_serial++;
341
342 MEM_LOG_NEW_SV(sv, file, line, func);
343 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) new_SV (from %s:%d [%s])\n",
344 PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
345
346 return sv;
347}
348# define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
349
350#else
351# define new_SV(p) \
352 STMT_START { \
353 if (PL_sv_root) \
354 uproot_SV(p); \
355 else \
356 (p) = S_more_sv(aTHX); \
357 SvANY(p) = 0; \
358 SvREFCNT(p) = 1; \
359 SvFLAGS(p) = 0; \
360 MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__); \
361 } STMT_END
362#endif
363
364
365/* del_SV(): return an empty SV head to the free list */
366
367#ifdef DEBUGGING
368
369#define del_SV(p) \
370 STMT_START { \
371 if (DEBUG_D_TEST) \
372 del_sv(p); \
373 else \
374 plant_SV(p); \
375 } STMT_END
376
377STATIC void
378S_del_sv(pTHX_ SV *p)
379{
380 PERL_ARGS_ASSERT_DEL_SV;
381
382 if (DEBUG_D_TEST) {
383 SV* sva;
384 bool ok = 0;
385 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
386 const SV * const sv = sva + 1;
387 const SV * const svend = &sva[SvREFCNT(sva)];
388 if (p >= sv && p < svend) {
389 ok = 1;
390 break;
391 }
392 }
393 if (!ok) {
394 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
395 "Attempt to free non-arena SV: 0x%" UVxf
396 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
397 return;
398 }
399 }
400 plant_SV(p);
401}
402
403#else /* ! DEBUGGING */
404
405#define del_SV(p) plant_SV(p)
406
407#endif /* DEBUGGING */
408
409
410/*
411=head1 SV Manipulation Functions
412
413=for apidoc sv_add_arena
414
415Given a chunk of memory, link it to the head of the list of arenas,
416and split it into a list of free SVs.
417
418=cut
419*/
420
421static void
422S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
423{
424 SV *const sva = MUTABLE_SV(ptr);
425 SV* sv;
426 SV* svend;
427
428 PERL_ARGS_ASSERT_SV_ADD_ARENA;
429
430 /* The first SV in an arena isn't an SV. */
431 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
432 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
433 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
434
435 PL_sv_arenaroot = sva;
436 PL_sv_root = sva + 1;
437
438 svend = &sva[SvREFCNT(sva) - 1];
439 sv = sva + 1;
440 while (sv < svend) {
441 SvARENA_CHAIN_SET(sv, (sv + 1));
442#ifdef DEBUGGING
443 SvREFCNT(sv) = 0;
444#endif
445 /* Must always set typemask because it's always checked in on cleanup
446 when the arenas are walked looking for objects. */
447 SvFLAGS(sv) = SVTYPEMASK;
448 sv++;
449 }
450 SvARENA_CHAIN_SET(sv, 0);
451#ifdef DEBUGGING
452 SvREFCNT(sv) = 0;
453#endif
454 SvFLAGS(sv) = SVTYPEMASK;
455}
456
457/* visit(): call the named function for each non-free SV in the arenas
458 * whose flags field matches the flags/mask args. */
459
460STATIC I32
461S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
462{
463 SV* sva;
464 I32 visited = 0;
465
466 PERL_ARGS_ASSERT_VISIT;
467
468 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
469 const SV * const svend = &sva[SvREFCNT(sva)];
470 SV* sv;
471 for (sv = sva + 1; sv < svend; ++sv) {
472 if (SvTYPE(sv) != (svtype)SVTYPEMASK
473 && (sv->sv_flags & mask) == flags
474 && SvREFCNT(sv))
475 {
476 (*f)(aTHX_ sv);
477 ++visited;
478 }
479 }
480 }
481 return visited;
482}
483
484#ifdef DEBUGGING
485
486/* called by sv_report_used() for each live SV */
487
488static void
489do_report_used(pTHX_ SV *const sv)
490{
491 if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
492 PerlIO_printf(Perl_debug_log, "****\n");
493 sv_dump(sv);
494 }
495}
496#endif
497
498/*
499=for apidoc sv_report_used
500
501Dump the contents of all SVs not yet freed (debugging aid).
502
503=cut
504*/
505
506void
507Perl_sv_report_used(pTHX)
508{
509#ifdef DEBUGGING
510 visit(do_report_used, 0, 0);
511#else
512 PERL_UNUSED_CONTEXT;
513#endif
514}
515
516/* called by sv_clean_objs() for each live SV */
517
518static void
519do_clean_objs(pTHX_ SV *const ref)
520{
521 assert (SvROK(ref));
522 {
523 SV * const target = SvRV(ref);
524 if (SvOBJECT(target)) {
525 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
526 if (SvWEAKREF(ref)) {
527 sv_del_backref(target, ref);
528 SvWEAKREF_off(ref);
529 SvRV_set(ref, NULL);
530 } else {
531 SvROK_off(ref);
532 SvRV_set(ref, NULL);
533 SvREFCNT_dec_NN(target);
534 }
535 }
536 }
537}
538
539
540/* clear any slots in a GV which hold objects - except IO;
541 * called by sv_clean_objs() for each live GV */
542
543static void
544do_clean_named_objs(pTHX_ SV *const sv)
545{
546 SV *obj;
547 assert(SvTYPE(sv) == SVt_PVGV);
548 assert(isGV_with_GP(sv));
549 if (!GvGP(sv))
550 return;
551
552 /* freeing GP entries may indirectly free the current GV;
553 * hold onto it while we mess with the GP slots */
554 SvREFCNT_inc(sv);
555
556 if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
557 DEBUG_D((PerlIO_printf(Perl_debug_log,
558 "Cleaning named glob SV object:\n "), sv_dump(obj)));
559 GvSV(sv) = NULL;
560 SvREFCNT_dec_NN(obj);
561 }
562 if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
563 DEBUG_D((PerlIO_printf(Perl_debug_log,
564 "Cleaning named glob AV object:\n "), sv_dump(obj)));
565 GvAV(sv) = NULL;
566 SvREFCNT_dec_NN(obj);
567 }
568 if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
569 DEBUG_D((PerlIO_printf(Perl_debug_log,
570 "Cleaning named glob HV object:\n "), sv_dump(obj)));
571 GvHV(sv) = NULL;
572 SvREFCNT_dec_NN(obj);
573 }
574 if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
575 DEBUG_D((PerlIO_printf(Perl_debug_log,
576 "Cleaning named glob CV object:\n "), sv_dump(obj)));
577 GvCV_set(sv, NULL);
578 SvREFCNT_dec_NN(obj);
579 }
580 SvREFCNT_dec_NN(sv); /* undo the inc above */
581}
582
583/* clear any IO slots in a GV which hold objects (except stderr, defout);
584 * called by sv_clean_objs() for each live GV */
585
586static void
587do_clean_named_io_objs(pTHX_ SV *const sv)
588{
589 SV *obj;
590 assert(SvTYPE(sv) == SVt_PVGV);
591 assert(isGV_with_GP(sv));
592 if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
593 return;
594
595 SvREFCNT_inc(sv);
596 if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
597 DEBUG_D((PerlIO_printf(Perl_debug_log,
598 "Cleaning named glob IO object:\n "), sv_dump(obj)));
599 GvIOp(sv) = NULL;
600 SvREFCNT_dec_NN(obj);
601 }
602 SvREFCNT_dec_NN(sv); /* undo the inc above */
603}
604
605/* Void wrapper to pass to visit() */
606static void
607do_curse(pTHX_ SV * const sv) {
608 if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
609 || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
610 return;
611 (void)curse(sv, 0);
612}
613
614/*
615=for apidoc sv_clean_objs
616
617Attempt to destroy all objects not yet freed.
618
619=cut
620*/
621
622void
623Perl_sv_clean_objs(pTHX)
624{
625 GV *olddef, *olderr;
626 PL_in_clean_objs = TRUE;
627 visit(do_clean_objs, SVf_ROK, SVf_ROK);
628 /* Some barnacles may yet remain, clinging to typeglobs.
629 * Run the non-IO destructors first: they may want to output
630 * error messages, close files etc */
631 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
632 visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
633 /* And if there are some very tenacious barnacles clinging to arrays,
634 closures, or what have you.... */
635 visit(do_curse, SVs_OBJECT, SVs_OBJECT);
636 olddef = PL_defoutgv;
637 PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
638 if (olddef && isGV_with_GP(olddef))
639 do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
640 olderr = PL_stderrgv;
641 PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
642 if (olderr && isGV_with_GP(olderr))
643 do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
644 SvREFCNT_dec(olddef);
645 PL_in_clean_objs = FALSE;
646}
647
648/* called by sv_clean_all() for each live SV */
649
650static void
651do_clean_all(pTHX_ SV *const sv)
652{
653 if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
654 /* don't clean pid table and strtab */
655 return;
656 }
657 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%" UVxf "\n", PTR2UV(sv)) ));
658 SvFLAGS(sv) |= SVf_BREAK;
659 SvREFCNT_dec_NN(sv);
660}
661
662/*
663=for apidoc sv_clean_all
664
665Decrement the refcnt of each remaining SV, possibly triggering a
666cleanup. This function may have to be called multiple times to free
667SVs which are in complex self-referential hierarchies.
668
669=cut
670*/
671
672I32
673Perl_sv_clean_all(pTHX)
674{
675 I32 cleaned;
676 PL_in_clean_all = TRUE;
677 cleaned = visit(do_clean_all, 0,0);
678 return cleaned;
679}
680
681/*
682 ARENASETS: a meta-arena implementation which separates arena-info
683 into struct arena_set, which contains an array of struct
684 arena_descs, each holding info for a single arena. By separating
685 the meta-info from the arena, we recover the 1st slot, formerly
686 borrowed for list management. The arena_set is about the size of an
687 arena, avoiding the needless malloc overhead of a naive linked-list.
688
689 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
690 memory in the last arena-set (1/2 on average). In trade, we get
691 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
692 smaller types). The recovery of the wasted space allows use of
693 small arenas for large, rare body types, by changing array* fields
694 in body_details_by_type[] below.
695*/
696struct arena_desc {
697 char *arena; /* the raw storage, allocated aligned */
698 size_t size; /* its size ~4k typ */
699 svtype utype; /* bodytype stored in arena */
700};
701
702struct arena_set;
703
704/* Get the maximum number of elements in set[] such that struct arena_set
705 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
706 therefore likely to be 1 aligned memory page. */
707
708#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
709 - 2 * sizeof(int)) / sizeof (struct arena_desc))
710
711struct arena_set {
712 struct arena_set* next;
713 unsigned int set_size; /* ie ARENAS_PER_SET */
714 unsigned int curr; /* index of next available arena-desc */
715 struct arena_desc set[ARENAS_PER_SET];
716};
717
718/*
719=for apidoc sv_free_arenas
720
721Deallocate the memory used by all arenas. Note that all the individual SV
722heads and bodies within the arenas must already have been freed.
723
724=cut
725
726*/
727void
728Perl_sv_free_arenas(pTHX)
729{
730 SV* sva;
731 SV* svanext;
732 unsigned int i;
733
734 /* Free arenas here, but be careful about fake ones. (We assume
735 contiguity of the fake ones with the corresponding real ones.) */
736
737 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
738 svanext = MUTABLE_SV(SvANY(sva));
739 while (svanext && SvFAKE(svanext))
740 svanext = MUTABLE_SV(SvANY(svanext));
741
742 if (!SvFAKE(sva))
743 Safefree(sva);
744 }
745
746 {
747 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
748
749 while (aroot) {
750 struct arena_set *current = aroot;
751 i = aroot->curr;
752 while (i--) {
753 assert(aroot->set[i].arena);
754 Safefree(aroot->set[i].arena);
755 }
756 aroot = aroot->next;
757 Safefree(current);
758 }
759 }
760 PL_body_arenas = 0;
761
762 i = PERL_ARENA_ROOTS_SIZE;
763 while (i--)
764 PL_body_roots[i] = 0;
765
766 PL_sv_arenaroot = 0;
767 PL_sv_root = 0;
768}
769
770/*
771 Here are mid-level routines that manage the allocation of bodies out
772 of the various arenas. There are 5 kinds of arenas:
773
774 1. SV-head arenas, which are discussed and handled above
775 2. regular body arenas
776 3. arenas for reduced-size bodies
777 4. Hash-Entry arenas
778
779 Arena types 2 & 3 are chained by body-type off an array of
780 arena-root pointers, which is indexed by svtype. Some of the
781 larger/less used body types are malloced singly, since a large
782 unused block of them is wasteful. Also, several svtypes dont have
783 bodies; the data fits into the sv-head itself. The arena-root
784 pointer thus has a few unused root-pointers (which may be hijacked
785 later for arena types 4,5)
786
787 3 differs from 2 as an optimization; some body types have several
788 unused fields in the front of the structure (which are kept in-place
789 for consistency). These bodies can be allocated in smaller chunks,
790 because the leading fields arent accessed. Pointers to such bodies
791 are decremented to point at the unused 'ghost' memory, knowing that
792 the pointers are used with offsets to the real memory.
793
794
795=head1 SV-Body Allocation
796
797=cut
798
799Allocation of SV-bodies is similar to SV-heads, differing as follows;
800the allocation mechanism is used for many body types, so is somewhat
801more complicated, it uses arena-sets, and has no need for still-live
802SV detection.
803
804At the outermost level, (new|del)_X*V macros return bodies of the
805appropriate type. These macros call either (new|del)_body_type or
806(new|del)_body_allocated macro pairs, depending on specifics of the
807type. Most body types use the former pair, the latter pair is used to
808allocate body types with "ghost fields".
809
810"ghost fields" are fields that are unused in certain types, and
811consequently don't need to actually exist. They are declared because
812they're part of a "base type", which allows use of functions as
813methods. The simplest examples are AVs and HVs, 2 aggregate types
814which don't use the fields which support SCALAR semantics.
815
816For these types, the arenas are carved up into appropriately sized
817chunks, we thus avoid wasted memory for those unaccessed members.
818When bodies are allocated, we adjust the pointer back in memory by the
819size of the part not allocated, so it's as if we allocated the full
820structure. (But things will all go boom if you write to the part that
821is "not there", because you'll be overwriting the last members of the
822preceding structure in memory.)
823
824We calculate the correction using the STRUCT_OFFSET macro on the first
825member present. If the allocated structure is smaller (no initial NV
826actually allocated) then the net effect is to subtract the size of the NV
827from the pointer, to return a new pointer as if an initial NV were actually
828allocated. (We were using structures named *_allocated for this, but
829this turned out to be a subtle bug, because a structure without an NV
830could have a lower alignment constraint, but the compiler is allowed to
831optimised accesses based on the alignment constraint of the actual pointer
832to the full structure, for example, using a single 64 bit load instruction
833because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
834
835This is the same trick as was used for NV and IV bodies. Ironically it
836doesn't need to be used for NV bodies any more, because NV is now at
837the start of the structure. IV bodies, and also in some builds NV bodies,
838don't need it either, because they are no longer allocated.
839
840In turn, the new_body_* allocators call S_new_body(), which invokes
841new_body_inline macro, which takes a lock, and takes a body off the
842linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
843necessary to refresh an empty list. Then the lock is released, and
844the body is returned.
845
846Perl_more_bodies allocates a new arena, and carves it up into an array of N
847bodies, which it strings into a linked list. It looks up arena-size
848and body-size from the body_details table described below, thus
849supporting the multiple body-types.
850
851If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
852the (new|del)_X*V macros are mapped directly to malloc/free.
853
854For each sv-type, struct body_details bodies_by_type[] carries
855parameters which control these aspects of SV handling:
856
857Arena_size determines whether arenas are used for this body type, and if
858so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
859zero, forcing individual mallocs and frees.
860
861Body_size determines how big a body is, and therefore how many fit into
862each arena. Offset carries the body-pointer adjustment needed for
863"ghost fields", and is used in *_allocated macros.
864
865But its main purpose is to parameterize info needed in
866Perl_sv_upgrade(). The info here dramatically simplifies the function
867vs the implementation in 5.8.8, making it table-driven. All fields
868are used for this, except for arena_size.
869
870For the sv-types that have no bodies, arenas are not used, so those
871PL_body_roots[sv_type] are unused, and can be overloaded. In
872something of a special case, SVt_NULL is borrowed for HE arenas;
873PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
874bodies_by_type[SVt_NULL] slot is not used, as the table is not
875available in hv.c.
876
877*/
878
879struct body_details {
880 U8 body_size; /* Size to allocate */
881 U8 copy; /* Size of structure to copy (may be shorter) */
882 U8 offset; /* Size of unalloced ghost fields to first alloced field*/
883 PERL_BITFIELD8 type : 4; /* We have space for a sanity check. */
884 PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
885 PERL_BITFIELD8 zero_nv : 1; /* zero the NV when upgrading from this */
886 PERL_BITFIELD8 arena : 1; /* Allocated from an arena */
887 U32 arena_size; /* Size of arena to allocate */
888};
889
890#define HADNV FALSE
891#define NONV TRUE
892
893
894#ifdef PURIFY
895/* With -DPURFIY we allocate everything directly, and don't use arenas.
896 This seems a rather elegant way to simplify some of the code below. */
897#define HASARENA FALSE
898#else
899#define HASARENA TRUE
900#endif
901#define NOARENA FALSE
902
903/* Size the arenas to exactly fit a given number of bodies. A count
904 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
905 simplifying the default. If count > 0, the arena is sized to fit
906 only that many bodies, allowing arenas to be used for large, rare
907 bodies (XPVFM, XPVIO) without undue waste. The arena size is
908 limited by PERL_ARENA_SIZE, so we can safely oversize the
909 declarations.
910 */
911#define FIT_ARENA0(body_size) \
912 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
913#define FIT_ARENAn(count,body_size) \
914 ( count * body_size <= PERL_ARENA_SIZE) \
915 ? count * body_size \
916 : FIT_ARENA0 (body_size)
917#define FIT_ARENA(count,body_size) \
918 (U32)(count \
919 ? FIT_ARENAn (count, body_size) \
920 : FIT_ARENA0 (body_size))
921
922/* Calculate the length to copy. Specifically work out the length less any
923 final padding the compiler needed to add. See the comment in sv_upgrade
924 for why copying the padding proved to be a bug. */
925
926#define copy_length(type, last_member) \
927 STRUCT_OFFSET(type, last_member) \
928 + sizeof (((type*)SvANY((const SV *)0))->last_member)
929
930static const struct body_details bodies_by_type[] = {
931 /* HEs use this offset for their arena. */
932 { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
933
934 /* IVs are in the head, so the allocation size is 0. */
935 { 0,
936 sizeof(IV), /* This is used to copy out the IV body. */
937 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
938 NOARENA /* IVS don't need an arena */, 0
939 },
940
941#if NVSIZE <= IVSIZE
942 { 0, sizeof(NV),
943 STRUCT_OFFSET(XPVNV, xnv_u),
944 SVt_NV, FALSE, HADNV, NOARENA, 0 },
945#else
946 { sizeof(NV), sizeof(NV),
947 STRUCT_OFFSET(XPVNV, xnv_u),
948 SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
949#endif
950
951 { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
952 copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
953 + STRUCT_OFFSET(XPV, xpv_cur),
954 SVt_PV, FALSE, NONV, HASARENA,
955 FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
956
957 { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
958 copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
959 + STRUCT_OFFSET(XPV, xpv_cur),
960 SVt_INVLIST, TRUE, NONV, HASARENA,
961 FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
962
963 { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
964 copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
965 + STRUCT_OFFSET(XPV, xpv_cur),
966 SVt_PVIV, FALSE, NONV, HASARENA,
967 FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
968
969 { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
970 copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
971 + STRUCT_OFFSET(XPV, xpv_cur),
972 SVt_PVNV, FALSE, HADNV, HASARENA,
973 FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
974
975 { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
976 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
977
978 { sizeof(regexp),
979 sizeof(regexp),
980 0,
981 SVt_REGEXP, TRUE, NONV, HASARENA,
982 FIT_ARENA(0, sizeof(regexp))
983 },
984
985 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
986 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
987
988 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
989 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
990
991 { sizeof(XPVAV),
992 copy_length(XPVAV, xav_alloc),
993 0,
994 SVt_PVAV, TRUE, NONV, HASARENA,
995 FIT_ARENA(0, sizeof(XPVAV)) },
996
997 { sizeof(XPVHV),
998 copy_length(XPVHV, xhv_max),
999 0,
1000 SVt_PVHV, TRUE, NONV, HASARENA,
1001 FIT_ARENA(0, sizeof(XPVHV)) },
1002
1003 { sizeof(XPVCV),
1004 sizeof(XPVCV),
1005 0,
1006 SVt_PVCV, TRUE, NONV, HASARENA,
1007 FIT_ARENA(0, sizeof(XPVCV)) },
1008
1009 { sizeof(XPVFM),
1010 sizeof(XPVFM),
1011 0,
1012 SVt_PVFM, TRUE, NONV, NOARENA,
1013 FIT_ARENA(20, sizeof(XPVFM)) },
1014
1015 { sizeof(XPVIO),
1016 sizeof(XPVIO),
1017 0,
1018 SVt_PVIO, TRUE, NONV, HASARENA,
1019 FIT_ARENA(24, sizeof(XPVIO)) },
1020};
1021
1022#define new_body_allocated(sv_type) \
1023 (void *)((char *)S_new_body(aTHX_ sv_type) \
1024 - bodies_by_type[sv_type].offset)
1025
1026/* return a thing to the free list */
1027
1028#define del_body(thing, root) \
1029 STMT_START { \
1030 void ** const thing_copy = (void **)thing; \
1031 *thing_copy = *root; \
1032 *root = (void*)thing_copy; \
1033 } STMT_END
1034
1035#ifdef PURIFY
1036#if !(NVSIZE <= IVSIZE)
1037# define new_XNV() safemalloc(sizeof(XPVNV))
1038#endif
1039#define new_XPVNV() safemalloc(sizeof(XPVNV))
1040#define new_XPVMG() safemalloc(sizeof(XPVMG))
1041
1042#define del_XPVGV(p) safefree(p)
1043
1044#else /* !PURIFY */
1045
1046#if !(NVSIZE <= IVSIZE)
1047# define new_XNV() new_body_allocated(SVt_NV)
1048#endif
1049#define new_XPVNV() new_body_allocated(SVt_PVNV)
1050#define new_XPVMG() new_body_allocated(SVt_PVMG)
1051
1052#define del_XPVGV(p) del_body(p + bodies_by_type[SVt_PVGV].offset, \
1053 &PL_body_roots[SVt_PVGV])
1054
1055#endif /* PURIFY */
1056
1057/* no arena for you! */
1058
1059#define new_NOARENA(details) \
1060 safemalloc((details)->body_size + (details)->offset)
1061#define new_NOARENAZ(details) \
1062 safecalloc((details)->body_size + (details)->offset, 1)
1063
1064void *
1065Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1066 const size_t arena_size)
1067{
1068 void ** const root = &PL_body_roots[sv_type];
1069 struct arena_desc *adesc;
1070 struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1071 unsigned int curr;
1072 char *start;
1073 const char *end;
1074 const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1075#if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1076 dVAR;
1077#endif
1078#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1079 static bool done_sanity_check;
1080
1081 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1082 * variables like done_sanity_check. */
1083 if (!done_sanity_check) {
1084 unsigned int i = SVt_LAST;
1085
1086 done_sanity_check = TRUE;
1087
1088 while (i--)
1089 assert (bodies_by_type[i].type == i);
1090 }
1091#endif
1092
1093 assert(arena_size);
1094
1095 /* may need new arena-set to hold new arena */
1096 if (!aroot || aroot->curr >= aroot->set_size) {
1097 struct arena_set *newroot;
1098 Newxz(newroot, 1, struct arena_set);
1099 newroot->set_size = ARENAS_PER_SET;
1100 newroot->next = aroot;
1101 aroot = newroot;
1102 PL_body_arenas = (void *) newroot;
1103 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1104 }
1105
1106 /* ok, now have arena-set with at least 1 empty/available arena-desc */
1107 curr = aroot->curr++;
1108 adesc = &(aroot->set[curr]);
1109 assert(!adesc->arena);
1110
1111 Newx(adesc->arena, good_arena_size, char);
1112 adesc->size = good_arena_size;
1113 adesc->utype = sv_type;
1114 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1115 curr, (void*)adesc->arena, (UV)good_arena_size));
1116
1117 start = (char *) adesc->arena;
1118
1119 /* Get the address of the byte after the end of the last body we can fit.
1120 Remember, this is integer division: */
1121 end = start + good_arena_size / body_size * body_size;
1122
1123 /* computed count doesn't reflect the 1st slot reservation */
1124#if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1125 DEBUG_m(PerlIO_printf(Perl_debug_log,
1126 "arena %p end %p arena-size %d (from %d) type %d "
1127 "size %d ct %d\n",
1128 (void*)start, (void*)end, (int)good_arena_size,
1129 (int)arena_size, sv_type, (int)body_size,
1130 (int)good_arena_size / (int)body_size));
1131#else
1132 DEBUG_m(PerlIO_printf(Perl_debug_log,
1133 "arena %p end %p arena-size %d type %d size %d ct %d\n",
1134 (void*)start, (void*)end,
1135 (int)arena_size, sv_type, (int)body_size,
1136 (int)good_arena_size / (int)body_size));
1137#endif
1138 *root = (void *)start;
1139
1140 while (1) {
1141 /* Where the next body would start: */
1142 char * const next = start + body_size;
1143
1144 if (next >= end) {
1145 /* This is the last body: */
1146 assert(next == end);
1147
1148 *(void **)start = 0;
1149 return *root;
1150 }
1151
1152 *(void**) start = (void *)next;
1153 start = next;
1154 }
1155}
1156
1157/* grab a new thing from the free list, allocating more if necessary.
1158 The inline version is used for speed in hot routines, and the
1159 function using it serves the rest (unless PURIFY).
1160*/
1161#define new_body_inline(xpv, sv_type) \
1162 STMT_START { \
1163 void ** const r3wt = &PL_body_roots[sv_type]; \
1164 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1165 ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1166 bodies_by_type[sv_type].body_size,\
1167 bodies_by_type[sv_type].arena_size)); \
1168 *(r3wt) = *(void**)(xpv); \
1169 } STMT_END
1170
1171#ifndef PURIFY
1172
1173STATIC void *
1174S_new_body(pTHX_ const svtype sv_type)
1175{
1176 void *xpv;
1177 new_body_inline(xpv, sv_type);
1178 return xpv;
1179}
1180
1181#endif
1182
1183static const struct body_details fake_rv =
1184 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1185
1186/*
1187=for apidoc sv_upgrade
1188
1189Upgrade an SV to a more complex form. Generally adds a new body type to the
1190SV, then copies across as much information as possible from the old body.
1191It croaks if the SV is already in a more complex form than requested. You
1192generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1193before calling C<sv_upgrade>, and hence does not croak. See also
1194C<L</svtype>>.
1195
1196=cut
1197*/
1198
1199void
1200Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1201{
1202 void* old_body;
1203 void* new_body;
1204 const svtype old_type = SvTYPE(sv);
1205 const struct body_details *new_type_details;
1206 const struct body_details *old_type_details
1207 = bodies_by_type + old_type;
1208 SV *referent = NULL;
1209
1210 PERL_ARGS_ASSERT_SV_UPGRADE;
1211
1212 if (old_type == new_type)
1213 return;
1214
1215 /* This clause was purposefully added ahead of the early return above to
1216 the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1217 inference by Nick I-S that it would fix other troublesome cases. See
1218 changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1219
1220 Given that shared hash key scalars are no longer PVIV, but PV, there is
1221 no longer need to unshare so as to free up the IVX slot for its proper
1222 purpose. So it's safe to move the early return earlier. */
1223
1224 if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1225 sv_force_normal_flags(sv, 0);
1226 }
1227
1228 old_body = SvANY(sv);
1229
1230 /* Copying structures onto other structures that have been neatly zeroed
1231 has a subtle gotcha. Consider XPVMG
1232
1233 +------+------+------+------+------+-------+-------+
1234 | NV | CUR | LEN | IV | MAGIC | STASH |
1235 +------+------+------+------+------+-------+-------+
1236 0 4 8 12 16 20 24 28
1237
1238 where NVs are aligned to 8 bytes, so that sizeof that structure is
1239 actually 32 bytes long, with 4 bytes of padding at the end:
1240
1241 +------+------+------+------+------+-------+-------+------+
1242 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1243 +------+------+------+------+------+-------+-------+------+
1244 0 4 8 12 16 20 24 28 32
1245
1246 so what happens if you allocate memory for this structure:
1247
1248 +------+------+------+------+------+-------+-------+------+------+...
1249 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1250 +------+------+------+------+------+-------+-------+------+------+...
1251 0 4 8 12 16 20 24 28 32 36
1252
1253 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1254 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1255 started out as zero once, but it's quite possible that it isn't. So now,
1256 rather than a nicely zeroed GP, you have it pointing somewhere random.
1257 Bugs ensue.
1258
1259 (In fact, GP ends up pointing at a previous GP structure, because the
1260 principle cause of the padding in XPVMG getting garbage is a copy of
1261 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1262 this happens to be moot because XPVGV has been re-ordered, with GP
1263 no longer after STASH)
1264
1265 So we are careful and work out the size of used parts of all the
1266 structures. */
1267
1268 switch (old_type) {
1269 case SVt_NULL:
1270 break;
1271 case SVt_IV:
1272 if (SvROK(sv)) {
1273 referent = SvRV(sv);
1274 old_type_details = &fake_rv;
1275 if (new_type == SVt_NV)
1276 new_type = SVt_PVNV;
1277 } else {
1278 if (new_type < SVt_PVIV) {
1279 new_type = (new_type == SVt_NV)
1280 ? SVt_PVNV : SVt_PVIV;
1281 }
1282 }
1283 break;
1284 case SVt_NV:
1285 if (new_type < SVt_PVNV) {
1286 new_type = SVt_PVNV;
1287 }
1288 break;
1289 case SVt_PV:
1290 assert(new_type > SVt_PV);
1291 STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1292 STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1293 break;
1294 case SVt_PVIV:
1295 break;
1296 case SVt_PVNV:
1297 break;
1298 case SVt_PVMG:
1299 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1300 there's no way that it can be safely upgraded, because perl.c
1301 expects to Safefree(SvANY(PL_mess_sv)) */
1302 assert(sv != PL_mess_sv);
1303 break;
1304 default:
1305 if (UNLIKELY(old_type_details->cant_upgrade))
1306 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1307 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1308 }
1309
1310 if (UNLIKELY(old_type > new_type))
1311 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1312 (int)old_type, (int)new_type);
1313
1314 new_type_details = bodies_by_type + new_type;
1315
1316 SvFLAGS(sv) &= ~SVTYPEMASK;
1317 SvFLAGS(sv) |= new_type;
1318
1319 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1320 the return statements above will have triggered. */
1321 assert (new_type != SVt_NULL);
1322 switch (new_type) {
1323 case SVt_IV:
1324 assert(old_type == SVt_NULL);
1325 SET_SVANY_FOR_BODYLESS_IV(sv);
1326 SvIV_set(sv, 0);
1327 return;
1328 case SVt_NV:
1329 assert(old_type == SVt_NULL);
1330#if NVSIZE <= IVSIZE
1331 SET_SVANY_FOR_BODYLESS_NV(sv);
1332#else
1333 SvANY(sv) = new_XNV();
1334#endif
1335 SvNV_set(sv, 0);
1336 return;
1337 case SVt_PVHV:
1338 case SVt_PVAV:
1339 assert(new_type_details->body_size);
1340
1341#ifndef PURIFY
1342 assert(new_type_details->arena);
1343 assert(new_type_details->arena_size);
1344 /* This points to the start of the allocated area. */
1345 new_body_inline(new_body, new_type);
1346 Zero(new_body, new_type_details->body_size, char);
1347 new_body = ((char *)new_body) - new_type_details->offset;
1348#else
1349 /* We always allocated the full length item with PURIFY. To do this
1350 we fake things so that arena is false for all 16 types.. */
1351 new_body = new_NOARENAZ(new_type_details);
1352#endif
1353 SvANY(sv) = new_body;
1354 if (new_type == SVt_PVAV) {
1355 AvMAX(sv) = -1;
1356 AvFILLp(sv) = -1;
1357 AvREAL_only(sv);
1358 if (old_type_details->body_size) {
1359 AvALLOC(sv) = 0;
1360 } else {
1361 /* It will have been zeroed when the new body was allocated.
1362 Lets not write to it, in case it confuses a write-back
1363 cache. */
1364 }
1365 } else {
1366 assert(!SvOK(sv));
1367 SvOK_off(sv);
1368#ifndef NODEFAULT_SHAREKEYS
1369 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1370#endif
1371 /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1372 HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1373 }
1374
1375 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1376 The target created by newSVrv also is, and it can have magic.
1377 However, it never has SvPVX set.
1378 */
1379 if (old_type == SVt_IV) {
1380 assert(!SvROK(sv));
1381 } else if (old_type >= SVt_PV) {
1382 assert(SvPVX_const(sv) == 0);
1383 }
1384
1385 if (old_type >= SVt_PVMG) {
1386 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1387 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1388 } else {
1389 sv->sv_u.svu_array = NULL; /* or svu_hash */
1390 }
1391 break;
1392
1393 case SVt_PVIV:
1394 /* XXX Is this still needed? Was it ever needed? Surely as there is
1395 no route from NV to PVIV, NOK can never be true */
1396 assert(!SvNOKp(sv));
1397 assert(!SvNOK(sv));
1398 /* FALLTHROUGH */
1399 case SVt_PVIO:
1400 case SVt_PVFM:
1401 case SVt_PVGV:
1402 case SVt_PVCV:
1403 case SVt_PVLV:
1404 case SVt_INVLIST:
1405 case SVt_REGEXP:
1406 case SVt_PVMG:
1407 case SVt_PVNV:
1408 case SVt_PV:
1409
1410 assert(new_type_details->body_size);
1411 /* We always allocated the full length item with PURIFY. To do this
1412 we fake things so that arena is false for all 16 types.. */
1413 if(new_type_details->arena) {
1414 /* This points to the start of the allocated area. */
1415 new_body_inline(new_body, new_type);
1416 Zero(new_body, new_type_details->body_size, char);
1417 new_body = ((char *)new_body) - new_type_details->offset;
1418 } else {
1419 new_body = new_NOARENAZ(new_type_details);
1420 }
1421 SvANY(sv) = new_body;
1422
1423 if (old_type_details->copy) {
1424 /* There is now the potential for an upgrade from something without
1425 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1426 int offset = old_type_details->offset;
1427 int length = old_type_details->copy;
1428
1429 if (new_type_details->offset > old_type_details->offset) {
1430 const int difference
1431 = new_type_details->offset - old_type_details->offset;
1432 offset += difference;
1433 length -= difference;
1434 }
1435 assert (length >= 0);
1436
1437 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1438 char);
1439 }
1440
1441#ifndef NV_ZERO_IS_ALLBITS_ZERO
1442 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1443 * correct 0.0 for us. Otherwise, if the old body didn't have an
1444 * NV slot, but the new one does, then we need to initialise the
1445 * freshly created NV slot with whatever the correct bit pattern is
1446 * for 0.0 */
1447 if (old_type_details->zero_nv && !new_type_details->zero_nv
1448 && !isGV_with_GP(sv))
1449 SvNV_set(sv, 0);
1450#endif
1451
1452 if (UNLIKELY(new_type == SVt_PVIO)) {
1453 IO * const io = MUTABLE_IO(sv);
1454 GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1455
1456 SvOBJECT_on(io);
1457 /* Clear the stashcache because a new IO could overrule a package
1458 name */
1459 DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1460 hv_clear(PL_stashcache);
1461
1462 SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1463 IoPAGE_LEN(sv) = 60;
1464 }
1465 if (UNLIKELY(new_type == SVt_REGEXP))
1466 sv->sv_u.svu_rx = (regexp *)new_body;
1467 else if (old_type < SVt_PV) {
1468 /* referent will be NULL unless the old type was SVt_IV emulating
1469 SVt_RV */
1470 sv->sv_u.svu_rv = referent;
1471 }
1472 break;
1473 default:
1474 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1475 (unsigned long)new_type);
1476 }
1477
1478 /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1479 and sometimes SVt_NV */
1480 if (old_type_details->body_size) {
1481#ifdef PURIFY
1482 safefree(old_body);
1483#else
1484 /* Note that there is an assumption that all bodies of types that
1485 can be upgraded came from arenas. Only the more complex non-
1486 upgradable types are allowed to be directly malloc()ed. */
1487 assert(old_type_details->arena);
1488 del_body((void*)((char*)old_body + old_type_details->offset),
1489 &PL_body_roots[old_type]);
1490#endif
1491 }
1492}
1493
1494/*
1495=for apidoc sv_backoff
1496
1497Remove any string offset. You should normally use the C<SvOOK_off> macro
1498wrapper instead.
1499
1500=cut
1501*/
1502
1503/* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1504 prior to 5.23.4 this function always returned 0
1505*/
1506
1507void
1508Perl_sv_backoff(SV *const sv)
1509{
1510 STRLEN delta;
1511 const char * const s = SvPVX_const(sv);
1512
1513 PERL_ARGS_ASSERT_SV_BACKOFF;
1514
1515 assert(SvOOK(sv));
1516 assert(SvTYPE(sv) != SVt_PVHV);
1517 assert(SvTYPE(sv) != SVt_PVAV);
1518
1519 SvOOK_offset(sv, delta);
1520
1521 SvLEN_set(sv, SvLEN(sv) + delta);
1522 SvPV_set(sv, SvPVX(sv) - delta);
1523 SvFLAGS(sv) &= ~SVf_OOK;
1524 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1525 return;
1526}
1527
1528
1529/* forward declaration */
1530static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1531
1532
1533/*
1534=for apidoc sv_grow
1535
1536Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1537upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1538Use the C<SvGROW> wrapper instead.
1539
1540=cut
1541*/
1542
1543
1544char *
1545Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1546{
1547 char *s;
1548
1549 PERL_ARGS_ASSERT_SV_GROW;
1550
1551 if (SvROK(sv))
1552 sv_unref(sv);
1553 if (SvTYPE(sv) < SVt_PV) {
1554 sv_upgrade(sv, SVt_PV);
1555 s = SvPVX_mutable(sv);
1556 }
1557 else if (SvOOK(sv)) { /* pv is offset? */
1558 sv_backoff(sv);
1559 s = SvPVX_mutable(sv);
1560 if (newlen > SvLEN(sv))
1561 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1562 }
1563 else
1564 {
1565 if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1566 s = SvPVX_mutable(sv);
1567 }
1568
1569#ifdef PERL_COPY_ON_WRITE
1570 /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1571 * to store the COW count. So in general, allocate one more byte than
1572 * asked for, to make it likely this byte is always spare: and thus
1573 * make more strings COW-able.
1574 *
1575 * Only increment if the allocation isn't MEM_SIZE_MAX,
1576 * otherwise it will wrap to 0.
1577 */
1578 if ( newlen != MEM_SIZE_MAX )
1579 newlen++;
1580#endif
1581
1582#if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1583#define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1584#endif
1585
1586 if (newlen > SvLEN(sv)) { /* need more room? */
1587 STRLEN minlen = SvCUR(sv);
1588 minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1589 if (newlen < minlen)
1590 newlen = minlen;
1591#ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1592
1593 /* Don't round up on the first allocation, as odds are pretty good that
1594 * the initial request is accurate as to what is really needed */
1595 if (SvLEN(sv)) {
1596 STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1597 if (rounded > newlen)
1598 newlen = rounded;
1599 }
1600#endif
1601 if (SvLEN(sv) && s) {
1602 s = (char*)saferealloc(s, newlen);
1603 }
1604 else {
1605 s = (char*)safemalloc(newlen);
1606 if (SvPVX_const(sv) && SvCUR(sv)) {
1607 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1608 }
1609 }
1610 SvPV_set(sv, s);
1611#ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1612 /* Do this here, do it once, do it right, and then we will never get
1613 called back into sv_grow() unless there really is some growing
1614 needed. */
1615 SvLEN_set(sv, Perl_safesysmalloc_size(s));
1616#else
1617 SvLEN_set(sv, newlen);
1618#endif
1619 }
1620 return s;
1621}
1622
1623/*
1624=for apidoc sv_setiv
1625
1626Copies an integer into the given SV, upgrading first if necessary.
1627Does not handle 'set' magic. See also C<L</sv_setiv_mg>>.
1628
1629=cut
1630*/
1631
1632void
1633Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1634{
1635 PERL_ARGS_ASSERT_SV_SETIV;
1636
1637 SV_CHECK_THINKFIRST_COW_DROP(sv);
1638 switch (SvTYPE(sv)) {
1639 case SVt_NULL:
1640 case SVt_NV:
1641 sv_upgrade(sv, SVt_IV);
1642 break;
1643 case SVt_PV:
1644 sv_upgrade(sv, SVt_PVIV);
1645 break;
1646
1647 case SVt_PVGV:
1648 if (!isGV_with_GP(sv))
1649 break;
1650 case SVt_PVAV:
1651 case SVt_PVHV:
1652 case SVt_PVCV:
1653 case SVt_PVFM:
1654 case SVt_PVIO:
1655 /* diag_listed_as: Can't coerce %s to %s in %s */
1656 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1657 OP_DESC(PL_op));
1658 NOT_REACHED; /* NOTREACHED */
1659 break;
1660 default: NOOP;
1661 }
1662 (void)SvIOK_only(sv); /* validate number */
1663 SvIV_set(sv, i);
1664 SvTAINT(sv);
1665}
1666
1667/*
1668=for apidoc sv_setiv_mg
1669
1670Like C<sv_setiv>, but also handles 'set' magic.
1671
1672=cut
1673*/
1674
1675void
1676Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1677{
1678 PERL_ARGS_ASSERT_SV_SETIV_MG;
1679
1680 sv_setiv(sv,i);
1681 SvSETMAGIC(sv);
1682}
1683
1684/*
1685=for apidoc sv_setuv
1686
1687Copies an unsigned integer into the given SV, upgrading first if necessary.
1688Does not handle 'set' magic. See also C<L</sv_setuv_mg>>.
1689
1690=cut
1691*/
1692
1693void
1694Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1695{
1696 PERL_ARGS_ASSERT_SV_SETUV;
1697
1698 /* With the if statement to ensure that integers are stored as IVs whenever
1699 possible:
1700 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1701
1702 without
1703 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1704
1705 If you wish to remove the following if statement, so that this routine
1706 (and its callers) always return UVs, please benchmark to see what the
1707 effect is. Modern CPUs may be different. Or may not :-)
1708 */
1709 if (u <= (UV)IV_MAX) {
1710 sv_setiv(sv, (IV)u);
1711 return;
1712 }
1713 sv_setiv(sv, 0);
1714 SvIsUV_on(sv);
1715 SvUV_set(sv, u);
1716}
1717
1718/*
1719=for apidoc sv_setuv_mg
1720
1721Like C<sv_setuv>, but also handles 'set' magic.
1722
1723=cut
1724*/
1725
1726void
1727Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1728{
1729 PERL_ARGS_ASSERT_SV_SETUV_MG;
1730
1731 sv_setuv(sv,u);
1732 SvSETMAGIC(sv);
1733}
1734
1735/*
1736=for apidoc sv_setnv
1737
1738Copies a double into the given SV, upgrading first if necessary.
1739Does not handle 'set' magic. See also C<L</sv_setnv_mg>>.
1740
1741=cut
1742*/
1743
1744void
1745Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1746{
1747 PERL_ARGS_ASSERT_SV_SETNV;
1748
1749 SV_CHECK_THINKFIRST_COW_DROP(sv);
1750 switch (SvTYPE(sv)) {
1751 case SVt_NULL:
1752 case SVt_IV:
1753 sv_upgrade(sv, SVt_NV);
1754 break;
1755 case SVt_PV:
1756 case SVt_PVIV:
1757 sv_upgrade(sv, SVt_PVNV);
1758 break;
1759
1760 case SVt_PVGV:
1761 if (!isGV_with_GP(sv))
1762 break;
1763 case SVt_PVAV:
1764 case SVt_PVHV:
1765 case SVt_PVCV:
1766 case SVt_PVFM:
1767 case SVt_PVIO:
1768 /* diag_listed_as: Can't coerce %s to %s in %s */
1769 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1770 OP_DESC(PL_op));
1771 NOT_REACHED; /* NOTREACHED */
1772 break;
1773 default: NOOP;
1774 }
1775 SvNV_set(sv, num);
1776 (void)SvNOK_only(sv); /* validate number */
1777 SvTAINT(sv);
1778}
1779
1780/*
1781=for apidoc sv_setnv_mg
1782
1783Like C<sv_setnv>, but also handles 'set' magic.
1784
1785=cut
1786*/
1787
1788void
1789Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1790{
1791 PERL_ARGS_ASSERT_SV_SETNV_MG;
1792
1793 sv_setnv(sv,num);
1794 SvSETMAGIC(sv);
1795}
1796
1797/* Return a cleaned-up, printable version of sv, for non-numeric, or
1798 * not incrementable warning display.
1799 * Originally part of S_not_a_number().
1800 * The return value may be != tmpbuf.
1801 */
1802
1803STATIC const char *
1804S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1805 const char *pv;
1806
1807 PERL_ARGS_ASSERT_SV_DISPLAY;
1808
1809 if (DO_UTF8(sv)) {
1810 SV *dsv = newSVpvs_flags("", SVs_TEMP);
1811 pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1812 } else {
1813 char *d = tmpbuf;
1814 const char * const limit = tmpbuf + tmpbuf_size - 8;
1815 /* each *s can expand to 4 chars + "...\0",
1816 i.e. need room for 8 chars */
1817
1818 const char *s = SvPVX_const(sv);
1819 const char * const end = s + SvCUR(sv);
1820 for ( ; s < end && d < limit; s++ ) {
1821 int ch = *s & 0xFF;
1822 if (! isASCII(ch) && !isPRINT_LC(ch)) {
1823 *d++ = 'M';
1824 *d++ = '-';
1825
1826 /* Map to ASCII "equivalent" of Latin1 */
1827 ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1828 }
1829 if (ch == '\n') {
1830 *d++ = '\\';
1831 *d++ = 'n';
1832 }
1833 else if (ch == '\r') {
1834 *d++ = '\\';
1835 *d++ = 'r';
1836 }
1837 else if (ch == '\f') {
1838 *d++ = '\\';
1839 *d++ = 'f';
1840 }
1841 else if (ch == '\\') {
1842 *d++ = '\\';
1843 *d++ = '\\';
1844 }
1845 else if (ch == '\0') {
1846 *d++ = '\\';
1847 *d++ = '0';
1848 }
1849 else if (isPRINT_LC(ch))
1850 *d++ = ch;
1851 else {
1852 *d++ = '^';
1853 *d++ = toCTRL(ch);
1854 }
1855 }
1856 if (s < end) {
1857 *d++ = '.';
1858 *d++ = '.';
1859 *d++ = '.';
1860 }
1861 *d = '\0';
1862 pv = tmpbuf;
1863 }
1864
1865 return pv;
1866}
1867
1868/* Print an "isn't numeric" warning, using a cleaned-up,
1869 * printable version of the offending string
1870 */
1871
1872STATIC void
1873S_not_a_number(pTHX_ SV *const sv)
1874{
1875 char tmpbuf[64];
1876 const char *pv;
1877
1878 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1879
1880 pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1881
1882 if (PL_op)
1883 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1884 /* diag_listed_as: Argument "%s" isn't numeric%s */
1885 "Argument \"%s\" isn't numeric in %s", pv,
1886 OP_DESC(PL_op));
1887 else
1888 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1889 /* diag_listed_as: Argument "%s" isn't numeric%s */
1890 "Argument \"%s\" isn't numeric", pv);
1891}
1892
1893STATIC void
1894S_not_incrementable(pTHX_ SV *const sv) {
1895 char tmpbuf[64];
1896 const char *pv;
1897
1898 PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1899
1900 pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1901
1902 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1903 "Argument \"%s\" treated as 0 in increment (++)", pv);
1904}
1905
1906/*
1907=for apidoc looks_like_number
1908
1909Test if the content of an SV looks like a number (or is a number).
1910C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1911non-numeric warning), even if your C<atof()> doesn't grok them. Get-magic is
1912ignored.
1913
1914=cut
1915*/
1916
1917I32
1918Perl_looks_like_number(pTHX_ SV *const sv)
1919{
1920 const char *sbegin;
1921 STRLEN len;
1922 int numtype;
1923
1924 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1925
1926 if (SvPOK(sv) || SvPOKp(sv)) {
1927 sbegin = SvPV_nomg_const(sv, len);
1928 }
1929 else
1930 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1931 numtype = grok_number(sbegin, len, NULL);
1932 return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1933}
1934
1935STATIC bool
1936S_glob_2number(pTHX_ GV * const gv)
1937{
1938 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1939
1940 /* We know that all GVs stringify to something that is not-a-number,
1941 so no need to test that. */
1942 if (ckWARN(WARN_NUMERIC))
1943 {
1944 SV *const buffer = sv_newmortal();
1945 gv_efullname3(buffer, gv, "*");
1946 not_a_number(buffer);
1947 }
1948 /* We just want something true to return, so that S_sv_2iuv_common
1949 can tail call us and return true. */
1950 return TRUE;
1951}
1952
1953/* Actually, ISO C leaves conversion of UV to IV undefined, but
1954 until proven guilty, assume that things are not that bad... */
1955
1956/*
1957 NV_PRESERVES_UV:
1958
1959 As 64 bit platforms often have an NV that doesn't preserve all bits of
1960 an IV (an assumption perl has been based on to date) it becomes necessary
1961 to remove the assumption that the NV always carries enough precision to
1962 recreate the IV whenever needed, and that the NV is the canonical form.
1963 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1964 precision as a side effect of conversion (which would lead to insanity
1965 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1966 1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1967 where precision was lost, and IV/UV/NV slots that have a valid conversion
1968 which has lost no precision
1969 2) to ensure that if a numeric conversion to one form is requested that
1970 would lose precision, the precise conversion (or differently
1971 imprecise conversion) is also performed and cached, to prevent
1972 requests for different numeric formats on the same SV causing
1973 lossy conversion chains. (lossless conversion chains are perfectly
1974 acceptable (still))
1975
1976
1977 flags are used:
1978 SvIOKp is true if the IV slot contains a valid value
1979 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1980 SvNOKp is true if the NV slot contains a valid value
1981 SvNOK is true only if the NV value is accurate
1982
1983 so
1984 while converting from PV to NV, check to see if converting that NV to an
1985 IV(or UV) would lose accuracy over a direct conversion from PV to
1986 IV(or UV). If it would, cache both conversions, return NV, but mark
1987 SV as IOK NOKp (ie not NOK).
1988
1989 While converting from PV to IV, check to see if converting that IV to an
1990 NV would lose accuracy over a direct conversion from PV to NV. If it
1991 would, cache both conversions, flag similarly.
1992
1993 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1994 correctly because if IV & NV were set NV *always* overruled.
1995 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1996 changes - now IV and NV together means that the two are interchangeable:
1997 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1998
1999 The benefit of this is that operations such as pp_add know that if
2000 SvIOK is true for both left and right operands, then integer addition
2001 can be used instead of floating point (for cases where the result won't
2002 overflow). Before, floating point was always used, which could lead to
2003 loss of precision compared with integer addition.
2004
2005 * making IV and NV equal status should make maths accurate on 64 bit
2006 platforms
2007 * may speed up maths somewhat if pp_add and friends start to use
2008 integers when possible instead of fp. (Hopefully the overhead in
2009 looking for SvIOK and checking for overflow will not outweigh the
2010 fp to integer speedup)
2011 * will slow down integer operations (callers of SvIV) on "inaccurate"
2012 values, as the change from SvIOK to SvIOKp will cause a call into
2013 sv_2iv each time rather than a macro access direct to the IV slot
2014 * should speed up number->string conversion on integers as IV is
2015 favoured when IV and NV are equally accurate
2016
2017 ####################################################################
2018 You had better be using SvIOK_notUV if you want an IV for arithmetic:
2019 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2020 On the other hand, SvUOK is true iff UV.
2021 ####################################################################
2022
2023 Your mileage will vary depending your CPU's relative fp to integer
2024 performance ratio.
2025*/
2026
2027#ifndef NV_PRESERVES_UV
2028# define IS_NUMBER_UNDERFLOW_IV 1
2029# define IS_NUMBER_UNDERFLOW_UV 2
2030# define IS_NUMBER_IV_AND_UV 2
2031# define IS_NUMBER_OVERFLOW_IV 4
2032# define IS_NUMBER_OVERFLOW_UV 5
2033
2034/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2035
2036/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2037STATIC int
2038S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2039# ifdef DEBUGGING
2040 , I32 numtype
2041# endif
2042 )
2043{
2044 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2045 PERL_UNUSED_CONTEXT;
2046
2047 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));
2048 if (SvNVX(sv) < (NV)IV_MIN) {
2049 (void)SvIOKp_on(sv);
2050 (void)SvNOK_on(sv);
2051 SvIV_set(sv, IV_MIN);
2052 return IS_NUMBER_UNDERFLOW_IV;
2053 }
2054 if (SvNVX(sv) > (NV)UV_MAX) {
2055 (void)SvIOKp_on(sv);
2056 (void)SvNOK_on(sv);
2057 SvIsUV_on(sv);
2058 SvUV_set(sv, UV_MAX);
2059 return IS_NUMBER_OVERFLOW_UV;
2060 }
2061 (void)SvIOKp_on(sv);
2062 (void)SvNOK_on(sv);
2063 /* Can't use strtol etc to convert this string. (See truth table in
2064 sv_2iv */
2065 if (SvNVX(sv) <= (UV)IV_MAX) {
2066 SvIV_set(sv, I_V(SvNVX(sv)));
2067 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2068 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2069 } else {
2070 /* Integer is imprecise. NOK, IOKp */
2071 }
2072 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2073 }
2074 SvIsUV_on(sv);
2075 SvUV_set(sv, U_V(SvNVX(sv)));
2076 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2077 if (SvUVX(sv) == UV_MAX) {
2078 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2079 possibly be preserved by NV. Hence, it must be overflow.
2080 NOK, IOKp */
2081 return IS_NUMBER_OVERFLOW_UV;
2082 }
2083 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2084 } else {
2085 /* Integer is imprecise. NOK, IOKp */
2086 }
2087 return IS_NUMBER_OVERFLOW_IV;
2088}
2089#endif /* !NV_PRESERVES_UV*/
2090
2091/* If numtype is infnan, set the NV of the sv accordingly.
2092 * If numtype is anything else, try setting the NV using Atof(PV). */
2093#ifdef USING_MSVC6
2094# pragma warning(push)
2095# pragma warning(disable:4756;disable:4056)
2096#endif
2097static void
2098S_sv_setnv(pTHX_ SV* sv, int numtype)
2099{
2100 bool pok = cBOOL(SvPOK(sv));
2101 bool nok = FALSE;
2102#ifdef NV_INF
2103 if ((numtype & IS_NUMBER_INFINITY)) {
2104 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2105 nok = TRUE;
2106 } else
2107#endif
2108#ifdef NV_NAN
2109 if ((numtype & IS_NUMBER_NAN)) {
2110 SvNV_set(sv, NV_NAN);
2111 nok = TRUE;
2112 } else
2113#endif
2114 if (pok) {
2115 SvNV_set(sv, Atof(SvPVX_const(sv)));
2116 /* Purposefully no true nok here, since we don't want to blow
2117 * away the possible IOK/UV of an existing sv. */
2118 }
2119 if (nok) {
2120 SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2121 if (pok)
2122 SvPOK_on(sv); /* PV is okay, though. */
2123 }
2124}
2125#ifdef USING_MSVC6
2126# pragma warning(pop)
2127#endif
2128
2129STATIC bool
2130S_sv_2iuv_common(pTHX_ SV *const sv)
2131{
2132 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2133
2134 if (SvNOKp(sv)) {
2135 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2136 * without also getting a cached IV/UV from it at the same time
2137 * (ie PV->NV conversion should detect loss of accuracy and cache
2138 * IV or UV at same time to avoid this. */
2139 /* IV-over-UV optimisation - choose to cache IV if possible */
2140
2141 if (SvTYPE(sv) == SVt_NV)
2142 sv_upgrade(sv, SVt_PVNV);
2143
2144 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2145 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2146 certainly cast into the IV range at IV_MAX, whereas the correct
2147 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2148 cases go to UV */
2149#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2150 if (Perl_isnan(SvNVX(sv))) {
2151 SvUV_set(sv, 0);
2152 SvIsUV_on(sv);
2153 return FALSE;
2154 }
2155#endif
2156 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2157 SvIV_set(sv, I_V(SvNVX(sv)));
2158 if (SvNVX(sv) == (NV) SvIVX(sv)
2159#ifndef NV_PRESERVES_UV
2160 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2161 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2162 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2163 /* Don't flag it as "accurately an integer" if the number
2164 came from a (by definition imprecise) NV operation, and
2165 we're outside the range of NV integer precision */
2166#endif
2167 ) {
2168 if (SvNOK(sv))
2169 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2170 else {
2171 /* scalar has trailing garbage, eg "42a" */
2172 }
2173 DEBUG_c(PerlIO_printf(Perl_debug_log,
2174 "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2175 PTR2UV(sv),
2176 SvNVX(sv),
2177 SvIVX(sv)));
2178
2179 } else {
2180 /* IV not precise. No need to convert from PV, as NV
2181 conversion would already have cached IV if it detected
2182 that PV->IV would be better than PV->NV->IV
2183 flags already correct - don't set public IOK. */
2184 DEBUG_c(PerlIO_printf(Perl_debug_log,
2185 "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2186 PTR2UV(sv),
2187 SvNVX(sv),
2188 SvIVX(sv)));
2189 }
2190 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2191 but the cast (NV)IV_MIN rounds to a the value less (more
2192 negative) than IV_MIN which happens to be equal to SvNVX ??
2193 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2194 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2195 (NV)UVX == NVX are both true, but the values differ. :-(
2196 Hopefully for 2s complement IV_MIN is something like
2197 0x8000000000000000 which will be exact. NWC */
2198 }
2199 else {
2200 SvUV_set(sv, U_V(SvNVX(sv)));
2201 if (
2202 (SvNVX(sv) == (NV) SvUVX(sv))
2203#ifndef NV_PRESERVES_UV
2204 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2205 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2206 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2207 /* Don't flag it as "accurately an integer" if the number
2208 came from a (by definition imprecise) NV operation, and
2209 we're outside the range of NV integer precision */
2210#endif
2211 && SvNOK(sv)
2212 )
2213 SvIOK_on(sv);
2214 SvIsUV_on(sv);
2215 DEBUG_c(PerlIO_printf(Perl_debug_log,
2216 "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2217 PTR2UV(sv),
2218 SvUVX(sv),
2219 SvUVX(sv)));
2220 }
2221 }
2222 else if (SvPOKp(sv)) {
2223 UV value;
2224 int numtype;
2225 const char *s = SvPVX_const(sv);
2226 const STRLEN cur = SvCUR(sv);
2227
2228 /* short-cut for a single digit string like "1" */
2229
2230 if (cur == 1) {
2231 char c = *s;
2232 if (isDIGIT(c)) {
2233 if (SvTYPE(sv) < SVt_PVIV)
2234 sv_upgrade(sv, SVt_PVIV);
2235 (void)SvIOK_on(sv);
2236 SvIV_set(sv, (IV)(c - '0'));
2237 return FALSE;
2238 }
2239 }
2240
2241 numtype = grok_number(s, cur, &value);
2242 /* We want to avoid a possible problem when we cache an IV/ a UV which
2243 may be later translated to an NV, and the resulting NV is not
2244 the same as the direct translation of the initial string
2245 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2246 be careful to ensure that the value with the .456 is around if the
2247 NV value is requested in the future).
2248
2249 This means that if we cache such an IV/a UV, we need to cache the
2250 NV as well. Moreover, we trade speed for space, and do not
2251 cache the NV if we are sure it's not needed.
2252 */
2253
2254 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2255 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2256 == IS_NUMBER_IN_UV) {
2257 /* It's definitely an integer, only upgrade to PVIV */
2258 if (SvTYPE(sv) < SVt_PVIV)
2259 sv_upgrade(sv, SVt_PVIV);
2260 (void)SvIOK_on(sv);
2261 } else if (SvTYPE(sv) < SVt_PVNV)
2262 sv_upgrade(sv, SVt_PVNV);
2263
2264 if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2265 if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2266 not_a_number(sv);
2267 S_sv_setnv(aTHX_ sv, numtype);
2268 return FALSE;
2269 }
2270
2271 /* If NVs preserve UVs then we only use the UV value if we know that
2272 we aren't going to call atof() below. If NVs don't preserve UVs
2273 then the value returned may have more precision than atof() will
2274 return, even though value isn't perfectly accurate. */
2275 if ((numtype & (IS_NUMBER_IN_UV
2276#ifdef NV_PRESERVES_UV
2277 | IS_NUMBER_NOT_INT
2278#endif
2279 )) == IS_NUMBER_IN_UV) {
2280 /* This won't turn off the public IOK flag if it was set above */
2281 (void)SvIOKp_on(sv);
2282
2283 if (!(numtype & IS_NUMBER_NEG)) {
2284 /* positive */;
2285 if (value <= (UV)IV_MAX) {
2286 SvIV_set(sv, (IV)value);
2287 } else {
2288 /* it didn't overflow, and it was positive. */
2289 SvUV_set(sv, value);
2290 SvIsUV_on(sv);
2291 }
2292 } else {
2293 /* 2s complement assumption */
2294 if (value <= (UV)IV_MIN) {
2295 SvIV_set(sv, value == (UV)IV_MIN
2296 ? IV_MIN : -(IV)value);
2297 } else {
2298 /* Too negative for an IV. This is a double upgrade, but
2299 I'm assuming it will be rare. */
2300 if (SvTYPE(sv) < SVt_PVNV)
2301 sv_upgrade(sv, SVt_PVNV);
2302 SvNOK_on(sv);
2303 SvIOK_off(sv);
2304 SvIOKp_on(sv);
2305 SvNV_set(sv, -(NV)value);
2306 SvIV_set(sv, IV_MIN);
2307 }
2308 }
2309 }
2310 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2311 will be in the previous block to set the IV slot, and the next
2312 block to set the NV slot. So no else here. */
2313
2314 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2315 != IS_NUMBER_IN_UV) {
2316 /* It wasn't an (integer that doesn't overflow the UV). */
2317 S_sv_setnv(aTHX_ sv, numtype);
2318
2319 if (! numtype && ckWARN(WARN_NUMERIC))
2320 not_a_number(sv);
2321
2322 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2323 PTR2UV(sv), SvNVX(sv)));
2324
2325#ifdef NV_PRESERVES_UV
2326 (void)SvIOKp_on(sv);
2327 (void)SvNOK_on(sv);
2328#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2329 if (Perl_isnan(SvNVX(sv))) {
2330 SvUV_set(sv, 0);
2331 SvIsUV_on(sv);
2332 return FALSE;
2333 }
2334#endif
2335 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2336 SvIV_set(sv, I_V(SvNVX(sv)));
2337 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2338 SvIOK_on(sv);
2339 } else {
2340 NOOP; /* Integer is imprecise. NOK, IOKp */
2341 }
2342 /* UV will not work better than IV */
2343 } else {
2344 if (SvNVX(sv) > (NV)UV_MAX) {
2345 SvIsUV_on(sv);
2346 /* Integer is inaccurate. NOK, IOKp, is UV */
2347 SvUV_set(sv, UV_MAX);
2348 } else {
2349 SvUV_set(sv, U_V(SvNVX(sv)));
2350 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2351 NV preservse UV so can do correct comparison. */
2352 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2353 SvIOK_on(sv);
2354 } else {
2355 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
2356 }
2357 }
2358 SvIsUV_on(sv);
2359 }
2360#else /* NV_PRESERVES_UV */
2361 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2362 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2363 /* The IV/UV slot will have been set from value returned by
2364 grok_number above. The NV slot has just been set using
2365 Atof. */
2366 SvNOK_on(sv);
2367 assert (SvIOKp(sv));
2368 } else {
2369 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2370 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2371 /* Small enough to preserve all bits. */
2372 (void)SvIOKp_on(sv);
2373 SvNOK_on(sv);
2374 SvIV_set(sv, I_V(SvNVX(sv)));
2375 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2376 SvIOK_on(sv);
2377 /* Assumption: first non-preserved integer is < IV_MAX,
2378 this NV is in the preserved range, therefore: */
2379 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2380 < (UV)IV_MAX)) {
2381 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);
2382 }
2383 } else {
2384 /* IN_UV NOT_INT
2385 0 0 already failed to read UV.
2386 0 1 already failed to read UV.
2387 1 0 you won't get here in this case. IV/UV
2388 slot set, public IOK, Atof() unneeded.
2389 1 1 already read UV.
2390 so there's no point in sv_2iuv_non_preserve() attempting
2391 to use atol, strtol, strtoul etc. */
2392# ifdef DEBUGGING
2393 sv_2iuv_non_preserve (sv, numtype);
2394# else
2395 sv_2iuv_non_preserve (sv);
2396# endif
2397 }
2398 }
2399#endif /* NV_PRESERVES_UV */
2400 /* It might be more code efficient to go through the entire logic above
2401 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2402 gets complex and potentially buggy, so more programmer efficient
2403 to do it this way, by turning off the public flags: */
2404 if (!numtype)
2405 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2406 }
2407 }
2408 else {
2409 if (isGV_with_GP(sv))
2410 return glob_2number(MUTABLE_GV(sv));
2411
2412 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2413 report_uninit(sv);
2414 if (SvTYPE(sv) < SVt_IV)
2415 /* Typically the caller expects that sv_any is not NULL now. */
2416 sv_upgrade(sv, SVt_IV);
2417 /* Return 0 from the caller. */
2418 return TRUE;
2419 }
2420 return FALSE;
2421}
2422
2423/*
2424=for apidoc sv_2iv_flags
2425
2426Return the integer value of an SV, doing any necessary string
2427conversion. If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2428Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2429
2430=cut
2431*/
2432
2433IV
2434Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2435{
2436 PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2437
2438 assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2439 && SvTYPE(sv) != SVt_PVFM);
2440
2441 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2442 mg_get(sv);
2443
2444 if (SvROK(sv)) {
2445 if (SvAMAGIC(sv)) {
2446 SV * tmpstr;
2447 if (flags & SV_SKIP_OVERLOAD)
2448 return 0;
2449 tmpstr = AMG_CALLunary(sv, numer_amg);
2450 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2451 return SvIV(tmpstr);
2452 }
2453 }
2454 return PTR2IV(SvRV(sv));
2455 }
2456
2457 if (SvVALID(sv) || isREGEXP(sv)) {
2458 /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2459 must not let them cache IVs.
2460 In practice they are extremely unlikely to actually get anywhere
2461 accessible by user Perl code - the only way that I'm aware of is when
2462 a constant subroutine which is used as the second argument to index.
2463
2464 Regexps have no SvIVX and SvNVX fields.
2465 */
2466 assert(isREGEXP(sv) || SvPOKp(sv));
2467 {
2468 UV value;
2469 const char * const ptr =
2470 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2471 const int numtype
2472 = grok_number(ptr, SvCUR(sv), &value);
2473
2474 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2475 == IS_NUMBER_IN_UV) {
2476 /* It's definitely an integer */
2477 if (numtype & IS_NUMBER_NEG) {
2478 if (value < (UV)IV_MIN)
2479 return -(IV)value;
2480 } else {
2481 if (value < (UV)IV_MAX)
2482 return (IV)value;
2483 }
2484 }
2485
2486 /* Quite wrong but no good choices. */
2487 if ((numtype & IS_NUMBER_INFINITY)) {
2488 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2489 } else if ((numtype & IS_NUMBER_NAN)) {
2490 return 0; /* So wrong. */
2491 }
2492
2493 if (!numtype) {
2494 if (ckWARN(WARN_NUMERIC))
2495 not_a_number(sv);
2496 }
2497 return I_V(Atof(ptr));
2498 }
2499 }
2500
2501 if (SvTHINKFIRST(sv)) {
2502 if (SvREADONLY(sv) && !SvOK(sv)) {
2503 if (ckWARN(WARN_UNINITIALIZED))
2504 report_uninit(sv);
2505 return 0;
2506 }
2507 }
2508
2509 if (!SvIOKp(sv)) {
2510 if (S_sv_2iuv_common(aTHX_ sv))
2511 return 0;
2512 }
2513
2514 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2515 PTR2UV(sv),SvIVX(sv)));
2516 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2517}
2518
2519/*
2520=for apidoc sv_2uv_flags
2521
2522Return the unsigned integer value of an SV, doing any necessary string
2523conversion. If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2524Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2525
2526=cut
2527*/
2528
2529UV
2530Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2531{
2532 PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2533
2534 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2535 mg_get(sv);
2536
2537 if (SvROK(sv)) {
2538 if (SvAMAGIC(sv)) {
2539 SV *tmpstr;
2540 if (flags & SV_SKIP_OVERLOAD)
2541 return 0;
2542 tmpstr = AMG_CALLunary(sv, numer_amg);
2543 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2544 return SvUV(tmpstr);
2545 }
2546 }
2547 return PTR2UV(SvRV(sv));
2548 }
2549
2550 if (SvVALID(sv) || isREGEXP(sv)) {
2551 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2552 the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2553 Regexps have no SvIVX and SvNVX fields. */
2554 assert(isREGEXP(sv) || SvPOKp(sv));
2555 {
2556 UV value;
2557 const char * const ptr =
2558 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2559 const int numtype
2560 = grok_number(ptr, SvCUR(sv), &value);
2561
2562 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2563 == IS_NUMBER_IN_UV) {
2564 /* It's definitely an integer */
2565 if (!(numtype & IS_NUMBER_NEG))
2566 return value;
2567 }
2568
2569 /* Quite wrong but no good choices. */
2570 if ((numtype & IS_NUMBER_INFINITY)) {
2571 return UV_MAX; /* So wrong. */
2572 } else if ((numtype & IS_NUMBER_NAN)) {
2573 return 0; /* So wrong. */
2574 }
2575
2576 if (!numtype) {
2577 if (ckWARN(WARN_NUMERIC))
2578 not_a_number(sv);
2579 }
2580 return U_V(Atof(ptr));
2581 }
2582 }
2583
2584 if (SvTHINKFIRST(sv)) {
2585 if (SvREADONLY(sv) && !SvOK(sv)) {
2586 if (ckWARN(WARN_UNINITIALIZED))
2587 report_uninit(sv);
2588 return 0;
2589 }
2590 }
2591
2592 if (!SvIOKp(sv)) {
2593 if (S_sv_2iuv_common(aTHX_ sv))
2594 return 0;
2595 }
2596
2597 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2598 PTR2UV(sv),SvUVX(sv)));
2599 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2600}
2601
2602/*
2603=for apidoc sv_2nv_flags
2604
2605Return the num value of an SV, doing any necessary string or integer
2606conversion. If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2607Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2608
2609=cut
2610*/
2611
2612NV
2613Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2614{
2615 PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2616
2617 assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2618 && SvTYPE(sv) != SVt_PVFM);
2619 if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2620 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2621 the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2622 Regexps have no SvIVX and SvNVX fields. */
2623 const char *ptr;
2624 if (flags & SV_GMAGIC)
2625 mg_get(sv);
2626 if (SvNOKp(sv))
2627 return SvNVX(sv);
2628 if (SvPOKp(sv) && !SvIOKp(sv)) {
2629 ptr = SvPVX_const(sv);
2630 grokpv:
2631 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2632 !grok_number(ptr, SvCUR(sv), NULL))
2633 not_a_number(sv);
2634 return Atof(ptr);
2635 }
2636 if (SvIOKp(sv)) {
2637 if (SvIsUV(sv))
2638 return (NV)SvUVX(sv);
2639 else
2640 return (NV)SvIVX(sv);
2641 }
2642 if (SvROK(sv)) {
2643 goto return_rok;
2644 }
2645 if (isREGEXP(sv)) {
2646 ptr = RX_WRAPPED((REGEXP *)sv);
2647 goto grokpv;
2648 }
2649 assert(SvTYPE(sv) >= SVt_PVMG);
2650 /* This falls through to the report_uninit near the end of the
2651 function. */
2652 } else if (SvTHINKFIRST(sv)) {
2653 if (SvROK(sv)) {
2654 return_rok:
2655 if (SvAMAGIC(sv)) {
2656 SV *tmpstr;
2657 if (flags & SV_SKIP_OVERLOAD)
2658 return 0;
2659 tmpstr = AMG_CALLunary(sv, numer_amg);
2660 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2661 return SvNV(tmpstr);
2662 }
2663 }
2664 return PTR2NV(SvRV(sv));
2665 }
2666 if (SvREADONLY(sv) && !SvOK(sv)) {
2667 if (ckWARN(WARN_UNINITIALIZED))
2668 report_uninit(sv);
2669 return 0.0;
2670 }
2671 }
2672 if (SvTYPE(sv) < SVt_NV) {
2673 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2674 sv_upgrade(sv, SVt_NV);
2675 DEBUG_c({
2676 STORE_NUMERIC_LOCAL_SET_STANDARD();
2677 PerlIO_printf(Perl_debug_log,
2678 "0x%" UVxf " num(%" NVgf ")\n",
2679 PTR2UV(sv), SvNVX(sv));
2680 RESTORE_NUMERIC_LOCAL();
2681 });
2682 }
2683 else if (SvTYPE(sv) < SVt_PVNV)
2684 sv_upgrade(sv, SVt_PVNV);
2685 if (SvNOKp(sv)) {
2686 return SvNVX(sv);
2687 }
2688 if (SvIOKp(sv)) {
2689 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2690#ifdef NV_PRESERVES_UV
2691 if (SvIOK(sv))
2692 SvNOK_on(sv);
2693 else
2694 SvNOKp_on(sv);
2695#else
2696 /* Only set the public NV OK flag if this NV preserves the IV */
2697 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2698 if (SvIOK(sv) &&
2699 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2700 : (SvIVX(sv) == I_V(SvNVX(sv))))
2701 SvNOK_on(sv);
2702 else
2703 SvNOKp_on(sv);
2704#endif
2705 }
2706 else if (SvPOKp(sv)) {
2707 UV value;
2708 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2709 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2710 not_a_number(sv);
2711#ifdef NV_PRESERVES_UV
2712 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2713 == IS_NUMBER_IN_UV) {
2714 /* It's definitely an integer */
2715 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2716 } else {
2717 S_sv_setnv(aTHX_ sv, numtype);
2718 }
2719 if (numtype)
2720 SvNOK_on(sv);
2721 else
2722 SvNOKp_on(sv);
2723#else
2724 SvNV_set(sv, Atof(SvPVX_const(sv)));
2725 /* Only set the public NV OK flag if this NV preserves the value in
2726 the PV at least as well as an IV/UV would.
2727 Not sure how to do this 100% reliably. */
2728 /* if that shift count is out of range then Configure's test is
2729 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2730 UV_BITS */
2731 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2732 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2733 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2734 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2735 /* Can't use strtol etc to convert this string, so don't try.
2736 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2737 SvNOK_on(sv);
2738 } else {
2739 /* value has been set. It may not be precise. */
2740 if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2741 /* 2s complement assumption for (UV)IV_MIN */
2742 SvNOK_on(sv); /* Integer is too negative. */
2743 } else {
2744 SvNOKp_on(sv);
2745 SvIOKp_on(sv);
2746
2747 if (numtype & IS_NUMBER_NEG) {
2748 /* -IV_MIN is undefined, but we should never reach
2749 * this point with both IS_NUMBER_NEG and value ==
2750 * (UV)IV_MIN */
2751 assert(value != (UV)IV_MIN);
2752 SvIV_set(sv, -(IV)value);
2753 } else if (value <= (UV)IV_MAX) {
2754 SvIV_set(sv, (IV)value);
2755 } else {
2756 SvUV_set(sv, value);
2757 SvIsUV_on(sv);
2758 }
2759
2760 if (numtype & IS_NUMBER_NOT_INT) {
2761 /* I believe that even if the original PV had decimals,
2762 they are lost beyond the limit of the FP precision.
2763 However, neither is canonical, so both only get p
2764 flags. NWC, 2000/11/25 */
2765 /* Both already have p flags, so do nothing */
2766 } else {
2767 const NV nv = SvNVX(sv);
2768 /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2769 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2770 if (SvIVX(sv) == I_V(nv)) {
2771 SvNOK_on(sv);
2772 } else {
2773 /* It had no "." so it must be integer. */
2774 }
2775 SvIOK_on(sv);
2776 } else {
2777 /* between IV_MAX and NV(UV_MAX).
2778 Could be slightly > UV_MAX */
2779
2780 if (numtype & IS_NUMBER_NOT_INT) {
2781 /* UV and NV both imprecise. */
2782 } else {
2783 const UV nv_as_uv = U_V(nv);
2784
2785 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2786 SvNOK_on(sv);
2787 }
2788 SvIOK_on(sv);
2789 }
2790 }
2791 }
2792 }
2793 }
2794 /* It might be more code efficient to go through the entire logic above
2795 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2796 gets complex and potentially buggy, so more programmer efficient
2797 to do it this way, by turning off the public flags: */
2798 if (!numtype)
2799 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2800#endif /* NV_PRESERVES_UV */
2801 }
2802 else {
2803 if (isGV_with_GP(sv)) {
2804 glob_2number(MUTABLE_GV(sv));
2805 return 0.0;
2806 }
2807
2808 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2809 report_uninit(sv);
2810 assert (SvTYPE(sv) >= SVt_NV);
2811 /* Typically the caller expects that sv_any is not NULL now. */
2812 /* XXX Ilya implies that this is a bug in callers that assume this
2813 and ideally should be fixed. */
2814 return 0.0;
2815 }
2816 DEBUG_c({
2817 STORE_NUMERIC_LOCAL_SET_STANDARD();
2818 PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2819 PTR2UV(sv), SvNVX(sv));
2820 RESTORE_NUMERIC_LOCAL();
2821 });
2822 return SvNVX(sv);
2823}
2824
2825/*
2826=for apidoc sv_2num
2827
2828Return an SV with the numeric value of the source SV, doing any necessary
2829reference or overload conversion. The caller is expected to have handled
2830get-magic already.
2831
2832=cut
2833*/
2834
2835SV *
2836Perl_sv_2num(pTHX_ SV *const sv)
2837{
2838 PERL_ARGS_ASSERT_SV_2NUM;
2839
2840 if (!SvROK(sv))
2841 return sv;
2842 if (SvAMAGIC(sv)) {
2843 SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2844 TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2845 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2846 return sv_2num(tmpsv);
2847 }
2848 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2849}
2850
2851/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2852 * UV as a string towards the end of buf, and return pointers to start and
2853 * end of it.
2854 *
2855 * We assume that buf is at least TYPE_CHARS(UV) long.
2856 */
2857
2858static char *
2859S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2860{
2861 char *ptr = buf + TYPE_CHARS(UV);
2862 char * const ebuf = ptr;
2863 int sign;
2864
2865 PERL_ARGS_ASSERT_UIV_2BUF;
2866
2867 if (is_uv)
2868 sign = 0;
2869 else if (iv >= 0) {
2870 uv = iv;
2871 sign = 0;
2872 } else {
2873 uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2874 sign = 1;
2875 }
2876 do {
2877 *--ptr = '0' + (char)(uv % 10);
2878 } while (uv /= 10);
2879 if (sign)
2880 *--ptr = '-';
2881 *peob = ebuf;
2882 return ptr;
2883}
2884
2885/* Helper for sv_2pv_flags and sv_vcatpvfn_flags. If the NV is an
2886 * infinity or a not-a-number, writes the appropriate strings to the
2887 * buffer, including a zero byte. On success returns the written length,
2888 * excluding the zero byte, on failure (not an infinity, not a nan)
2889 * returns zero, assert-fails on maxlen being too short.
2890 *
2891 * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2892 * shared string constants we point to, instead of generating a new
2893 * string for each instance. */
2894STATIC size_t
2895S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2896 char* s = buffer;
2897 assert(maxlen >= 4);
2898 if (Perl_isinf(nv)) {
2899 if (nv < 0) {
2900 if (maxlen < 5) /* "-Inf\0" */
2901 return 0;
2902 *s++ = '-';
2903 } else if (plus) {
2904 *s++ = '+';
2905 }
2906 *s++ = 'I';
2907 *s++ = 'n';
2908 *s++ = 'f';
2909 }
2910 else if (Perl_isnan(nv)) {
2911 *s++ = 'N';
2912 *s++ = 'a';
2913 *s++ = 'N';
2914 /* XXX optionally output the payload mantissa bits as
2915 * "(unsigned)" (to match the nan("...") C99 function,
2916 * or maybe as "(0xhhh...)" would make more sense...
2917 * provide a format string so that the user can decide?
2918 * NOTE: would affect the maxlen and assert() logic.*/
2919 }
2920 else {
2921 return 0;
2922 }
2923 assert((s == buffer + 3) || (s == buffer + 4));
2924 *s = 0;
2925 return s - buffer;
2926}
2927
2928/*
2929=for apidoc sv_2pv_flags
2930
2931Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2932If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first. Coerces C<sv> to a
2933string if necessary. Normally invoked via the C<SvPV_flags> macro.
2934C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2935
2936=cut
2937*/
2938
2939char *
2940Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2941{
2942 char *s;
2943
2944 PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2945
2946 assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2947 && SvTYPE(sv) != SVt_PVFM);
2948 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2949 mg_get(sv);
2950 if (SvROK(sv)) {
2951 if (SvAMAGIC(sv)) {
2952 SV *tmpstr;
2953 if (flags & SV_SKIP_OVERLOAD)
2954 return NULL;
2955 tmpstr = AMG_CALLunary(sv, string_amg);
2956 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2957 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2958 /* Unwrap this: */
2959 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2960 */
2961
2962 char *pv;
2963 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2964 if (flags & SV_CONST_RETURN) {
2965 pv = (char *) SvPVX_const(tmpstr);
2966 } else {
2967 pv = (flags & SV_MUTABLE_RETURN)
2968 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2969 }
2970 if (lp)
2971 *lp = SvCUR(tmpstr);
2972 } else {
2973 pv = sv_2pv_flags(tmpstr, lp, flags);
2974 }
2975 if (SvUTF8(tmpstr))
2976 SvUTF8_on(sv);
2977 else
2978 SvUTF8_off(sv);
2979 return pv;
2980 }
2981 }
2982 {
2983 STRLEN len;
2984 char *retval;
2985 char *buffer;
2986 SV *const referent = SvRV(sv);
2987
2988 if (!referent) {
2989 len = 7;
2990 retval = buffer = savepvn("NULLREF", len);
2991 } else if (SvTYPE(referent) == SVt_REGEXP &&
2992 (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2993 amagic_is_enabled(string_amg))) {
2994 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2995
2996 assert(re);
2997
2998 /* If the regex is UTF-8 we want the containing scalar to
2999 have an UTF-8 flag too */
3000 if (RX_UTF8(re))
3001 SvUTF8_on(sv);
3002 else
3003 SvUTF8_off(sv);
3004
3005 if (lp)
3006 *lp = RX_WRAPLEN(re);
3007
3008 return RX_WRAPPED(re);
3009 } else {
3010 const char *const typestr = sv_reftype(referent, 0);
3011 const STRLEN typelen = strlen(typestr);
3012 UV addr = PTR2UV(referent);
3013 const char *stashname = NULL;
3014 STRLEN stashnamelen = 0; /* hush, gcc */
3015 const char *buffer_end;
3016
3017 if (SvOBJECT(referent)) {
3018 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3019
3020 if (name) {
3021 stashname = HEK_KEY(name);
3022 stashnamelen = HEK_LEN(name);
3023
3024 if (HEK_UTF8(name)) {
3025 SvUTF8_on(sv);
3026 } else {
3027 SvUTF8_off(sv);
3028 }
3029 } else {
3030 stashname = "__ANON__";
3031 stashnamelen = 8;
3032 }
3033 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3034 + 2 * sizeof(UV) + 2 /* )\0 */;
3035 } else {
3036 len = typelen + 3 /* (0x */
3037 + 2 * sizeof(UV) + 2 /* )\0 */;
3038 }
3039
3040 Newx(buffer, len, char);
3041 buffer_end = retval = buffer + len;
3042
3043 /* Working backwards */
3044 *--retval = '\0';
3045 *--retval = ')';
3046 do {
3047 *--retval = PL_hexdigit[addr & 15];
3048 } while (addr >>= 4);
3049 *--retval = 'x';
3050 *--retval = '0';
3051 *--retval = '(';
3052
3053 retval -= typelen;
3054 memcpy(retval, typestr, typelen);
3055
3056 if (stashname) {
3057 *--retval = '=';
3058 retval -= stashnamelen;
3059 memcpy(retval, stashname, stashnamelen);
3060 }
3061 /* retval may not necessarily have reached the start of the
3062 buffer here. */
3063 assert (retval >= buffer);
3064
3065 len = buffer_end - retval - 1; /* -1 for that \0 */
3066 }
3067 if (lp)
3068 *lp = len;
3069 SAVEFREEPV(buffer);
3070 return retval;
3071 }
3072 }
3073
3074 if (SvPOKp(sv)) {
3075 if (lp)
3076 *lp = SvCUR(sv);
3077 if (flags & SV_MUTABLE_RETURN)
3078 return SvPVX_mutable(sv);
3079 if (flags & SV_CONST_RETURN)
3080 return (char *)SvPVX_const(sv);
3081 return SvPVX(sv);
3082 }
3083
3084 if (SvIOK(sv)) {
3085 /* I'm assuming that if both IV and NV are equally valid then
3086 converting the IV is going to be more efficient */
3087 const U32 isUIOK = SvIsUV(sv);
3088 char buf[TYPE_CHARS(UV)];
3089 char *ebuf, *ptr;
3090 STRLEN len;
3091
3092 if (SvTYPE(sv) < SVt_PVIV)
3093 sv_upgrade(sv, SVt_PVIV);
3094 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3095 len = ebuf - ptr;
3096 /* inlined from sv_setpvn */
3097 s = SvGROW_mutable(sv, len + 1);
3098 Move(ptr, s, len, char);
3099 s += len;
3100 *s = '\0';
3101 SvPOK_on(sv);
3102 }
3103 else if (SvNOK(sv)) {
3104 if (SvTYPE(sv) < SVt_PVNV)
3105 sv_upgrade(sv, SVt_PVNV);
3106 if (SvNVX(sv) == 0.0
3107#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3108 && !Perl_isnan(SvNVX(sv))
3109#endif
3110 ) {
3111 s = SvGROW_mutable(sv, 2);
3112 *s++ = '0';
3113 *s = '\0';
3114 } else {
3115 STRLEN len;
3116 STRLEN size = 5; /* "-Inf\0" */
3117
3118 s = SvGROW_mutable(sv, size);
3119 len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3120 if (len > 0) {
3121 s += len;
3122 SvPOK_on(sv);
3123 }
3124 else {
3125 /* some Xenix systems wipe out errno here */
3126 dSAVE_ERRNO;
3127
3128 size =
3129 1 + /* sign */
3130 1 + /* "." */
3131 NV_DIG +
3132 1 + /* "e" */
3133 1 + /* sign */
3134 5 + /* exponent digits */
3135 1 + /* \0 */
3136 2; /* paranoia */
3137
3138 s = SvGROW_mutable(sv, size);
3139#ifndef USE_LOCALE_NUMERIC
3140 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3141
3142 SvPOK_on(sv);
3143#else
3144 {
3145 bool local_radix;
3146 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3147 STORE_LC_NUMERIC_SET_TO_NEEDED();
3148
3149 local_radix = PL_numeric_local && PL_numeric_radix_sv;
3150 if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3151 size += SvLEN(PL_numeric_radix_sv) - 1;
3152 s = SvGROW_mutable(sv, size);
3153 }
3154
3155 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3156
3157 /* If the radix character is UTF-8, and actually is in the
3158 * output, turn on the UTF-8 flag for the scalar */
3159 if ( local_radix
3160 && SvUTF8(PL_numeric_radix_sv)
3161 && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3162 {
3163 SvUTF8_on(sv);
3164 }
3165
3166 RESTORE_LC_NUMERIC();
3167 }
3168
3169 /* We don't call SvPOK_on(), because it may come to
3170 * pass that the locale changes so that the
3171 * stringification we just did is no longer correct. We
3172 * will have to re-stringify every time it is needed */
3173#endif
3174 RESTORE_ERRNO;
3175 }
3176 while (*s) s++;
3177 }
3178 }
3179 else if (isGV_with_GP(sv)) {
3180 GV *const gv = MUTABLE_GV(sv);
3181 SV *const buffer = sv_newmortal();
3182
3183 gv_efullname3(buffer, gv, "*");
3184
3185 assert(SvPOK(buffer));
3186 if (SvUTF8(buffer))
3187 SvUTF8_on(sv);
3188 else
3189 SvUTF8_off(sv);
3190 if (lp)
3191 *lp = SvCUR(buffer);
3192 return SvPVX(buffer);
3193 }
3194 else if (isREGEXP(sv)) {
3195 if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3196 return RX_WRAPPED((REGEXP *)sv);
3197 }
3198 else {
3199 if (lp)
3200 *lp = 0;
3201 if (flags & SV_UNDEF_RETURNS_NULL)
3202 return NULL;
3203 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3204 report_uninit(sv);
3205 /* Typically the caller expects that sv_any is not NULL now. */
3206 if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3207 sv_upgrade(sv, SVt_PV);
3208 return (char *)"";
3209 }
3210
3211 {
3212 const STRLEN len = s - SvPVX_const(sv);
3213 if (lp)
3214 *lp = len;
3215 SvCUR_set(sv, len);
3216 }
3217 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3218 PTR2UV(sv),SvPVX_const(sv)));
3219 if (flags & SV_CONST_RETURN)
3220 return (char *)SvPVX_const(sv);
3221 if (flags & SV_MUTABLE_RETURN)
3222 return SvPVX_mutable(sv);
3223 return SvPVX(sv);
3224}
3225
3226/*
3227=for apidoc sv_copypv
3228
3229Copies a stringified representation of the source SV into the
3230destination SV. Automatically performs any necessary C<mg_get> and
3231coercion of numeric values into strings. Guaranteed to preserve
3232C<UTF8> flag even from overloaded objects. Similar in nature to
3233C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3234string. Mostly uses C<sv_2pv_flags> to do its work, except when that
3235would lose the UTF-8'ness of the PV.
3236
3237=for apidoc sv_copypv_nomg
3238
3239Like C<sv_copypv>, but doesn't invoke get magic first.
3240
3241=for apidoc sv_copypv_flags
3242
3243Implementation of C<sv_copypv> and C<sv_copypv_nomg>. Calls get magic iff flags
3244has the C<SV_GMAGIC> bit set.
3245
3246=cut
3247*/
3248
3249void
3250Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3251{
3252 STRLEN len;
3253 const char *s;
3254
3255 PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3256
3257 s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3258 sv_setpvn(dsv,s,len);
3259 if (SvUTF8(ssv))
3260 SvUTF8_on(dsv);
3261 else
3262 SvUTF8_off(dsv);
3263}
3264
3265/*
3266=for apidoc sv_2pvbyte
3267
3268Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3269to its length. May cause the SV to be downgraded from UTF-8 as a
3270side-effect.
3271
3272Usually accessed via the C<SvPVbyte> macro.
3273
3274=cut
3275*/
3276
3277char *
3278Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3279{
3280 PERL_ARGS_ASSERT_SV_2PVBYTE;
3281
3282 SvGETMAGIC(sv);
3283 if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3284 || isGV_with_GP(sv) || SvROK(sv)) {
3285 SV *sv2 = sv_newmortal();
3286 sv_copypv_nomg(sv2,sv);
3287 sv = sv2;
3288 }
3289 sv_utf8_downgrade(sv,0);
3290 return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3291}
3292
3293/*
3294=for apidoc sv_2pvutf8
3295
3296Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3297to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3298
3299Usually accessed via the C<SvPVutf8> macro.
3300
3301=cut
3302*/
3303
3304char *
3305Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3306{
3307 PERL_ARGS_ASSERT_SV_2PVUTF8;
3308
3309 if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3310 || isGV_with_GP(sv) || SvROK(sv))
3311 sv = sv_mortalcopy(sv);
3312 else
3313 SvGETMAGIC(sv);
3314 sv_utf8_upgrade_nomg(sv);
3315 return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3316}
3317
3318
3319/*
3320=for apidoc sv_2bool
3321
3322This macro is only used by C<sv_true()> or its macro equivalent, and only if
3323the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3324It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3325
3326=for apidoc sv_2bool_flags
3327
3328This function is only used by C<sv_true()> and friends, and only if
3329the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>. If the flags
3330contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3331
3332
3333=cut
3334*/
3335
3336bool
3337Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3338{
3339 PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3340
3341 restart:
3342 if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3343
3344 if (!SvOK(sv))
3345 return 0;
3346 if (SvROK(sv)) {
3347 if (SvAMAGIC(sv)) {
3348 SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3349 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3350 bool svb;
3351 sv = tmpsv;
3352 if(SvGMAGICAL(sv)) {
3353 flags = SV_GMAGIC;
3354 goto restart; /* call sv_2bool */
3355 }
3356 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3357 else if(!SvOK(sv)) {
3358 svb = 0;
3359 }
3360 else if(SvPOK(sv)) {
3361 svb = SvPVXtrue(sv);
3362 }
3363 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3364 svb = (SvIOK(sv) && SvIVX(sv) != 0)
3365 || (SvNOK(sv) && SvNVX(sv) != 0.0);
3366 }
3367 else {
3368 flags = 0;
3369 goto restart; /* call sv_2bool_nomg */
3370 }
3371 return cBOOL(svb);
3372 }
3373 }
3374 return SvRV(sv) != 0;
3375 }
3376 if (isREGEXP(sv))
3377 return
3378 RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3379 return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3380}
3381
3382/*
3383=for apidoc sv_utf8_upgrade
3384
3385Converts the PV of an SV to its UTF-8-encoded form.
3386Forces the SV to string form if it is not already.
3387Will C<mg_get> on C<sv> if appropriate.
3388Always sets the C<SvUTF8> flag to avoid future validity checks even
3389if the whole string is the same in UTF-8 as not.
3390Returns the number of bytes in the converted string
3391
3392This is not a general purpose byte encoding to Unicode interface:
3393use the Encode extension for that.
3394
3395=for apidoc sv_utf8_upgrade_nomg
3396
3397Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3398
3399=for apidoc sv_utf8_upgrade_flags
3400
3401Converts the PV of an SV to its UTF-8-encoded form.
3402Forces the SV to string form if it is not already.
3403Always sets the SvUTF8 flag to avoid future validity checks even
3404if all the bytes are invariant in UTF-8.
3405If C<flags> has C<SV_GMAGIC> bit set,
3406will C<mg_get> on C<sv> if appropriate, else not.
3407
3408If C<flags> has C<SV_FORCE_UTF8_UPGRADE> set, this function assumes that the PV
3409will expand when converted to UTF-8, and skips the extra work of checking for
3410that. Typically this flag is used by a routine that has already parsed the
3411string and found such characters, and passes this information on so that the
3412work doesn't have to be repeated.
3413
3414Returns the number of bytes in the converted string.
3415
3416This is not a general purpose byte encoding to Unicode interface:
3417use the Encode extension for that.
3418
3419=for apidoc sv_utf8_upgrade_flags_grow
3420
3421Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3422the number of unused bytes the string of C<sv> is guaranteed to have free after
3423it upon return. This allows the caller to reserve extra space that it intends
3424to fill, to avoid extra grows.
3425
3426C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3427are implemented in terms of this function.
3428
3429Returns the number of bytes in the converted string (not including the spares).
3430
3431=cut
3432
3433(One might think that the calling routine could pass in the position of the
3434first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3435have to be found again. But that is not the case, because typically when the
3436caller is likely to use this flag, it won't be calling this routine unless it
3437finds something that won't fit into a byte. Otherwise it tries to not upgrade
3438and just use bytes. But some things that do fit into a byte are variants in
3439utf8, and the caller may not have been keeping track of these.)
3440
3441If the routine itself changes the string, it adds a trailing C<NUL>. Such a
3442C<NUL> isn't guaranteed due to having other routines do the work in some input
3443cases, or if the input is already flagged as being in utf8.
3444
3445The speed of this could perhaps be improved for many cases if someone wanted to
3446write a fast function that counts the number of variant characters in a string,
3447especially if it could return the position of the first one.
3448
3449*/
3450
3451STRLEN
3452Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3453{
3454 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3455
3456 if (sv == &PL_sv_undef)
3457 return 0;
3458 if (!SvPOK_nog(sv)) {
3459 STRLEN len = 0;
3460 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3461 (void) sv_2pv_flags(sv,&len, flags);
3462 if (SvUTF8(sv)) {
3463 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3464 return len;
3465 }
3466 } else {
3467 (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3468 }
3469 }
3470
3471 if (SvUTF8(sv)) {
3472 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3473 return SvCUR(sv);
3474 }
3475
3476 if (SvIsCOW(sv)) {
3477 S_sv_uncow(aTHX_ sv, 0);
3478 }
3479
3480 if (SvCUR(sv) == 0) {
3481 if (extra) SvGROW(sv, extra);
3482 } else { /* Assume Latin-1/EBCDIC */
3483 /* This function could be much more efficient if we
3484 * had a FLAG in SVs to signal if there are any variant
3485 * chars in the PV. Given that there isn't such a flag
3486 * make the loop as fast as possible (although there are certainly ways
3487 * to speed this up, eg. through vectorization) */
3488 U8 * s = (U8 *) SvPVX_const(sv);
3489 U8 * e = (U8 *) SvEND(sv);
3490 U8 *t = s;
3491 STRLEN two_byte_count = 0;
3492
3493 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3494
3495 /* See if really will need to convert to utf8. We mustn't rely on our
3496 * incoming SV being well formed and having a trailing '\0', as certain
3497 * code in pp_formline can send us partially built SVs. */
3498
3499 while (t < e) {
3500 const U8 ch = *t++;
3501 if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3502
3503 t--; /* t already incremented; re-point to first variant */
3504 two_byte_count = 1;
3505 goto must_be_utf8;
3506 }
3507
3508 /* utf8 conversion not needed because all are invariants. Mark as
3509 * UTF-8 even if no variant - saves scanning loop */
3510 SvUTF8_on(sv);
3511 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3512 return SvCUR(sv);
3513
3514 must_be_utf8:
3515
3516 /* Here, the string should be converted to utf8, either because of an
3517 * input flag (two_byte_count = 0), or because a character that
3518 * requires 2 bytes was found (two_byte_count = 1). t points either to
3519 * the beginning of the string (if we didn't examine anything), or to
3520 * the first variant. In either case, everything from s to t - 1 will
3521 * occupy only 1 byte each on output.
3522 *
3523 * There are two main ways to convert. One is to create a new string
3524 * and go through the input starting from the beginning, appending each
3525 * converted value onto the new string as we go along. It's probably
3526 * best to allocate enough space in the string for the worst possible
3527 * case rather than possibly running out of space and having to
3528 * reallocate and then copy what we've done so far. Since everything
3529 * from s to t - 1 is invariant, the destination can be initialized
3530 * with these using a fast memory copy
3531 *
3532 * The other way is to figure out exactly how big the string should be
3533 * by parsing the entire input. Then you don't have to make it big
3534 * enough to handle the worst possible case, and more importantly, if
3535 * the string you already have is large enough, you don't have to
3536 * allocate a new string, you can copy the last character in the input
3537 * string to the final position(s) that will be occupied by the
3538 * converted string and go backwards, stopping at t, since everything
3539 * before that is invariant.
3540 *
3541 * There are advantages and disadvantages to each method.
3542 *
3543 * In the first method, we can allocate a new string, do the memory
3544 * copy from the s to t - 1, and then proceed through the rest of the
3545 * string byte-by-byte.
3546 *
3547 * In the second method, we proceed through the rest of the input
3548 * string just calculating how big the converted string will be. Then
3549 * there are two cases:
3550 * 1) if the string has enough extra space to handle the converted
3551 * value. We go backwards through the string, converting until we
3552 * get to the position we are at now, and then stop. If this
3553 * position is far enough along in the string, this method is
3554 * faster than the other method. If the memory copy were the same
3555 * speed as the byte-by-byte loop, that position would be about
3556 * half-way, as at the half-way mark, parsing to the end and back
3557 * is one complete string's parse, the same amount as starting
3558 * over and going all the way through. Actually, it would be
3559 * somewhat less than half-way, as it's faster to just count bytes
3560 * than to also copy, and we don't have the overhead of allocating
3561 * a new string, changing the scalar to use it, and freeing the
3562 * existing one. But if the memory copy is fast, the break-even
3563 * point is somewhere after half way. The counting loop could be
3564 * sped up by vectorization, etc, to move the break-even point
3565 * further towards the beginning.
3566 * 2) if the string doesn't have enough space to handle the converted
3567 * value. A new string will have to be allocated, and one might
3568 * as well, given that, start from the beginning doing the first
3569 * method. We've spent extra time parsing the string and in
3570 * exchange all we've gotten is that we know precisely how big to
3571 * make the new one. Perl is more optimized for time than space,
3572 * so this case is a loser.
3573 * So what I've decided to do is not use the 2nd method unless it is
3574 * guaranteed that a new string won't have to be allocated, assuming
3575 * the worst case. I also decided not to put any more conditions on it
3576 * than this, for now. It seems likely that, since the worst case is
3577 * twice as big as the unknown portion of the string (plus 1), we won't
3578 * be guaranteed enough space, causing us to go to the first method,
3579 * unless the string is short, or the first variant character is near
3580 * the end of it. In either of these cases, it seems best to use the
3581 * 2nd method. The only circumstance I can think of where this would
3582 * be really slower is if the string had once had much more data in it
3583 * than it does now, but there is still a substantial amount in it */
3584
3585 {
3586 STRLEN invariant_head = t - s;
3587 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3588 if (SvLEN(sv) < size) {
3589
3590 /* Here, have decided to allocate a new string */
3591
3592 U8 *dst;
3593 U8 *d;
3594
3595 Newx(dst, size, U8);
3596
3597 /* If no known invariants at the beginning of the input string,
3598 * set so starts from there. Otherwise, can use memory copy to
3599 * get up to where we are now, and then start from here */
3600
3601 if (invariant_head == 0) {
3602 d = dst;
3603 } else {
3604 Copy(s, dst, invariant_head, char);
3605 d = dst + invariant_head;
3606 }
3607
3608 while (t < e) {
3609 append_utf8_from_native_byte(*t, &d);
3610 t++;
3611 }
3612 *d = '\0';
3613 SvPV_free(sv); /* No longer using pre-existing string */
3614 SvPV_set(sv, (char*)dst);
3615 SvCUR_set(sv, d - dst);
3616 SvLEN_set(sv, size);
3617 } else {
3618
3619 /* Here, have decided to get the exact size of the string.
3620 * Currently this happens only when we know that there is
3621 * guaranteed enough space to fit the converted string, so
3622 * don't have to worry about growing. If two_byte_count is 0,
3623 * then t points to the first byte of the string which hasn't
3624 * been examined yet. Otherwise two_byte_count is 1, and t
3625 * points to the first byte in the string that will expand to
3626 * two. Depending on this, start examining at t or 1 after t.
3627 * */
3628
3629 U8 *d = t + two_byte_count;
3630
3631
3632 /* Count up the remaining bytes that expand to two */
3633
3634 while (d < e) {
3635 const U8 chr = *d++;
3636 if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3637 }
3638
3639 /* The string will expand by just the number of bytes that
3640 * occupy two positions. But we are one afterwards because of
3641 * the increment just above. This is the place to put the
3642 * trailing NUL, and to set the length before we decrement */
3643
3644 d += two_byte_count;
3645 SvCUR_set(sv, d - s);
3646 *d-- = '\0';
3647
3648
3649 /* Having decremented d, it points to the position to put the
3650 * very last byte of the expanded string. Go backwards through
3651 * the string, copying and expanding as we go, stopping when we
3652 * get to the part that is invariant the rest of the way down */
3653
3654 e--;
3655 while (e >= t) {
3656 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3657 *d-- = *e;
3658 } else {
3659 *d-- = UTF8_EIGHT_BIT_LO(*e);
3660 *d-- = UTF8_EIGHT_BIT_HI(*e);
3661 }
3662 e--;
3663 }
3664 }
3665
3666 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3667 /* Update pos. We do it at the end rather than during
3668 * the upgrade, to avoid slowing down the common case
3669 * (upgrade without pos).
3670 * pos can be stored as either bytes or characters. Since
3671 * this was previously a byte string we can just turn off
3672 * the bytes flag. */
3673 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3674 if (mg) {
3675 mg->mg_flags &= ~MGf_BYTES;
3676 }
3677 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3678 magic_setutf8(sv,mg); /* clear UTF8 cache */
3679 }
3680 }
3681 }
3682
3683 /* Mark as UTF-8 even if no variant - saves scanning loop */
3684 SvUTF8_on(sv);
3685 return SvCUR(sv);
3686}
3687
3688/*
3689=for apidoc sv_utf8_downgrade
3690
3691Attempts to convert the PV of an SV from characters to bytes.
3692If the PV contains a character that cannot fit
3693in a byte, this conversion will fail;
3694in this case, either returns false or, if C<fail_ok> is not
3695true, croaks.
3696
3697This is not a general purpose Unicode to byte encoding interface:
3698use the C<Encode> extension for that.
3699
3700=cut
3701*/
3702
3703bool
3704Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3705{
3706 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3707
3708 if (SvPOKp(sv) && SvUTF8(sv)) {
3709 if (SvCUR(sv)) {
3710 U8 *s;
3711 STRLEN len;
3712 int mg_flags = SV_GMAGIC;
3713
3714 if (SvIsCOW(sv)) {
3715 S_sv_uncow(aTHX_ sv, 0);
3716 }
3717 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3718 /* update pos */
3719 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3720 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3721 mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3722 SV_GMAGIC|SV_CONST_RETURN);
3723 mg_flags = 0; /* sv_pos_b2u does get magic */
3724 }
3725 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3726 magic_setutf8(sv,mg); /* clear UTF8 cache */
3727
3728 }
3729 s = (U8 *) SvPV_flags(sv, len, mg_flags);
3730
3731 if (!utf8_to_bytes(s, &len)) {
3732 if (fail_ok)
3733 return FALSE;
3734 else {
3735 if (PL_op)
3736 Perl_croak(aTHX_ "Wide character in %s",
3737 OP_DESC(PL_op));
3738 else
3739 Perl_croak(aTHX_ "Wide character");
3740 }
3741 }
3742 SvCUR_set(sv, len);
3743 }
3744 }
3745 SvUTF8_off(sv);
3746 return TRUE;
3747}
3748
3749/*
3750=for apidoc sv_utf8_encode
3751
3752Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3753flag off so that it looks like octets again.
3754
3755=cut
3756*/
3757
3758void
3759Perl_sv_utf8_encode(pTHX_ SV *const sv)
3760{
3761 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3762
3763 if (SvREADONLY(sv)) {
3764 sv_force_normal_flags(sv, 0);
3765 }
3766 (void) sv_utf8_upgrade(sv);
3767 SvUTF8_off(sv);
3768}
3769
3770/*
3771=for apidoc sv_utf8_decode
3772
3773If the PV of the SV is an octet sequence in Perl's extended UTF-8
3774and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3775so that it looks like a character. If the PV contains only single-byte
3776characters, the C<SvUTF8> flag stays off.
3777Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3778
3779=cut
3780*/
3781
3782bool
3783Perl_sv_utf8_decode(pTHX_ SV *const sv)
3784{
3785 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3786
3787 if (SvPOKp(sv)) {
3788 const U8 *start, *c;
3789
3790 /* The octets may have got themselves encoded - get them back as
3791 * bytes
3792 */
3793 if (!sv_utf8_downgrade(sv, TRUE))
3794 return FALSE;
3795
3796 /* it is actually just a matter of turning the utf8 flag on, but
3797 * we want to make sure everything inside is valid utf8 first.
3798 */
3799 c = start = (const U8 *) SvPVX_const(sv);
3800 if (!is_utf8_string(c, SvCUR(sv)))
3801 return FALSE;
3802 if (! is_utf8_invariant_string(c, SvCUR(sv))) {
3803 SvUTF8_on(sv);
3804 }
3805 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3806 /* XXX Is this dead code? XS_utf8_decode calls SvSETMAGIC
3807 after this, clearing pos. Does anything on CPAN
3808 need this? */
3809 /* adjust pos to the start of a UTF8 char sequence */
3810 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3811 if (mg) {
3812 I32 pos = mg->mg_len;
3813 if (pos > 0) {
3814 for (c = start + pos; c > start; c--) {
3815 if (UTF8_IS_START(*c))
3816 break;
3817 }
3818 mg->mg_len = c - start;
3819 }
3820 }
3821 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3822 magic_setutf8(sv,mg); /* clear UTF8 cache */
3823 }
3824 }
3825 return TRUE;
3826}
3827
3828/*
3829=for apidoc sv_setsv
3830
3831Copies the contents of the source SV C<ssv> into the destination SV
3832C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3833function if the source SV needs to be reused. Does not handle 'set' magic on
3834destination SV. Calls 'get' magic on source SV. Loosely speaking, it
3835performs a copy-by-value, obliterating any previous content of the
3836destination.
3837
3838You probably want to use one of the assortment of wrappers, such as
3839C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3840C<SvSetMagicSV_nosteal>.
3841
3842=for apidoc sv_setsv_flags
3843
3844Copies the contents of the source SV C<ssv> into the destination SV
3845C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3846function if the source SV needs to be reused. Does not handle 'set' magic.
3847Loosely speaking, it performs a copy-by-value, obliterating any previous
3848content of the destination.
3849If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3850C<ssv> if appropriate, else not. If the C<flags>
3851parameter has the C<SV_NOSTEAL> bit set then the
3852buffers of temps will not be stolen. C<sv_setsv>
3853and C<sv_setsv_nomg> are implemented in terms of this function.
3854
3855You probably want to use one of the assortment of wrappers, such as
3856C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3857C<SvSetMagicSV_nosteal>.
3858
3859This is the primary function for copying scalars, and most other
3860copy-ish functions and macros use this underneath.
3861
3862=cut
3863*/
3864
3865static void
3866S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3867{
3868 I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3869 HV *old_stash = NULL;
3870
3871 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3872
3873 if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3874 const char * const name = GvNAME(sstr);
3875 const STRLEN len = GvNAMELEN(sstr);
3876 {
3877 if (dtype >= SVt_PV) {
3878 SvPV_free(dstr);
3879 SvPV_set(dstr, 0);
3880 SvLEN_set(dstr, 0);
3881 SvCUR_set(dstr, 0);
3882 }
3883 SvUPGRADE(dstr, SVt_PVGV);
3884 (void)SvOK_off(dstr);
3885 isGV_with_GP_on(dstr);
3886 }
3887 GvSTASH(dstr) = GvSTASH(sstr);
3888 if (GvSTASH(dstr))
3889 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3890 gv_name_set(MUTABLE_GV(dstr), name, len,
3891 GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3892 SvFAKE_on(dstr); /* can coerce to non-glob */
3893 }
3894
3895 if(GvGP(MUTABLE_GV(sstr))) {
3896 /* If source has method cache entry, clear it */
3897 if(GvCVGEN(sstr)) {
3898 SvREFCNT_dec(GvCV(sstr));
3899 GvCV_set(sstr, NULL);
3900 GvCVGEN(sstr) = 0;
3901 }
3902 /* If source has a real method, then a method is
3903 going to change */
3904 else if(
3905 GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3906 ) {
3907 mro_changes = 1;
3908 }
3909 }
3910
3911 /* If dest already had a real method, that's a change as well */
3912 if(
3913 !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3914 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3915 ) {
3916 mro_changes = 1;
3917 }
3918
3919 /* We don't need to check the name of the destination if it was not a
3920 glob to begin with. */
3921 if(dtype == SVt_PVGV) {
3922 const char * const name = GvNAME((const GV *)dstr);
3923 if(
3924 strEQ(name,"ISA")
3925 /* The stash may have been detached from the symbol table, so
3926 check its name. */
3927 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3928 )
3929 mro_changes = 2;
3930 else {
3931 const STRLEN len = GvNAMELEN(dstr);
3932 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3933 || (len == 1 && name[0] == ':')) {
3934 mro_changes = 3;
3935
3936 /* Set aside the old stash, so we can reset isa caches on
3937 its subclasses. */
3938 if((old_stash = GvHV(dstr)))
3939 /* Make sure we do not lose it early. */
3940 SvREFCNT_inc_simple_void_NN(
3941 sv_2mortal((SV *)old_stash)
3942 );
3943 }
3944 }
3945
3946 SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3947 }
3948
3949 /* freeing dstr's GP might free sstr (e.g. *x = $x),
3950 * so temporarily protect it */
3951 ENTER;
3952 SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3953 gp_free(MUTABLE_GV(dstr));
3954 GvINTRO_off(dstr); /* one-shot flag */
3955 GvGP_set(dstr, gp_ref(GvGP(sstr)));
3956 LEAVE;
3957
3958 if (SvTAINTED(sstr))
3959 SvTAINT(dstr);
3960 if (GvIMPORTED(dstr) != GVf_IMPORTED
3961 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3962 {
3963 GvIMPORTED_on(dstr);
3964 }
3965 GvMULTI_on(dstr);
3966 if(mro_changes == 2) {
3967 if (GvAV((const GV *)sstr)) {
3968 MAGIC *mg;
3969 SV * const sref = (SV *)GvAV((const GV *)dstr);
3970 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3971 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3972 AV * const ary = newAV();
3973 av_push(ary, mg->mg_obj); /* takes the refcount */
3974 mg->mg_obj = (SV *)ary;
3975 }
3976 av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3977 }
3978 else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3979 }
3980 mro_isa_changed_in(GvSTASH(dstr));
3981 }
3982 else if(mro_changes == 3) {
3983 HV * const stash = GvHV(dstr);
3984 if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3985 mro_package_moved(
3986 stash, old_stash,
3987 (GV *)dstr, 0
3988 );
3989 }
3990 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3991 if (GvIO(dstr) && dtype == SVt_PVGV) {
3992 DEBUG_o(Perl_deb(aTHX_
3993 "glob_assign_glob clearing PL_stashcache\n"));
3994 /* It's a cache. It will rebuild itself quite happily.
3995 It's a lot of effort to work out exactly which key (or keys)
3996 might be invalidated by the creation of the this file handle.
3997 */
3998 hv_clear(PL_stashcache);
3999 }
4000 return;
4001}
4002
4003void
4004Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
4005{
4006 SV * const sref = SvRV(sstr);
4007 SV *dref;
4008 const int intro = GvINTRO(dstr);
4009 SV **location;
4010 U8 import_flag = 0;
4011 const U32 stype = SvTYPE(sref);
4012
4013 PERL_ARGS_ASSERT_GV_SETREF;
4014
4015 if (intro) {
4016 GvINTRO_off(dstr); /* one-shot flag */
4017 GvLINE(dstr) = CopLINE(PL_curcop);
4018 GvEGV(dstr) = MUTABLE_GV(dstr);
4019 }
4020 GvMULTI_on(dstr);
4021 switch (stype) {
4022 case SVt_PVCV:
4023 location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4024 import_flag = GVf_IMPORTED_CV;
4025 goto common;
4026 case SVt_PVHV:
4027 location = (SV **) &GvHV(dstr);
4028 import_flag = GVf_IMPORTED_HV;
4029 goto common;
4030 case SVt_PVAV:
4031 location = (SV **) &GvAV(dstr);
4032 import_flag = GVf_IMPORTED_AV;
4033 goto common;
4034 case SVt_PVIO:
4035 location = (SV **) &GvIOp(dstr);
4036 goto common;
4037 case SVt_PVFM:
4038 location = (SV **) &GvFORM(dstr);
4039 goto common;
4040 default:
4041 location = &GvSV(dstr);
4042 import_flag = GVf_IMPORTED_SV;
4043 common:
4044 if (intro) {
4045 if (stype == SVt_PVCV) {
4046 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4047 if (GvCVGEN(dstr)) {
4048 SvREFCNT_dec(GvCV(dstr));
4049 GvCV_set(dstr, NULL);
4050 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4051 }
4052 }
4053 /* SAVEt_GVSLOT takes more room on the savestack and has more
4054 overhead in leave_scope than SAVEt_GENERIC_SV. But for CVs
4055 leave_scope needs access to the GV so it can reset method
4056 caches. We must use SAVEt_GVSLOT whenever the type is
4057 SVt_PVCV, even if the stash is anonymous, as the stash may
4058 gain a name somehow before leave_scope. */
4059 if (stype == SVt_PVCV) {
4060 /* There is no save_pushptrptrptr. Creating it for this
4061 one call site would be overkill. So inline the ss add
4062 routines here. */
4063 dSS_ADD;
4064 SS_ADD_PTR(dstr);
4065 SS_ADD_PTR(location);
4066 SS_ADD_PTR(SvREFCNT_inc(*location));
4067 SS_ADD_UV(SAVEt_GVSLOT);
4068 SS_ADD_END(4);
4069 }
4070 else SAVEGENERICSV(*location);
4071 }
4072 dref = *location;
4073 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4074 CV* const cv = MUTABLE_CV(*location);
4075 if (cv) {
4076 if (!GvCVGEN((const GV *)dstr) &&
4077 (CvROOT(cv) || CvXSUB(cv)) &&
4078 /* redundant check that avoids creating the extra SV
4079 most of the time: */
4080 (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4081 {
4082 SV * const new_const_sv =
4083 CvCONST((const CV *)sref)
4084 ? cv_const_sv((const CV *)sref)
4085 : NULL;
4086 HV * const stash = GvSTASH((const GV *)dstr);
4087 report_redefined_cv(
4088 sv_2mortal(
4089 stash
4090 ? Perl_newSVpvf(aTHX_
4091 "%" HEKf "::%" HEKf,
4092 HEKfARG(HvNAME_HEK(stash)),
4093 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4094 : Perl_newSVpvf(aTHX_
4095 "%" HEKf,
4096 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4097 ),
4098 cv,
4099 CvCONST((const CV *)sref) ? &new_const_sv : NULL
4100 );
4101 }
4102 if (!intro)
4103 cv_ckproto_len_flags(cv, (const GV *)dstr,
4104 SvPOK(sref) ? CvPROTO(sref) : NULL,
4105 SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4106 SvPOK(sref) ? SvUTF8(sref) : 0);
4107 }
4108 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4109 GvASSUMECV_on(dstr);
4110 if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4111 if (intro && GvREFCNT(dstr) > 1) {
4112 /* temporary remove extra savestack's ref */
4113 --GvREFCNT(dstr);
4114 gv_method_changed(dstr);
4115 ++GvREFCNT(dstr);
4116 }
4117 else gv_method_changed(dstr);
4118 }
4119 }
4120 *location = SvREFCNT_inc_simple_NN(sref);
4121 if (import_flag && !(GvFLAGS(dstr) & import_flag)
4122 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4123 GvFLAGS(dstr) |= import_flag;
4124 }
4125
4126 if (stype == SVt_PVHV) {
4127 const char * const name = GvNAME((GV*)dstr);
4128 const STRLEN len = GvNAMELEN(dstr);
4129 if (
4130 (
4131 (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4132 || (len == 1 && name[0] == ':')
4133 )
4134 && (!dref || HvENAME_get(dref))
4135 ) {
4136 mro_package_moved(
4137 (HV *)sref, (HV *)dref,
4138 (GV *)dstr, 0
4139 );
4140 }
4141 }
4142 else if (
4143 stype == SVt_PVAV && sref != dref
4144 && strEQ(GvNAME((GV*)dstr), "ISA")
4145 /* The stash may have been detached from the symbol table, so
4146 check its name before doing anything. */
4147 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4148 ) {
4149 MAGIC *mg;
4150 MAGIC * const omg = dref && SvSMAGICAL(dref)
4151 ? mg_find(dref, PERL_MAGIC_isa)
4152 : NULL;
4153 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4154 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4155 AV * const ary = newAV();
4156 av_push(ary, mg->mg_obj); /* takes the refcount */
4157 mg->mg_obj = (SV *)ary;
4158 }
4159 if (omg) {
4160 if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4161 SV **svp = AvARRAY((AV *)omg->mg_obj);
4162 I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4163 while (items--)
4164 av_push(
4165 (AV *)mg->mg_obj,
4166 SvREFCNT_inc_simple_NN(*svp++)
4167 );
4168 }
4169 else
4170 av_push(
4171 (AV *)mg->mg_obj,
4172 SvREFCNT_inc_simple_NN(omg->mg_obj)
4173 );
4174 }
4175 else
4176 av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4177 }
4178 else
4179 {
4180 SSize_t i;
4181 sv_magic(
4182 sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4183 );
4184 for (i = 0; i <= AvFILL(sref); ++i) {
4185 SV **elem = av_fetch ((AV*)sref, i, 0);
4186 if (elem) {
4187 sv_magic(
4188 *elem, sref, PERL_MAGIC_isaelem, NULL, i
4189 );
4190 }
4191 }
4192 mg = mg_find(sref, PERL_MAGIC_isa);
4193 }
4194 /* Since the *ISA assignment could have affected more than
4195 one stash, don't call mro_isa_changed_in directly, but let
4196 magic_clearisa do it for us, as it already has the logic for
4197 dealing with globs vs arrays of globs. */
4198 assert(mg);
4199 Perl_magic_clearisa(aTHX_ NULL, mg);
4200 }
4201 else if (stype == SVt_PVIO) {
4202 DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4203 /* It's a cache. It will rebuild itself quite happily.
4204 It's a lot of effort to work out exactly which key (or keys)
4205 might be invalidated by the creation of the this file handle.
4206 */
4207 hv_clear(PL_stashcache);
4208 }
4209 break;
4210 }
4211 if (!intro) SvREFCNT_dec(dref);
4212 if (SvTAINTED(sstr))
4213 SvTAINT(dstr);
4214 return;
4215}
4216
4217
4218
4219
4220#ifdef PERL_DEBUG_READONLY_COW
4221# include <sys/mman.h>
4222
4223# ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4224# define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4225# endif
4226
4227void
4228Perl_sv_buf_to_ro(pTHX_ SV *sv)
4229{
4230 struct perl_memory_debug_header * const header =
4231 (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4232 const MEM_SIZE len = header->size;
4233 PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4234# ifdef PERL_TRACK_MEMPOOL
4235 if (!header->readonly) header->readonly = 1;
4236# endif
4237 if (mprotect(header, len, PROT_READ))
4238 Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4239 header, len, errno);
4240}
4241
4242static void
4243S_sv_buf_to_rw(pTHX_ SV *sv)
4244{
4245 struct perl_memory_debug_header * const header =
4246 (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4247 const MEM_SIZE len = header->size;
4248 PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4249 if (mprotect(header, len, PROT_READ|PROT_WRITE))
4250 Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4251 header, len, errno);
4252# ifdef PERL_TRACK_MEMPOOL
4253 header->readonly = 0;
4254# endif
4255}
4256
4257#else
4258# define sv_buf_to_ro(sv) NOOP
4259# define sv_buf_to_rw(sv) NOOP
4260#endif
4261
4262void
4263Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4264{
4265 U32 sflags;
4266 int dtype;
4267 svtype stype;
4268 unsigned int both_type;
4269
4270 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4271
4272 if (UNLIKELY( sstr == dstr ))
4273 return;
4274
4275 if (UNLIKELY( !sstr ))
4276 sstr = &PL_sv_undef;
4277
4278 stype = SvTYPE(sstr);
4279 dtype = SvTYPE(dstr);
4280 both_type = (stype | dtype);
4281
4282 /* with these values, we can check that both SVs are NULL/IV (and not
4283 * freed) just by testing the or'ed types */
4284 STATIC_ASSERT_STMT(SVt_NULL == 0);
4285 STATIC_ASSERT_STMT(SVt_IV == 1);
4286 if (both_type <= 1) {
4287 /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4288 * special-casing */
4289 U32 sflags;
4290 U32 new_dflags;
4291 SV *old_rv = NULL;
4292
4293 /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4294 if (SvREADONLY(dstr))
4295 Perl_croak_no_modify();
4296 if (SvROK(dstr)) {
4297 if (SvWEAKREF(dstr))
4298 sv_unref_flags(dstr, 0);
4299 else
4300 old_rv = SvRV(dstr);
4301 }
4302
4303 assert(!SvGMAGICAL(sstr));
4304 assert(!SvGMAGICAL(dstr));
4305
4306 sflags = SvFLAGS(sstr);
4307 if (sflags & (SVf_IOK|SVf_ROK)) {
4308 SET_SVANY_FOR_BODYLESS_IV(dstr);
4309 new_dflags = SVt_IV;
4310
4311 if (sflags & SVf_ROK) {
4312 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4313 new_dflags |= SVf_ROK;
4314 }
4315 else {
4316 /* both src and dst are <= SVt_IV, so sv_any points to the
4317 * head; so access the head directly
4318 */
4319 assert( &(sstr->sv_u.svu_iv)
4320 == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4321 assert( &(dstr->sv_u.svu_iv)
4322 == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4323 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4324 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4325 }
4326 }
4327 else {
4328 new_dflags = dtype; /* turn off everything except the type */
4329 }
4330 SvFLAGS(dstr) = new_dflags;
4331 SvREFCNT_dec(old_rv);
4332
4333 return;
4334 }
4335
4336 if (UNLIKELY(both_type == SVTYPEMASK)) {
4337 if (SvIS_FREED(dstr)) {
4338 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4339 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4340 }
4341 if (SvIS_FREED(sstr)) {
4342 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4343 (void*)sstr, (void*)dstr);
4344 }
4345 }
4346
4347
4348
4349 SV_CHECK_THINKFIRST_COW_DROP(dstr);
4350 dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4351
4352 /* There's a lot of redundancy below but we're going for speed here */
4353
4354 switch (stype) {
4355 case SVt_NULL:
4356 undef_sstr:
4357 if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4358 (void)SvOK_off(dstr);
4359 return;
4360 }
4361 break;
4362 case SVt_IV:
4363 if (SvIOK(sstr)) {
4364 switch (dtype) {
4365 case SVt_NULL:
4366 /* For performance, we inline promoting to type SVt_IV. */
4367 /* We're starting from SVt_NULL, so provided that define is
4368 * actual 0, we don't have to unset any SV type flags
4369 * to promote to SVt_IV. */
4370 STATIC_ASSERT_STMT(SVt_NULL == 0);
4371 SET_SVANY_FOR_BODYLESS_IV(dstr);
4372 SvFLAGS(dstr) |= SVt_IV;
4373 break;
4374 case SVt_NV:
4375 case SVt_PV:
4376 sv_upgrade(dstr, SVt_PVIV);
4377 break;
4378 case SVt_PVGV:
4379 case SVt_PVLV:
4380 goto end_of_first_switch;
4381 }
4382 (void)SvIOK_only(dstr);
4383 SvIV_set(dstr, SvIVX(sstr));
4384 if (SvIsUV(sstr))
4385 SvIsUV_on(dstr);
4386 /* SvTAINTED can only be true if the SV has taint magic, which in
4387 turn means that the SV type is PVMG (or greater). This is the
4388 case statement for SVt_IV, so this cannot be true (whatever gcov
4389 may say). */
4390 assert(!SvTAINTED(sstr));
4391 return;
4392 }
4393 if (!SvROK(sstr))
4394 goto undef_sstr;
4395 if (dtype < SVt_PV && dtype != SVt_IV)
4396 sv_upgrade(dstr, SVt_IV);
4397 break;
4398
4399 case SVt_NV:
4400 if (LIKELY( SvNOK(sstr) )) {
4401 switch (dtype) {
4402 case SVt_NULL:
4403 case SVt_IV:
4404 sv_upgrade(dstr, SVt_NV);
4405 break;
4406 case SVt_PV:
4407 case SVt_PVIV:
4408 sv_upgrade(dstr, SVt_PVNV);
4409 break;
4410 case SVt_PVGV:
4411 case SVt_PVLV:
4412 goto end_of_first_switch;
4413 }
4414 SvNV_set(dstr, SvNVX(sstr));
4415 (void)SvNOK_only(dstr);
4416 /* SvTAINTED can only be true if the SV has taint magic, which in
4417 turn means that the SV type is PVMG (or greater). This is the
4418 case statement for SVt_NV, so this cannot be true (whatever gcov
4419 may say). */
4420 assert(!SvTAINTED(sstr));
4421 return;
4422 }
4423 goto undef_sstr;
4424
4425 case SVt_PV:
4426 if (dtype < SVt_PV)
4427 sv_upgrade(dstr, SVt_PV);
4428 break;
4429 case SVt_PVIV:
4430 if (dtype < SVt_PVIV)
4431 sv_upgrade(dstr, SVt_PVIV);
4432 break;
4433 case SVt_PVNV:
4434 if (dtype < SVt_PVNV)
4435 sv_upgrade(dstr, SVt_PVNV);
4436 break;
4437 default:
4438 {
4439 const char * const type = sv_reftype(sstr,0);
4440 if (PL_op)
4441 /* diag_listed_as: Bizarre copy of %s */
4442 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4443 else
4444 Perl_croak(aTHX_ "Bizarre copy of %s", type);
4445 }
4446 NOT_REACHED; /* NOTREACHED */
4447
4448 case SVt_REGEXP:
4449 upgregexp:
4450 if (dtype < SVt_REGEXP)
4451 {
4452 if (dtype >= SVt_PV) {
4453 SvPV_free(dstr);
4454 SvPV_set(dstr, 0);
4455 SvLEN_set(dstr, 0);
4456 SvCUR_set(dstr, 0);
4457 }
4458 sv_upgrade(dstr, SVt_REGEXP);
4459 }
4460 break;
4461
4462 case SVt_INVLIST:
4463 case SVt_PVLV:
4464 case SVt_PVGV:
4465 case SVt_PVMG:
4466 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4467 mg_get(sstr);
4468 if (SvTYPE(sstr) != stype)
4469 stype = SvTYPE(sstr);
4470 }
4471 if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4472 glob_assign_glob(dstr, sstr, dtype);
4473 return;
4474 }
4475 if (stype == SVt_PVLV)
4476 {
4477 if (isREGEXP(sstr)) goto upgregexp;
4478 SvUPGRADE(dstr, SVt_PVNV);
4479 }
4480 else
4481 SvUPGRADE(dstr, (svtype)stype);
4482 }
4483 end_of_first_switch:
4484
4485 /* dstr may have been upgraded. */
4486 dtype = SvTYPE(dstr);
4487 sflags = SvFLAGS(sstr);
4488
4489 if (UNLIKELY( dtype == SVt_PVCV )) {
4490 /* Assigning to a subroutine sets the prototype. */
4491 if (SvOK(sstr)) {
4492 STRLEN len;
4493 const char *const ptr = SvPV_const(sstr, len);
4494
4495 SvGROW(dstr, len + 1);
4496 Copy(ptr, SvPVX(dstr), len + 1, char);
4497 SvCUR_set(dstr, len);
4498 SvPOK_only(dstr);
4499 SvFLAGS(dstr) |= sflags & SVf_UTF8;
4500 CvAUTOLOAD_off(dstr);
4501 } else {
4502 SvOK_off(dstr);
4503 }
4504 }
4505 else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4506 || dtype == SVt_PVFM))
4507 {
4508 const char * const type = sv_reftype(dstr,0);
4509 if (PL_op)
4510 /* diag_listed_as: Cannot copy to %s */
4511 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4512 else
4513 Perl_croak(aTHX_ "Cannot copy to %s", type);
4514 } else if (sflags & SVf_ROK) {
4515 if (isGV_with_GP(dstr)
4516 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4517 sstr = SvRV(sstr);
4518 if (sstr == dstr) {
4519 if (GvIMPORTED(dstr) != GVf_IMPORTED
4520 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4521 {
4522 GvIMPORTED_on(dstr);
4523 }
4524 GvMULTI_on(dstr);
4525 return;
4526 }
4527 glob_assign_glob(dstr, sstr, dtype);
4528 return;
4529 }
4530
4531 if (dtype >= SVt_PV) {
4532 if (isGV_with_GP(dstr)) {
4533 gv_setref(dstr, sstr);
4534 return;
4535 }
4536 if (SvPVX_const(dstr)) {
4537 SvPV_free(dstr);
4538 SvLEN_set(dstr, 0);
4539 SvCUR_set(dstr, 0);
4540 }
4541 }
4542 (void)SvOK_off(dstr);
4543 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4544 SvFLAGS(dstr) |= sflags & SVf_ROK;
4545 assert(!(sflags & SVp_NOK));
4546 assert(!(sflags & SVp_IOK));
4547 assert(!(sflags & SVf_NOK));
4548 assert(!(sflags & SVf_IOK));
4549 }
4550 else if (isGV_with_GP(dstr)) {
4551 if (!(sflags & SVf_OK)) {
4552 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4553 "Undefined value assigned to typeglob");
4554 }
4555 else {
4556 GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4557 if (dstr != (const SV *)gv) {
4558 const char * const name = GvNAME((const GV *)dstr);
4559 const STRLEN len = GvNAMELEN(dstr);
4560 HV *old_stash = NULL;
4561 bool reset_isa = FALSE;
4562 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4563 || (len == 1 && name[0] == ':')) {
4564 /* Set aside the old stash, so we can reset isa caches
4565 on its subclasses. */
4566 if((old_stash = GvHV(dstr))) {
4567 /* Make sure we do not lose it early. */
4568 SvREFCNT_inc_simple_void_NN(
4569 sv_2mortal((SV *)old_stash)
4570 );
4571 }
4572 reset_isa = TRUE;
4573 }
4574
4575 if (GvGP(dstr)) {
4576 SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4577 gp_free(MUTABLE_GV(dstr));
4578 }
4579 GvGP_set(dstr, gp_ref(GvGP(gv)));
4580
4581 if (reset_isa) {
4582 HV * const stash = GvHV(dstr);
4583 if(
4584 old_stash ? (HV *)HvENAME_get(old_stash) : stash
4585 )
4586 mro_package_moved(
4587 stash, old_stash,
4588 (GV *)dstr, 0
4589 );
4590 }
4591 }
4592 }
4593 }
4594 else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4595 && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4596 reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4597 }
4598 else if (sflags & SVp_POK) {
4599 const STRLEN cur = SvCUR(sstr);
4600 const STRLEN len = SvLEN(sstr);
4601
4602 /*
4603 * We have three basic ways to copy the string:
4604 *
4605 * 1. Swipe
4606 * 2. Copy-on-write
4607 * 3. Actual copy
4608 *
4609 * Which we choose is based on various factors. The following
4610 * things are listed in order of speed, fastest to slowest:
4611 * - Swipe
4612 * - Copying a short string
4613 * - Copy-on-write bookkeeping
4614 * - malloc
4615 * - Copying a long string
4616 *
4617 * We swipe the string (steal the string buffer) if the SV on the
4618 * rhs is about to be freed anyway (TEMP and refcnt==1). This is a
4619 * big win on long strings. It should be a win on short strings if
4620 * SvPVX_const(dstr) has to be allocated. If not, it should not
4621 * slow things down, as SvPVX_const(sstr) would have been freed
4622 * soon anyway.
4623 *
4624 * We also steal the buffer from a PADTMP (operator target) if it
4625 * is ‘long enough’. For short strings, a swipe does not help
4626 * here, as it causes more malloc calls the next time the target
4627 * is used. Benchmarks show that even if SvPVX_const(dstr) has to
4628 * be allocated it is still not worth swiping PADTMPs for short
4629 * strings, as the savings here are small.
4630 *
4631 * If swiping is not an option, then we see whether it is
4632 * worth using copy-on-write. If the lhs already has a buf-
4633 * fer big enough and the string is short, we skip it and fall back
4634 * to method 3, since memcpy is faster for short strings than the
4635 * later bookkeeping overhead that copy-on-write entails.
4636
4637 * If the rhs is not a copy-on-write string yet, then we also
4638 * consider whether the buffer is too large relative to the string
4639 * it holds. Some operations such as readline allocate a large
4640 * buffer in the expectation of reusing it. But turning such into
4641 * a COW buffer is counter-productive because it increases memory
4642 * usage by making readline allocate a new large buffer the sec-
4643 * ond time round. So, if the buffer is too large, again, we use
4644 * method 3 (copy).
4645 *
4646 * Finally, if there is no buffer on the left, or the buffer is too
4647 * small, then we use copy-on-write and make both SVs share the
4648 * string buffer.
4649 *
4650 */
4651
4652 /* Whichever path we take through the next code, we want this true,
4653 and doing it now facilitates the COW check. */
4654 (void)SvPOK_only(dstr);
4655
4656 if (
4657 ( /* Either ... */
4658 /* slated for free anyway (and not COW)? */
4659 (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4660 /* or a swipable TARG */
4661 || ((sflags &
4662 (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4663 == SVs_PADTMP
4664 /* whose buffer is worth stealing */
4665 && CHECK_COWBUF_THRESHOLD(cur,len)
4666 )
4667 ) &&
4668 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4669 (!(flags & SV_NOSTEAL)) &&
4670 /* and we're allowed to steal temps */
4671 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4672 len) /* and really is a string */
4673 { /* Passes the swipe test. */
4674 if (SvPVX_const(dstr)) /* we know that dtype >= SVt_PV */
4675 SvPV_free(dstr);
4676 SvPV_set(dstr, SvPVX_mutable(sstr));
4677 SvLEN_set(dstr, SvLEN(sstr));
4678 SvCUR_set(dstr, SvCUR(sstr));
4679
4680 SvTEMP_off(dstr);
4681 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4682 SvPV_set(sstr, NULL);
4683 SvLEN_set(sstr, 0);
4684 SvCUR_set(sstr, 0);
4685 SvTEMP_off(sstr);
4686 }
4687 else if (flags & SV_COW_SHARED_HASH_KEYS
4688 &&
4689#ifdef PERL_COPY_ON_WRITE
4690 (sflags & SVf_IsCOW
4691 ? (!len ||
4692 ( (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4693 /* If this is a regular (non-hek) COW, only so
4694 many COW "copies" are possible. */
4695 && CowREFCNT(sstr) != SV_COW_REFCNT_MAX ))
4696 : ( (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4697 && !(SvFLAGS(dstr) & SVf_BREAK)
4698 && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4699 && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4700 ))
4701#else
4702 sflags & SVf_IsCOW
4703 && !(SvFLAGS(dstr) & SVf_BREAK)
4704#endif
4705 ) {
4706 /* Either it's a shared hash key, or it's suitable for
4707 copy-on-write. */
4708 if (DEBUG_C_TEST) {
4709 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4710 sv_dump(sstr);
4711 sv_dump(dstr);
4712 }
4713#ifdef PERL_ANY_COW
4714 if (!(sflags & SVf_IsCOW)) {
4715 SvIsCOW_on(sstr);
4716 CowREFCNT(sstr) = 0;
4717 }
4718#endif
4719 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4720 SvPV_free(dstr);
4721 }
4722
4723#ifdef PERL_ANY_COW
4724 if (len) {
4725 if (sflags & SVf_IsCOW) {
4726 sv_buf_to_rw(sstr);
4727 }
4728 CowREFCNT(sstr)++;
4729 SvPV_set(dstr, SvPVX_mutable(sstr));
4730 sv_buf_to_ro(sstr);
4731 } else
4732#endif
4733 {
4734 /* SvIsCOW_shared_hash */
4735 DEBUG_C(PerlIO_printf(Perl_debug_log,
4736 "Copy on write: Sharing hash\n"));
4737
4738 assert (SvTYPE(dstr) >= SVt_PV);
4739 SvPV_set(dstr,
4740 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4741 }
4742 SvLEN_set(dstr, len);
4743 SvCUR_set(dstr, cur);
4744 SvIsCOW_on(dstr);
4745 } else {
4746 /* Failed the swipe test, and we cannot do copy-on-write either.
4747 Have to copy the string. */
4748 SvGROW(dstr, cur + 1); /* inlined from sv_setpvn */
4749 Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4750 SvCUR_set(dstr, cur);
4751 *SvEND(dstr) = '\0';
4752 }
4753 if (sflags & SVp_NOK) {
4754 SvNV_set(dstr, SvNVX(sstr));
4755 }
4756 if (sflags & SVp_IOK) {
4757 SvIV_set(dstr, SvIVX(sstr));
4758 if (sflags & SVf_IVisUV)
4759 SvIsUV_on(dstr);
4760 }
4761 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4762 {
4763 const MAGIC * const smg = SvVSTRING_mg(sstr);
4764 if (smg) {
4765 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4766 smg->mg_ptr, smg->mg_len);
4767 SvRMAGICAL_on(dstr);
4768 }
4769 }
4770 }
4771 else if (sflags & (SVp_IOK|SVp_NOK)) {
4772 (void)SvOK_off(dstr);
4773 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4774 if (sflags & SVp_IOK) {
4775 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4776 SvIV_set(dstr, SvIVX(sstr));
4777 }
4778 if (sflags & SVp_NOK) {
4779 SvNV_set(dstr, SvNVX(sstr));
4780 }
4781 }
4782 else {
4783 if (isGV_with_GP(sstr)) {
4784 gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4785 }
4786 else
4787 (void)SvOK_off(dstr);
4788 }
4789 if (SvTAINTED(sstr))
4790 SvTAINT(dstr);
4791}
4792
4793
4794/*
4795=for apidoc sv_set_undef
4796
4797Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4798Doesn't handle set magic.
4799
4800The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4801buffer, unlike C<undef $sv>.
4802
4803Introduced in perl 5.25.12.
4804
4805=cut
4806*/
4807
4808void
4809Perl_sv_set_undef(pTHX_ SV *sv)
4810{
4811 U32 type = SvTYPE(sv);
4812
4813 PERL_ARGS_ASSERT_SV_SET_UNDEF;
4814
4815 /* shortcut, NULL, IV, RV */
4816
4817 if (type <= SVt_IV) {
4818 assert(!SvGMAGICAL(sv));
4819 if (SvREADONLY(sv)) {
4820 /* does undeffing PL_sv_undef count as modifying a read-only
4821 * variable? Some XS code does this */
4822 if (sv == &PL_sv_undef)
4823 return;
4824 Perl_croak_no_modify();
4825 }
4826
4827 if (SvROK(sv)) {
4828 if (SvWEAKREF(sv))
4829 sv_unref_flags(sv, 0);
4830 else {
4831 SV *rv = SvRV(sv);
4832 SvFLAGS(sv) = type; /* quickly turn off all flags */
4833 SvREFCNT_dec_NN(rv);
4834 return;
4835 }
4836 }
4837 SvFLAGS(sv) = type; /* quickly turn off all flags */
4838 return;
4839 }
4840
4841 if (SvIS_FREED(sv))
4842 Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4843 (void *)sv);
4844
4845 SV_CHECK_THINKFIRST_COW_DROP(sv);
4846
4847 if (isGV_with_GP(sv))
4848 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4849 "Undefined value assigned to typeglob");
4850 else
4851 SvOK_off(sv);
4852}
4853
4854
4855
4856/*
4857=for apidoc sv_setsv_mg
4858
4859Like C<sv_setsv>, but also handles 'set' magic.
4860
4861=cut
4862*/
4863
4864void
4865Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4866{
4867 PERL_ARGS_ASSERT_SV_SETSV_MG;
4868
4869 sv_setsv(dstr,sstr);
4870 SvSETMAGIC(dstr);
4871}
4872
4873#ifdef PERL_ANY_COW
4874# define SVt_COW SVt_PV
4875SV *
4876Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4877{
4878 STRLEN cur = SvCUR(sstr);
4879 STRLEN len = SvLEN(sstr);
4880 char *new_pv;
4881#if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4882 const bool already = cBOOL(SvIsCOW(sstr));
4883#endif
4884
4885 PERL_ARGS_ASSERT_SV_SETSV_COW;
4886
4887 if (DEBUG_C_TEST) {
4888 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4889 (void*)sstr, (void*)dstr);
4890 sv_dump(sstr);
4891 if (dstr)
4892 sv_dump(dstr);
4893 }
4894
4895 if (dstr) {
4896 if (SvTHINKFIRST(dstr))
4897 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4898 else if (SvPVX_const(dstr))
4899 Safefree(SvPVX_mutable(dstr));
4900 }
4901 else
4902 new_SV(dstr);
4903 SvUPGRADE(dstr, SVt_COW);
4904
4905 assert (SvPOK(sstr));
4906 assert (SvPOKp(sstr));
4907
4908 if (SvIsCOW(sstr)) {
4909
4910 if (SvLEN(sstr) == 0) {
4911 /* source is a COW shared hash key. */
4912 DEBUG_C(PerlIO_printf(Perl_debug_log,
4913 "Fast copy on write: Sharing hash\n"));
4914 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4915 goto common_exit;
4916 }
4917 assert(SvCUR(sstr)+1 < SvLEN(sstr));
4918 assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4919 } else {
4920 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4921 SvUPGRADE(sstr, SVt_COW);
4922 SvIsCOW_on(sstr);
4923 DEBUG_C(PerlIO_printf(Perl_debug_log,
4924 "Fast copy on write: Converting sstr to COW\n"));
4925 CowREFCNT(sstr) = 0;
4926 }
4927# ifdef PERL_DEBUG_READONLY_COW
4928 if (already) sv_buf_to_rw(sstr);
4929# endif
4930 CowREFCNT(sstr)++;
4931 new_pv = SvPVX_mutable(sstr);
4932 sv_buf_to_ro(sstr);
4933
4934 common_exit:
4935 SvPV_set(dstr, new_pv);
4936 SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4937 if (SvUTF8(sstr))
4938 SvUTF8_on(dstr);
4939 SvLEN_set(dstr, len);
4940 SvCUR_set(dstr, cur);
4941 if (DEBUG_C_TEST) {
4942 sv_dump(dstr);
4943 }
4944 return dstr;
4945}
4946#endif
4947
4948/*
4949=for apidoc sv_setpv_bufsize
4950
4951Sets the SV to be a string of cur bytes length, with at least
4952len bytes available. Ensures that there is a null byte at SvEND.
4953Returns a char * pointer to the SvPV buffer.
4954
4955=cut
4956*/
4957
4958char *
4959Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4960{
4961 char *pv;
4962
4963 PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4964
4965 SV_CHECK_THINKFIRST_COW_DROP(sv);
4966 SvUPGRADE(sv, SVt_PV);
4967 pv = SvGROW(sv, len + 1);
4968 SvCUR_set(sv, cur);
4969 *(SvEND(sv))= '\0';
4970 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4971
4972 SvTAINT(sv);
4973 if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4974 return pv;
4975}
4976
4977/*
4978=for apidoc sv_setpvn
4979
4980Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4981The C<len> parameter indicates the number of
4982bytes to be copied. If the C<ptr> argument is NULL the SV will become
4983undefined. Does not handle 'set' magic. See C<L</sv_setpvn_mg>>.
4984
4985=cut
4986*/
4987
4988void
4989Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4990{
4991 char *dptr;
4992
4993 PERL_ARGS_ASSERT_SV_SETPVN;
4994
4995 SV_CHECK_THINKFIRST_COW_DROP(sv);
4996 if (isGV_with_GP(sv))
4997 Perl_croak_no_modify();
4998 if (!ptr) {
4999 (void)SvOK_off(sv);
5000 return;
5001 }
5002 else {
5003 /* len is STRLEN which is unsigned, need to copy to signed */
5004 const IV iv = len;
5005 if (iv < 0)
5006 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
5007 IVdf, iv);
5008 }
5009 SvUPGRADE(sv, SVt_PV);
5010
5011 dptr = SvGROW(sv, len + 1);
5012 Move(ptr,dptr,len,char);
5013 dptr[len] = '\0';
5014 SvCUR_set(sv, len);
5015 (void)SvPOK_only_UTF8(sv); /* validate pointer */
5016 SvTAINT(sv);
5017 if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5018}
5019
5020/*
5021=for apidoc sv_setpvn_mg
5022
5023Like C<sv_setpvn>, but also handles 'set' magic.
5024
5025=cut
5026*/
5027
5028void
5029Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5030{
5031 PERL_ARGS_ASSERT_SV_SETPVN_MG;
5032
5033 sv_setpvn(sv,ptr,len);
5034 SvSETMAGIC(sv);
5035}
5036
5037/*
5038=for apidoc sv_setpv
5039
5040Copies a string into an SV. The string must be terminated with a C<NUL>
5041character, and not contain embeded C<NUL>'s.
5042Does not handle 'set' magic. See C<L</sv_setpv_mg>>.
5043
5044=cut
5045*/
5046
5047void
5048Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5049{
5050 STRLEN len;
5051
5052 PERL_ARGS_ASSERT_SV_SETPV;
5053
5054 SV_CHECK_THINKFIRST_COW_DROP(sv);
5055 if (!ptr) {
5056 (void)SvOK_off(sv);
5057 return;
5058 }
5059 len = strlen(ptr);
5060 SvUPGRADE(sv, SVt_PV);
5061
5062 SvGROW(sv, len + 1);
5063 Move(ptr,SvPVX(sv),len+1,char);
5064 SvCUR_set(sv, len);
5065 (void)SvPOK_only_UTF8(sv); /* validate pointer */
5066 SvTAINT(sv);
5067 if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5068}
5069
5070/*
5071=for apidoc sv_setpv_mg
5072
5073Like C<sv_setpv>, but also handles 'set' magic.
5074
5075=cut
5076*/
5077
5078void
5079Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5080{
5081 PERL_ARGS_ASSERT_SV_SETPV_MG;
5082
5083 sv_setpv(sv,ptr);
5084 SvSETMAGIC(sv);
5085}
5086
5087void
5088Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5089{
5090 PERL_ARGS_ASSERT_SV_SETHEK;
5091
5092 if (!hek) {
5093 return;
5094 }
5095
5096 if (HEK_LEN(hek) == HEf_SVKEY) {
5097 sv_setsv(sv, *(SV**)HEK_KEY(hek));
5098 return;
5099 } else {
5100 const int flags = HEK_FLAGS(hek);
5101 if (flags & HVhek_WASUTF8) {
5102 STRLEN utf8_len = HEK_LEN(hek);
5103 char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5104 sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5105 SvUTF8_on(sv);
5106 return;
5107 } else if (flags & HVhek_UNSHARED) {
5108 sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5109 if (HEK_UTF8(hek))
5110 SvUTF8_on(sv);
5111 else SvUTF8_off(sv);
5112 return;
5113 }
5114 {
5115 SV_CHECK_THINKFIRST_COW_DROP(sv);
5116 SvUPGRADE(sv, SVt_PV);
5117 SvPV_free(sv);
5118 SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5119 SvCUR_set(sv, HEK_LEN(hek));
5120 SvLEN_set(sv, 0);
5121 SvIsCOW_on(sv);
5122 SvPOK_on(sv);
5123 if (HEK_UTF8(hek))
5124 SvUTF8_on(sv);
5125 else SvUTF8_off(sv);
5126 return;
5127 }
5128 }
5129}
5130
5131
5132/*
5133=for apidoc sv_usepvn_flags
5134
5135Tells an SV to use C<ptr> to find its string value. Normally the
5136string is stored inside the SV, but sv_usepvn allows the SV to use an
5137outside string. C<ptr> should point to memory that was allocated
5138by L<C<Newx>|perlclib/Memory Management and String Handling>. It must be
5139the start of a C<Newx>-ed block of memory, and not a pointer to the
5140middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5141and not be from a non-C<Newx> memory allocator like C<malloc>. The
5142string length, C<len>, must be supplied. By default this function
5143will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5144so that pointer should not be freed or used by the programmer after
5145giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5146that pointer (e.g. ptr + 1) be used.
5147
5148If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>. If
5149S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5150and the realloc
5151will be skipped (i.e. the buffer is actually at least 1 byte longer than
5152C<len>, and already meets the requirements for storing in C<SvPVX>).
5153
5154=cut
5155*/
5156
5157void
5158Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5159{
5160 STRLEN allocate;
5161
5162 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5163
5164 SV_CHECK_THINKFIRST_COW_DROP(sv);
5165 SvUPGRADE(sv, SVt_PV);
5166 if (!ptr) {
5167 (void)SvOK_off(sv);
5168 if (flags & SV_SMAGIC)
5169 SvSETMAGIC(sv);
5170 return;
5171 }
5172 if (SvPVX_const(sv))
5173 SvPV_free(sv);
5174
5175#ifdef DEBUGGING
5176 if (flags & SV_HAS_TRAILING_NUL)
5177 assert(ptr[len] == '\0');
5178#endif
5179
5180 allocate = (flags & SV_HAS_TRAILING_NUL)
5181 ? len + 1 :
5182#ifdef Perl_safesysmalloc_size
5183 len + 1;
5184#else
5185 PERL_STRLEN_ROUNDUP(len + 1);
5186#endif
5187 if (flags & SV_HAS_TRAILING_NUL) {
5188 /* It's long enough - do nothing.
5189 Specifically Perl_newCONSTSUB is relying on this. */
5190 } else {
5191#ifdef DEBUGGING
5192 /* Force a move to shake out bugs in callers. */
5193 char *new_ptr = (char*)safemalloc(allocate);
5194 Copy(ptr, new_ptr, len, char);
5195 PoisonFree(ptr,len,char);
5196 Safefree(ptr);
5197 ptr = new_ptr;
5198#else
5199 ptr = (char*) saferealloc (ptr, allocate);
5200#endif
5201 }
5202#ifdef Perl_safesysmalloc_size
5203 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5204#else
5205 SvLEN_set(sv, allocate);
5206#endif
5207 SvCUR_set(sv, len);
5208 SvPV_set(sv, ptr);
5209 if (!(flags & SV_HAS_TRAILING_NUL)) {
5210 ptr[len] = '\0';
5211 }
5212 (void)SvPOK_only_UTF8(sv); /* validate pointer */
5213 SvTAINT(sv);
5214 if (flags & SV_SMAGIC)
5215 SvSETMAGIC(sv);
5216}
5217
5218
5219static void
5220S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5221{
5222 assert(SvIsCOW(sv));
5223 {
5224#ifdef PERL_ANY_COW
5225 const char * const pvx = SvPVX_const(sv);
5226 const STRLEN len = SvLEN(sv);
5227 const STRLEN cur = SvCUR(sv);
5228
5229 if (DEBUG_C_TEST) {
5230 PerlIO_printf(Perl_debug_log,
5231 "Copy on write: Force normal %ld\n",
5232 (long) flags);
5233 sv_dump(sv);
5234 }
5235 SvIsCOW_off(sv);
5236# ifdef PERL_COPY_ON_WRITE
5237 if (len) {
5238 /* Must do this first, since the CowREFCNT uses SvPVX and
5239 we need to write to CowREFCNT, or de-RO the whole buffer if we are
5240 the only owner left of the buffer. */
5241 sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5242 {
5243 U8 cowrefcnt = CowREFCNT(sv);
5244 if(cowrefcnt != 0) {
5245 cowrefcnt--;
5246 CowREFCNT(sv) = cowrefcnt;
5247 sv_buf_to_ro(sv);
5248 goto copy_over;
5249 }
5250 }
5251 /* Else we are the only owner of the buffer. */
5252 }
5253 else
5254# endif
5255 {
5256 /* This SV doesn't own the buffer, so need to Newx() a new one: */
5257 copy_over:
5258 SvPV_set(sv, NULL);
5259 SvCUR_set(sv, 0);
5260 SvLEN_set(sv, 0);
5261 if (flags & SV_COW_DROP_PV) {
5262 /* OK, so we don't need to copy our buffer. */
5263 SvPOK_off(sv);
5264 } else {
5265 SvGROW(sv, cur + 1);
5266 Move(pvx,SvPVX(sv),cur,char);
5267 SvCUR_set(sv, cur);
5268 *SvEND(sv) = '\0';
5269 }
5270 if (len) {
5271 } else {
5272 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5273 }
5274 if (DEBUG_C_TEST) {
5275 sv_dump(sv);
5276 }
5277 }
5278#else
5279 const char * const pvx = SvPVX_const(sv);
5280 const STRLEN len = SvCUR(sv);
5281 SvIsCOW_off(sv);
5282 SvPV_set(sv, NULL);
5283 SvLEN_set(sv, 0);
5284 if (flags & SV_COW_DROP_PV) {
5285 /* OK, so we don't need to copy our buffer. */
5286 SvPOK_off(sv);
5287 } else {
5288 SvGROW(sv, len + 1);
5289 Move(pvx,SvPVX(sv),len,char);
5290 *SvEND(sv) = '\0';
5291 }
5292 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5293#endif
5294 }
5295}
5296
5297
5298/*
5299=for apidoc sv_force_normal_flags
5300
5301Undo various types of fakery on an SV, where fakery means
5302"more than" a string: if the PV is a shared string, make
5303a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5304an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5305we do the copy, and is also used locally; if this is a
5306vstring, drop the vstring magic. If C<SV_COW_DROP_PV> is set
5307then a copy-on-write scalar drops its PV buffer (if any) and becomes
5308C<SvPOK_off> rather than making a copy. (Used where this
5309scalar is about to be set to some other value.) In addition,
5310the C<flags> parameter gets passed to C<sv_unref_flags()>
5311when unreffing. C<sv_force_normal> calls this function
5312with flags set to 0.
5313
5314This function is expected to be used to signal to perl that this SV is
5315about to be written to, and any extra book-keeping needs to be taken care
5316of. Hence, it croaks on read-only values.
5317
5318=cut
5319*/
5320
5321void
5322Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5323{
5324 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5325
5326 if (SvREADONLY(sv))
5327 Perl_croak_no_modify();
5328 else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5329 S_sv_uncow(aTHX_ sv, flags);
5330 if (SvROK(sv))
5331 sv_unref_flags(sv, flags);
5332 else if (SvFAKE(sv) && isGV_with_GP(sv))
5333 sv_unglob(sv, flags);
5334 else if (SvFAKE(sv) && isREGEXP(sv)) {
5335 /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5336 to sv_unglob. We only need it here, so inline it. */
5337 const bool islv = SvTYPE(sv) == SVt_PVLV;
5338 const svtype new_type =
5339 islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5340 SV *const temp = newSV_type(new_type);
5341 regexp *const temp_p = ReANY((REGEXP *)sv);
5342
5343 if (new_type == SVt_PVMG) {
5344 SvMAGIC_set(temp, SvMAGIC(sv));
5345 SvMAGIC_set(sv, NULL);
5346 SvSTASH_set(temp, SvSTASH(sv));
5347 SvSTASH_set(sv, NULL);
5348 }
5349 if (!islv) SvCUR_set(temp, SvCUR(sv));
5350 /* Remember that SvPVX is in the head, not the body. But
5351 RX_WRAPPED is in the body. */
5352 assert(ReANY((REGEXP *)sv)->mother_re);
5353 /* Their buffer is already owned by someone else. */
5354 if (flags & SV_COW_DROP_PV) {
5355 /* SvLEN is already 0. For SVt_REGEXP, we have a brand new
5356 zeroed body. For SVt_PVLV, it should have been set to 0
5357 before turning into a regexp. */
5358 assert(!SvLEN(islv ? sv : temp));
5359 sv->sv_u.svu_pv = 0;
5360 }
5361 else {
5362 sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5363 SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5364 SvPOK_on(sv);
5365 }
5366
5367 /* Now swap the rest of the bodies. */
5368
5369 SvFAKE_off(sv);
5370 if (!islv) {
5371 SvFLAGS(sv) &= ~SVTYPEMASK;
5372 SvFLAGS(sv) |= new_type;
5373 SvANY(sv) = SvANY(temp);
5374 }
5375
5376 SvFLAGS(temp) &= ~(SVTYPEMASK);
5377 SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5378 SvANY(temp) = temp_p;
5379 temp->sv_u.svu_rx = (regexp *)temp_p;
5380
5381 SvREFCNT_dec_NN(temp);
5382 }
5383 else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5384}
5385
5386/*
5387=for apidoc sv_chop
5388
5389Efficient removal of characters from the beginning of the string buffer.
5390C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5391pointer to somewhere inside the string buffer. C<ptr> becomes the first
5392character of the adjusted string. Uses the C<OOK> hack. On return, only
5393C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5394
5395Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5396refer to the same chunk of data.
5397
5398The unfortunate similarity of this function's name to that of Perl's C<chop>
5399operator is strictly coincidental. This function works from the left;
5400C<chop> works from the right.
5401
5402=cut
5403*/
5404
5405void
5406Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5407{
5408 STRLEN delta;
5409 STRLEN old_delta;
5410 U8 *p;
5411#ifdef DEBUGGING
5412 const U8 *evacp;
5413 STRLEN evacn;
5414#endif
5415 STRLEN max_delta;
5416
5417 PERL_ARGS_ASSERT_SV_CHOP;
5418
5419 if (!ptr || !SvPOKp(sv))
5420 return;
5421 delta = ptr - SvPVX_const(sv);
5422 if (!delta) {
5423 /* Nothing to do. */
5424 return;
5425 }
5426 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5427 if (delta > max_delta)
5428 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5429 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5430 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5431 SV_CHECK_THINKFIRST(sv);
5432 SvPOK_only_UTF8(sv);
5433
5434 if (!SvOOK(sv)) {
5435 if (!SvLEN(sv)) { /* make copy of shared string */
5436 const char *pvx = SvPVX_const(sv);
5437 const STRLEN len = SvCUR(sv);
5438 SvGROW(sv, len + 1);
5439 Move(pvx,SvPVX(sv),len,char);
5440 *SvEND(sv) = '\0';
5441 }
5442 SvOOK_on(sv);
5443 old_delta = 0;
5444 } else {
5445 SvOOK_offset(sv, old_delta);
5446 }
5447 SvLEN_set(sv, SvLEN(sv) - delta);
5448 SvCUR_set(sv, SvCUR(sv) - delta);
5449 SvPV_set(sv, SvPVX(sv) + delta);
5450
5451 p = (U8 *)SvPVX_const(sv);
5452
5453#ifdef DEBUGGING
5454 /* how many bytes were evacuated? we will fill them with sentinel
5455 bytes, except for the part holding the new offset of course. */
5456 evacn = delta;
5457 if (old_delta)
5458 evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5459 assert(evacn);
5460 assert(evacn <= delta + old_delta);
5461 evacp = p - evacn;
5462#endif
5463
5464 /* This sets 'delta' to the accumulated value of all deltas so far */
5465 delta += old_delta;
5466 assert(delta);
5467
5468 /* If 'delta' fits in a byte, store it just prior to the new beginning of
5469 * the string; otherwise store a 0 byte there and store 'delta' just prior
5470 * to that, using as many bytes as a STRLEN occupies. Thus it overwrites a
5471 * portion of the chopped part of the string */
5472 if (delta < 0x100) {
5473 *--p = (U8) delta;
5474 } else {
5475 *--p = 0;
5476 p -= sizeof(STRLEN);
5477 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5478 }
5479
5480#ifdef DEBUGGING
5481 /* Fill the preceding buffer with sentinals to verify that no-one is
5482 using it. */
5483 while (p > evacp) {
5484 --p;
5485 *p = (U8)PTR2UV(p);
5486 }
5487#endif
5488}
5489
5490/*
5491=for apidoc sv_catpvn
5492
5493Concatenates the string onto the end of the string which is in the SV.
5494C<len> indicates number of bytes to copy. If the SV has the UTF-8
5495status set, then the bytes appended should be valid UTF-8.
5496Handles 'get' magic, but not 'set' magic. See C<L</sv_catpvn_mg>>.
5497
5498=for apidoc sv_catpvn_flags
5499
5500Concatenates the string onto the end of the string which is in the SV. The
5501C<len> indicates number of bytes to copy.
5502
5503By default, the string appended is assumed to be valid UTF-8 if the SV has
5504the UTF-8 status set, and a string of bytes otherwise. One can force the
5505appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5506flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5507string appended will be upgraded to UTF-8 if necessary.
5508
5509If C<flags> has the C<SV_SMAGIC> bit set, will
5510C<mg_set> on C<dsv> afterwards if appropriate.
5511C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5512in terms of this function.
5513
5514=cut
5515*/
5516
5517void
5518Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5519{
5520 STRLEN dlen;
5521 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5522
5523 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5524 assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5525
5526 if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5527 if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5528 sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5529 dlen = SvCUR(dsv);
5530 }
5531 else SvGROW(dsv, dlen + slen + 3);
5532 if (sstr == dstr)
5533 sstr = SvPVX_const(dsv);
5534 Move(sstr, SvPVX(dsv) + dlen, slen, char);
5535 SvCUR_set(dsv, SvCUR(dsv) + slen);
5536 }
5537 else {
5538 /* We inline bytes_to_utf8, to avoid an extra malloc. */
5539 const char * const send = sstr + slen;
5540 U8 *d;
5541
5542 /* Something this code does not account for, which I think is
5543 impossible; it would require the same pv to be treated as
5544 bytes *and* utf8, which would indicate a bug elsewhere. */
5545 assert(sstr != dstr);
5546
5547 SvGROW(dsv, dlen + slen * 2 + 3);
5548 d = (U8 *)SvPVX(dsv) + dlen;
5549
5550 while (sstr < send) {
5551 append_utf8_from_native_byte(*sstr, &d);
5552 sstr++;
5553 }
5554 SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5555 }
5556 *SvEND(dsv) = '\0';
5557 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
5558 SvTAINT(dsv);
5559 if (flags & SV_SMAGIC)
5560 SvSETMAGIC(dsv);
5561}
5562
5563/*
5564=for apidoc sv_catsv
5565
5566Concatenates the string from SV C<ssv> onto the end of the string in SV
5567C<dsv>. If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5568Handles 'get' magic on both SVs, but no 'set' magic. See C<L</sv_catsv_mg>>
5569and C<L</sv_catsv_nomg>>.
5570
5571=for apidoc sv_catsv_flags
5572
5573Concatenates the string from SV C<ssv> onto the end of the string in SV
5574C<dsv>. If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5575If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5576appropriate. If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5577the modified SV afterward, if appropriate. C<sv_catsv>, C<sv_catsv_nomg>,
5578and C<sv_catsv_mg> are implemented in terms of this function.
5579
5580=cut */
5581
5582void
5583Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5584{
5585 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5586
5587 if (ssv) {
5588 STRLEN slen;
5589 const char *spv = SvPV_flags_const(ssv, slen, flags);
5590 if (flags & SV_GMAGIC)
5591 SvGETMAGIC(dsv);
5592 sv_catpvn_flags(dsv, spv, slen,
5593 DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5594 if (flags & SV_SMAGIC)
5595 SvSETMAGIC(dsv);
5596 }
5597}
5598
5599/*
5600=for apidoc sv_catpv
5601
5602Concatenates the C<NUL>-terminated string onto the end of the string which is
5603in the SV.
5604If the SV has the UTF-8 status set, then the bytes appended should be
5605valid UTF-8. Handles 'get' magic, but not 'set' magic. See
5606C<L</sv_catpv_mg>>.
5607
5608=cut */
5609
5610void
5611Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5612{
5613 STRLEN len;
5614 STRLEN tlen;
5615 char *junk;
5616
5617 PERL_ARGS_ASSERT_SV_CATPV;
5618
5619 if (!ptr)
5620 return;
5621 junk = SvPV_force(sv, tlen);
5622 len = strlen(ptr);
5623 SvGROW(sv, tlen + len + 1);
5624 if (ptr == junk)
5625 ptr = SvPVX_const(sv);
5626 Move(ptr,SvPVX(sv)+tlen,len+1,char);
5627 SvCUR_set(sv, SvCUR(sv) + len);
5628 (void)SvPOK_only_UTF8(sv); /* validate pointer */
5629 SvTAINT(sv);
5630}
5631
5632/*
5633=for apidoc sv_catpv_flags
5634
5635Concatenates the C<NUL>-terminated string onto the end of the string which is
5636in the SV.
5637If the SV has the UTF-8 status set, then the bytes appended should
5638be valid UTF-8. If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5639on the modified SV if appropriate.
5640
5641=cut
5642*/
5643
5644void
5645Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5646{
5647 PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5648 sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5649}
5650
5651/*
5652=for apidoc sv_catpv_mg
5653
5654Like C<sv_catpv>, but also handles 'set' magic.
5655
5656=cut
5657*/
5658
5659void
5660Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5661{
5662 PERL_ARGS_ASSERT_SV_CATPV_MG;
5663
5664 sv_catpv(sv,ptr);
5665 SvSETMAGIC(sv);
5666}
5667
5668/*
5669=for apidoc newSV
5670
5671Creates a new SV. A non-zero C<len> parameter indicates the number of
5672bytes of preallocated string space the SV should have. An extra byte for a
5673trailing C<NUL> is also reserved. (C<SvPOK> is not set for the SV even if string
5674space is allocated.) The reference count for the new SV is set to 1.
5675
5676In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5677parameter, I<x>, a debug aid which allowed callers to identify themselves.
5678This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5679L<perlhacktips/PERL_MEM_LOG>). The older API is still there for use in XS
5680modules supporting older perls.
5681
5682=cut
5683*/
5684
5685SV *
5686Perl_newSV(pTHX_ const STRLEN len)
5687{
5688 SV *sv;
5689
5690 new_SV(sv);
5691 if (len) {
5692 sv_grow(sv, len + 1);
5693 }
5694 return sv;
5695}
5696/*
5697=for apidoc sv_magicext
5698
5699Adds magic to an SV, upgrading it if necessary. Applies the
5700supplied C<vtable> and returns a pointer to the magic added.
5701
5702Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5703In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5704one instance of the same C<how>.
5705
5706If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5707stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5708special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5709to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5710
5711(This is now used as a subroutine by C<sv_magic>.)
5712
5713=cut
5714*/
5715MAGIC *
5716Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
5717 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5718{
5719 MAGIC* mg;
5720
5721 PERL_ARGS_ASSERT_SV_MAGICEXT;
5722
5723 SvUPGRADE(sv, SVt_PVMG);
5724 Newxz(mg, 1, MAGIC);
5725 mg->mg_moremagic = SvMAGIC(sv);
5726 SvMAGIC_set(sv, mg);
5727
5728 /* Sometimes a magic contains a reference loop, where the sv and
5729 object refer to each other. To prevent a reference loop that
5730 would prevent such objects being freed, we look for such loops
5731 and if we find one we avoid incrementing the object refcount.
5732
5733 Note we cannot do this to avoid self-tie loops as intervening RV must
5734 have its REFCNT incremented to keep it in existence.
5735
5736 */
5737 if (!obj || obj == sv ||
5738 how == PERL_MAGIC_arylen ||
5739 how == PERL_MAGIC_regdata ||
5740 how == PERL_MAGIC_regdatum ||
5741 how == PERL_MAGIC_symtab ||
5742 (SvTYPE(obj) == SVt_PVGV &&
5743 (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5744 || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5745 || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5746 {
5747 mg->mg_obj = obj;
5748 }
5749 else {
5750 mg->mg_obj = SvREFCNT_inc_simple(obj);
5751 mg->mg_flags |= MGf_REFCOUNTED;
5752 }
5753
5754 /* Normal self-ties simply pass a null object, and instead of
5755 using mg_obj directly, use the SvTIED_obj macro to produce a
5756 new RV as needed. For glob "self-ties", we are tieing the PVIO
5757 with an RV obj pointing to the glob containing the PVIO. In
5758 this case, to avoid a reference loop, we need to weaken the
5759 reference.
5760 */
5761
5762 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5763 obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5764 {
5765 sv_rvweaken(obj);
5766 }
5767
5768 mg->mg_type = how;
5769 mg->mg_len = namlen;
5770 if (name) {
5771 if (namlen > 0)
5772 mg->mg_ptr = savepvn(name, namlen);
5773 else if (namlen == HEf_SVKEY) {
5774 /* Yes, this is casting away const. This is only for the case of
5775 HEf_SVKEY. I think we need to document this aberation of the
5776 constness of the API, rather than making name non-const, as
5777 that change propagating outwards a long way. */
5778 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5779 } else
5780 mg->mg_ptr = (char *) name;
5781 }
5782 mg->mg_virtual = (MGVTBL *) vtable;
5783
5784 mg_magical(sv);
5785 return mg;
5786}
5787
5788MAGIC *
5789Perl_sv_magicext_mglob(pTHX_ SV *sv)
5790{
5791 PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5792 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5793 /* This sv is only a delegate. //g magic must be attached to
5794 its target. */
5795 vivify_defelem(sv);
5796 sv = LvTARG(sv);
5797 }
5798 return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5799 &PL_vtbl_mglob, 0, 0);
5800}
5801
5802/*
5803=for apidoc sv_magic
5804
5805Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if
5806necessary, then adds a new magic item of type C<how> to the head of the
5807magic list.
5808
5809See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5810handling of the C<name> and C<namlen> arguments.
5811
5812You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5813to add more than one instance of the same C<how>.
5814
5815=cut
5816*/
5817
5818void
5819Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5820 const char *const name, const I32 namlen)
5821{
5822 const MGVTBL *vtable;
5823 MAGIC* mg;
5824 unsigned int flags;
5825 unsigned int vtable_index;
5826
5827 PERL_ARGS_ASSERT_SV_MAGIC;
5828
5829 if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5830 || ((flags = PL_magic_data[how]),
5831 (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5832 > magic_vtable_max))
5833 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5834
5835 /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5836 Useful for attaching extension internal data to perl vars.
5837 Note that multiple extensions may clash if magical scalars
5838 etc holding private data from one are passed to another. */
5839
5840 vtable = (vtable_index == magic_vtable_max)
5841 ? NULL : PL_magic_vtables + vtable_index;
5842
5843 if (SvREADONLY(sv)) {
5844 if (
5845 !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5846 )
5847 {
5848 Perl_croak_no_modify();
5849 }
5850 }
5851 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5852 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5853 /* sv_magic() refuses to add a magic of the same 'how' as an
5854 existing one
5855 */
5856 if (how == PERL_MAGIC_taint)
5857 mg->mg_len |= 1;
5858 return;
5859 }
5860 }
5861
5862 /* Force pos to be stored as characters, not bytes. */
5863 if (SvMAGICAL(sv) && DO_UTF8(sv)
5864 && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5865 && mg->mg_len != -1
5866 && mg->mg_flags & MGf_BYTES) {
5867 mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5868 SV_CONST_RETURN);
5869 mg->mg_flags &= ~MGf_BYTES;
5870 }
5871
5872 /* Rest of work is done else where */
5873 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5874
5875 switch (how) {
5876 case PERL_MAGIC_taint:
5877 mg->mg_len = 1;
5878 break;
5879 case PERL_MAGIC_ext:
5880 case PERL_MAGIC_dbfile:
5881 SvRMAGICAL_on(sv);
5882 break;
5883 }
5884}
5885
5886static int
5887S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5888{
5889 MAGIC* mg;
5890 MAGIC** mgp;
5891
5892 assert(flags <= 1);
5893
5894 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5895 return 0;
5896 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5897 for (mg = *mgp; mg; mg = *mgp) {
5898 const MGVTBL* const virt = mg->mg_virtual;
5899 if (mg->mg_type == type && (!flags || virt == vtbl)) {
5900 *mgp = mg->mg_moremagic;
5901 if (virt && virt->svt_free)
5902 virt->svt_free(aTHX_ sv, mg);
5903 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5904 if (mg->mg_len > 0)
5905 Safefree(mg->mg_ptr);
5906 else if (mg->mg_len == HEf_SVKEY)
5907 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5908 else if (mg->mg_type == PERL_MAGIC_utf8)
5909 Safefree(mg->mg_ptr);
5910 }
5911 if (mg->mg_flags & MGf_REFCOUNTED)
5912 SvREFCNT_dec(mg->mg_obj);
5913 Safefree(mg);
5914 }
5915 else
5916 mgp = &mg->mg_moremagic;
5917 }
5918 if (SvMAGIC(sv)) {
5919 if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */
5920 mg_magical(sv); /* else fix the flags now */
5921 }
5922 else
5923 SvMAGICAL_off(sv);
5924
5925 return 0;
5926}
5927
5928/*
5929=for apidoc sv_unmagic
5930
5931Removes all magic of type C<type> from an SV.
5932
5933=cut
5934*/
5935
5936int
5937Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5938{
5939 PERL_ARGS_ASSERT_SV_UNMAGIC;
5940 return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5941}
5942
5943/*
5944=for apidoc sv_unmagicext
5945
5946Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5947
5948=cut
5949*/
5950
5951int
5952Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5953{
5954 PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5955 return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5956}
5957
5958/*
5959=for apidoc sv_rvweaken
5960
5961Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5962referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5963push a back-reference to this RV onto the array of backreferences
5964associated with that magic. If the RV is magical, set magic will be
5965called after the RV is cleared.
5966
5967=cut
5968*/
5969
5970SV *
5971Perl_sv_rvweaken(pTHX_ SV *const sv)
5972{
5973 SV *tsv;
5974
5975 PERL_ARGS_ASSERT_SV_RVWEAKEN;
5976
5977 if (!SvOK(sv)) /* let undefs pass */
5978 return sv;
5979 if (!SvROK(sv))
5980 Perl_croak(aTHX_ "Can't weaken a nonreference");
5981 else if (SvWEAKREF(sv)) {
5982 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5983 return sv;
5984 }
5985 else if (SvREADONLY(sv)) croak_no_modify();
5986 tsv = SvRV(sv);
5987 Perl_sv_add_backref(aTHX_ tsv, sv);
5988 SvWEAKREF_on(sv);
5989 SvREFCNT_dec_NN(tsv);
5990 return sv;
5991}
5992
5993/*
5994=for apidoc sv_get_backrefs
5995
5996If C<sv> is the target of a weak reference then it returns the back
5997references structure associated with the sv; otherwise return C<NULL>.
5998
5999When returning a non-null result the type of the return is relevant. If it
6000is an AV then the elements of the AV are the weak reference RVs which
6001point at this item. If it is any other type then the item itself is the
6002weak reference.
6003
6004See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
6005C<Perl_sv_kill_backrefs()>
6006
6007=cut
6008*/
6009
6010SV *
6011Perl_sv_get_backrefs(SV *const sv)
6012{
6013 SV *backrefs= NULL;
6014
6015 PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6016
6017 /* find slot to store array or singleton backref */
6018
6019 if (SvTYPE(sv) == SVt_PVHV) {
6020 if (SvOOK(sv)) {
6021 struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6022 backrefs = (SV *)iter->xhv_backreferences;
6023 }
6024 } else if (SvMAGICAL(sv)) {
6025 MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6026 if (mg)
6027 backrefs = mg->mg_obj;
6028 }
6029 return backrefs;
6030}
6031
6032/* Give tsv backref magic if it hasn't already got it, then push a
6033 * back-reference to sv onto the array associated with the backref magic.
6034 *
6035 * As an optimisation, if there's only one backref and it's not an AV,
6036 * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6037 * allocate an AV. (Whether the slot holds an AV tells us whether this is
6038 * active.)
6039 */
6040
6041/* A discussion about the backreferences array and its refcount:
6042 *
6043 * The AV holding the backreferences is pointed to either as the mg_obj of
6044 * PERL_MAGIC_backref, or in the specific case of a HV, from the
6045 * xhv_backreferences field. The array is created with a refcount
6046 * of 2. This means that if during global destruction the array gets
6047 * picked on before its parent to have its refcount decremented by the
6048 * random zapper, it won't actually be freed, meaning it's still there for
6049 * when its parent gets freed.
6050 *
6051 * When the parent SV is freed, the extra ref is killed by
6052 * Perl_sv_kill_backrefs. The other ref is killed, in the case of magic,
6053 * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6054 *
6055 * When a single backref SV is stored directly, it is not reference
6056 * counted.
6057 */
6058
6059void
6060Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6061{
6062 SV **svp;
6063 AV *av = NULL;
6064 MAGIC *mg = NULL;
6065
6066 PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6067
6068 /* find slot to store array or singleton backref */
6069
6070 if (SvTYPE(tsv) == SVt_PVHV) {
6071 svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6072 } else {
6073 if (SvMAGICAL(tsv))
6074 mg = mg_find(tsv, PERL_MAGIC_backref);
6075 if (!mg)
6076 mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6077 svp = &(mg->mg_obj);
6078 }
6079
6080 /* create or retrieve the array */
6081
6082 if ( (!*svp && SvTYPE(sv) == SVt_PVAV)
6083 || (*svp && SvTYPE(*svp) != SVt_PVAV)
6084 ) {
6085 /* create array */
6086 if (mg)
6087 mg->mg_flags |= MGf_REFCOUNTED;
6088 av = newAV();
6089 AvREAL_off(av);
6090 SvREFCNT_inc_simple_void_NN(av);
6091 /* av now has a refcnt of 2; see discussion above */
6092 av_extend(av, *svp ? 2 : 1);
6093 if (*svp) {
6094 /* move single existing backref to the array */
6095 AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6096 }
6097 *svp = (SV*)av;
6098 }
6099 else {
6100 av = MUTABLE_AV(*svp);
6101 if (!av) {
6102 /* optimisation: store single backref directly in HvAUX or mg_obj */
6103 *svp = sv;
6104 return;
6105 }
6106 assert(SvTYPE(av) == SVt_PVAV);
6107 if (AvFILLp(av) >= AvMAX(av)) {
6108 av_extend(av, AvFILLp(av)+1);
6109 }
6110 }
6111 /* push new backref */
6112 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6113}
6114
6115/* delete a back-reference to ourselves from the backref magic associated
6116 * with the SV we point to.
6117 */
6118
6119void
6120Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6121{
6122 SV **svp = NULL;
6123
6124 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6125
6126 if (SvTYPE(tsv) == SVt_PVHV) {
6127 if (SvOOK(tsv))
6128 svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6129 }
6130 else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6131 /* It's possible for the the last (strong) reference to tsv to have
6132 become freed *before* the last thing holding a weak reference.
6133 If both survive longer than the backreferences array, then when
6134 the referent's reference count drops to 0 and it is freed, it's
6135 not able to chase the backreferences, so they aren't NULLed.
6136
6137 For example, a CV holds a weak reference to its stash. If both the
6138 CV and the stash survive longer than the backreferences array,
6139 and the CV gets picked for the SvBREAK() treatment first,
6140 *and* it turns out that the stash is only being kept alive because
6141 of an our variable in the pad of the CV, then midway during CV
6142 destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6143 It ends up pointing to the freed HV. Hence it's chased in here, and
6144 if this block wasn't here, it would hit the !svp panic just below.
6145
6146 I don't believe that "better" destruction ordering is going to help
6147 here - during global destruction there's always going to be the
6148 chance that something goes out of order. We've tried to make it
6149 foolproof before, and it only resulted in evolutionary pressure on
6150 fools. Which made us look foolish for our hubris. :-(
6151 */
6152 return;
6153 }
6154 else {
6155 MAGIC *const mg
6156 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6157 svp = mg ? &(mg->mg_obj) : NULL;
6158 }
6159
6160 if (!svp)
6161 Perl_croak(aTHX_ "panic: del_backref, svp=0");
6162 if (!*svp) {
6163 /* It's possible that sv is being freed recursively part way through the
6164 freeing of tsv. If this happens, the backreferences array of tsv has
6165 already been freed, and so svp will be NULL. If this is the case,
6166 we should not panic. Instead, nothing needs doing, so return. */
6167 if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6168 return;
6169 Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6170 (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6171 }
6172
6173 if (SvTYPE(*svp) == SVt_PVAV) {
6174#ifdef DEBUGGING
6175 int count = 1;
6176#endif
6177 AV * const av = (AV*)*svp;
6178 SSize_t fill;
6179 assert(!SvIS_FREED(av));
6180 fill = AvFILLp(av);
6181 assert(fill > -1);
6182 svp = AvARRAY(av);
6183 /* for an SV with N weak references to it, if all those
6184 * weak refs are deleted, then sv_del_backref will be called
6185 * N times and O(N^2) compares will be done within the backref
6186 * array. To ameliorate this potential slowness, we:
6187 * 1) make sure this code is as tight as possible;
6188 * 2) when looking for SV, look for it at both the head and tail of the
6189 * array first before searching the rest, since some create/destroy
6190 * patterns will cause the backrefs to be freed in order.
6191 */
6192 if (*svp == sv) {
6193 AvARRAY(av)++;
6194 AvMAX(av)--;
6195 }
6196 else {
6197 SV **p = &svp[fill];
6198 SV *const topsv = *p;
6199 if (topsv != sv) {
6200#ifdef DEBUGGING
6201 count = 0;
6202#endif
6203 while (--p > svp) {
6204 if (*p == sv) {
6205 /* We weren't the last entry.
6206 An unordered list has this property that you
6207 can take the last element off the end to fill
6208 the hole, and it's still an unordered list :-)
6209 */
6210 *p = topsv;
6211#ifdef DEBUGGING
6212 count++;
6213#else
6214 break; /* should only be one */
6215#endif
6216 }
6217 }
6218 }
6219 }
6220 assert(count ==1);
6221 AvFILLp(av) = fill-1;
6222 }
6223 else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6224 /* freed AV; skip */
6225 }
6226 else {
6227 /* optimisation: only a single backref, stored directly */
6228 if (*svp != sv)
6229 Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6230 (void*)*svp, (void*)sv);
6231 *svp = NULL;
6232 }
6233
6234}
6235
6236void
6237Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6238{
6239 SV **svp;
6240 SV **last;
6241 bool is_array;
6242
6243 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6244
6245 if (!av)
6246 return;
6247
6248 /* after multiple passes through Perl_sv_clean_all() for a thingy
6249 * that has badly leaked, the backref array may have gotten freed,
6250 * since we only protect it against 1 round of cleanup */
6251 if (SvIS_FREED(av)) {
6252 if (PL_in_clean_all) /* All is fair */
6253 return;
6254 Perl_croak(aTHX_
6255 "panic: magic_killbackrefs (freed backref AV/SV)");
6256 }
6257
6258
6259 is_array = (SvTYPE(av) == SVt_PVAV);
6260 if (is_array) {
6261 assert(!SvIS_FREED(av));
6262 svp = AvARRAY(av);
6263 if (svp)
6264 last = svp + AvFILLp(av);
6265 }
6266 else {
6267 /* optimisation: only a single backref, stored directly */
6268 svp = (SV**)&av;
6269 last = svp;
6270 }
6271
6272 if (svp) {
6273 while (svp <= last) {
6274 if (*svp) {
6275 SV *const referrer = *svp;
6276 if (SvWEAKREF(referrer)) {
6277 /* XXX Should we check that it hasn't changed? */
6278 assert(SvROK(referrer));
6279 SvRV_set(referrer, 0);
6280 SvOK_off(referrer);
6281 SvWEAKREF_off(referrer);
6282 SvSETMAGIC(referrer);
6283 } else if (SvTYPE(referrer) == SVt_PVGV ||
6284 SvTYPE(referrer) == SVt_PVLV) {
6285 assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6286 /* You lookin' at me? */
6287 assert(GvSTASH(referrer));
6288 assert(GvSTASH(referrer) == (const HV *)sv);
6289 GvSTASH(referrer) = 0;
6290 } else if (SvTYPE(referrer) == SVt_PVCV ||
6291 SvTYPE(referrer) == SVt_PVFM) {
6292 if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6293 /* You lookin' at me? */
6294 assert(CvSTASH(referrer));
6295 assert(CvSTASH(referrer) == (const HV *)sv);
6296 SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6297 }
6298 else {
6299 assert(SvTYPE(sv) == SVt_PVGV);
6300 /* You lookin' at me? */
6301 assert(CvGV(referrer));
6302 assert(CvGV(referrer) == (const GV *)sv);
6303 anonymise_cv_maybe(MUTABLE_GV(sv),
6304 MUTABLE_CV(referrer));
6305 }
6306
6307 } else {
6308 Perl_croak(aTHX_
6309 "panic: magic_killbackrefs (flags=%" UVxf ")",
6310 (UV)SvFLAGS(referrer));
6311 }
6312
6313 if (is_array)
6314 *svp = NULL;
6315 }
6316 svp++;
6317 }
6318 }
6319 if (is_array) {
6320 AvFILLp(av) = -1;
6321 SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6322 }
6323 return;
6324}
6325
6326/*
6327=for apidoc sv_insert
6328
6329Inserts a string at the specified offset/length within the SV. Similar to
6330the Perl C<substr()> function. Handles get magic.
6331
6332=for apidoc sv_insert_flags
6333
6334Same as C<sv_insert>, but the extra C<flags> are passed to the
6335C<SvPV_force_flags> that applies to C<bigstr>.
6336
6337=cut
6338*/
6339
6340void
6341Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6342{
6343 char *big;
6344 char *mid;
6345 char *midend;
6346 char *bigend;
6347 SSize_t i; /* better be sizeof(STRLEN) or bad things happen */
6348 STRLEN curlen;
6349
6350 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6351
6352 SvPV_force_flags(bigstr, curlen, flags);
6353 (void)SvPOK_only_UTF8(bigstr);
6354
6355 if (little >= SvPVX(bigstr) &&
6356 little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6357 /* little is a pointer to within bigstr, since we can reallocate bigstr,
6358 or little...little+littlelen might overlap offset...offset+len we make a copy
6359 */
6360 little = savepvn(little, littlelen);
6361 SAVEFREEPV(little);
6362 }
6363
6364 if (offset + len > curlen) {
6365 SvGROW(bigstr, offset+len+1);
6366 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6367 SvCUR_set(bigstr, offset+len);
6368 }
6369
6370 SvTAINT(bigstr);
6371 i = littlelen - len;
6372 if (i > 0) { /* string might grow */
6373 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6374 mid = big + offset + len;
6375 midend = bigend = big + SvCUR(bigstr);
6376 bigend += i;
6377 *bigend = '\0';
6378 while (midend > mid) /* shove everything down */
6379 *--bigend = *--midend;
6380 Move(little,big+offset,littlelen,char);
6381 SvCUR_set(bigstr, SvCUR(bigstr) + i);
6382 SvSETMAGIC(bigstr);
6383 return;
6384 }
6385 else if (i == 0) {
6386 Move(little,SvPVX(bigstr)+offset,len,char);
6387 SvSETMAGIC(bigstr);
6388 return;
6389 }
6390
6391 big = SvPVX(bigstr);
6392 mid = big + offset;
6393 midend = mid + len;
6394 bigend = big + SvCUR(bigstr);
6395
6396 if (midend > bigend)
6397 Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6398 midend, bigend);
6399
6400 if (mid - big > bigend - midend) { /* faster to shorten from end */
6401 if (littlelen) {
6402 Move(little, mid, littlelen,char);
6403 mid += littlelen;
6404 }
6405 i = bigend - midend;
6406 if (i > 0) {
6407 Move(midend, mid, i,char);
6408 mid += i;
6409 }
6410 *mid = '\0';
6411 SvCUR_set(bigstr, mid - big);
6412 }
6413 else if ((i = mid - big)) { /* faster from front */
6414 midend -= littlelen;
6415 mid = midend;
6416 Move(big, midend - i, i, char);
6417 sv_chop(bigstr,midend-i);
6418 if (littlelen)
6419 Move(little, mid, littlelen,char);
6420 }
6421 else if (littlelen) {
6422 midend -= littlelen;
6423 sv_chop(bigstr,midend);
6424 Move(little,midend,littlelen,char);
6425 }
6426 else {
6427 sv_chop(bigstr,midend);
6428 }
6429 SvSETMAGIC(bigstr);
6430}
6431
6432/*
6433=for apidoc sv_replace
6434
6435Make the first argument a copy of the second, then delete the original.
6436The target SV physically takes over ownership of the body of the source SV
6437and inherits its flags; however, the target keeps any magic it owns,
6438and any magic in the source is discarded.
6439Note that this is a rather specialist SV copying operation; most of the
6440time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6441
6442=cut
6443*/
6444
6445void
6446Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6447{
6448 const U32 refcnt = SvREFCNT(sv);
6449
6450 PERL_ARGS_ASSERT_SV_REPLACE;
6451
6452 SV_CHECK_THINKFIRST_COW_DROP(sv);
6453 if (SvREFCNT(nsv) != 1) {
6454 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6455 " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6456 }
6457 if (SvMAGICAL(sv)) {
6458 if (SvMAGICAL(nsv))
6459 mg_free(nsv);
6460 else
6461 sv_upgrade(nsv, SVt_PVMG);
6462 SvMAGIC_set(nsv, SvMAGIC(sv));
6463 SvFLAGS(nsv) |= SvMAGICAL(sv);
6464 SvMAGICAL_off(sv);
6465 SvMAGIC_set(sv, NULL);
6466 }
6467 SvREFCNT(sv) = 0;
6468 sv_clear(sv);
6469 assert(!SvREFCNT(sv));
6470#ifdef DEBUG_LEAKING_SCALARS
6471 sv->sv_flags = nsv->sv_flags;
6472 sv->sv_any = nsv->sv_any;
6473 sv->sv_refcnt = nsv->sv_refcnt;
6474 sv->sv_u = nsv->sv_u;
6475#else
6476 StructCopy(nsv,sv,SV);
6477#endif
6478 if(SvTYPE(sv) == SVt_IV) {
6479 SET_SVANY_FOR_BODYLESS_IV(sv);
6480 }
6481
6482
6483 SvREFCNT(sv) = refcnt;
6484 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
6485 SvREFCNT(nsv) = 0;
6486 del_SV(nsv);
6487}
6488
6489/* We're about to free a GV which has a CV that refers back to us.
6490 * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6491 * field) */
6492
6493STATIC void
6494S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6495{
6496 SV *gvname;
6497 GV *anongv;
6498
6499 PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6500
6501 /* be assertive! */
6502 assert(SvREFCNT(gv) == 0);
6503 assert(isGV(gv) && isGV_with_GP(gv));
6504 assert(GvGP(gv));
6505 assert(!CvANON(cv));
6506 assert(CvGV(cv) == gv);
6507 assert(!CvNAMED(cv));
6508
6509 /* will the CV shortly be freed by gp_free() ? */
6510 if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6511 SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6512 return;
6513 }
6514
6515 /* if not, anonymise: */
6516 gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6517 ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6518 : newSVpvn_flags( "__ANON__", 8, 0 );
6519 sv_catpvs(gvname, "::__ANON__");
6520 anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6521 SvREFCNT_dec_NN(gvname);
6522
6523 CvANON_on(cv);
6524 CvCVGV_RC_on(cv);
6525 SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6526}
6527
6528
6529/*
6530=for apidoc sv_clear
6531
6532Clear an SV: call any destructors, free up any memory used by the body,
6533and free the body itself. The SV's head is I<not> freed, although
6534its type is set to all 1's so that it won't inadvertently be assumed
6535to be live during global destruction etc.
6536This function should only be called when C<REFCNT> is zero. Most of the time
6537you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6538instead.
6539
6540=cut
6541*/
6542
6543void
6544Perl_sv_clear(pTHX_ SV *const orig_sv)
6545{
6546 dVAR;
6547 HV *stash;
6548 U32 type;
6549 const struct body_details *sv_type_details;
6550 SV* iter_sv = NULL;
6551 SV* next_sv = NULL;
6552 SV *sv = orig_sv;
6553 STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6554 Not strictly necessary */
6555
6556 PERL_ARGS_ASSERT_SV_CLEAR;
6557
6558 /* within this loop, sv is the SV currently being freed, and
6559 * iter_sv is the most recent AV or whatever that's being iterated
6560 * over to provide more SVs */
6561
6562 while (sv) {
6563
6564 type = SvTYPE(sv);
6565
6566 assert(SvREFCNT(sv) == 0);
6567 assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6568
6569 if (type <= SVt_IV) {
6570 /* See the comment in sv.h about the collusion between this
6571 * early return and the overloading of the NULL slots in the
6572 * size table. */
6573 if (SvROK(sv))
6574 goto free_rv;
6575 SvFLAGS(sv) &= SVf_BREAK;
6576 SvFLAGS(sv) |= SVTYPEMASK;
6577 goto free_head;
6578 }
6579
6580 /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6581 for another purpose */
6582 assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6583
6584 if (type >= SVt_PVMG) {
6585 if (SvOBJECT(sv)) {
6586 if (!curse(sv, 1)) goto get_next_sv;
6587 type = SvTYPE(sv); /* destructor may have changed it */
6588 }
6589 /* Free back-references before magic, in case the magic calls
6590 * Perl code that has weak references to sv. */
6591 if (type == SVt_PVHV) {
6592 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6593 if (SvMAGIC(sv))
6594 mg_free(sv);
6595 }
6596 else if (SvMAGIC(sv)) {
6597 /* Free back-references before other types of magic. */
6598 sv_unmagic(sv, PERL_MAGIC_backref);
6599 mg_free(sv);
6600 }
6601 SvMAGICAL_off(sv);
6602 }
6603 switch (type) {
6604 /* case SVt_INVLIST: */
6605 case SVt_PVIO:
6606 if (IoIFP(sv) &&
6607 IoIFP(sv) != PerlIO_stdin() &&
6608 IoIFP(sv) != PerlIO_stdout() &&
6609 IoIFP(sv) != PerlIO_stderr() &&
6610 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6611 {
6612 io_close(MUTABLE_IO(sv), NULL, FALSE,
6613 (IoTYPE(sv) == IoTYPE_WRONLY ||
6614 IoTYPE(sv) == IoTYPE_RDWR ||
6615 IoTYPE(sv) == IoTYPE_APPEND));
6616 }
6617 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6618 PerlDir_close(IoDIRP(sv));
6619 IoDIRP(sv) = (DIR*)NULL;
6620 Safefree(IoTOP_NAME(sv));
6621 Safefree(IoFMT_NAME(sv));
6622 Safefree(IoBOTTOM_NAME(sv));
6623 if ((const GV *)sv == PL_statgv)
6624 PL_statgv = NULL;
6625 goto freescalar;
6626 case SVt_REGEXP:
6627 /* FIXME for plugins */
6628 freeregexp:
6629 pregfree2((REGEXP*) sv);
6630 goto freescalar;
6631 case SVt_PVCV:
6632 case SVt_PVFM:
6633 cv_undef(MUTABLE_CV(sv));
6634 /* If we're in a stash, we don't own a reference to it.
6635 * However it does have a back reference to us, which needs to
6636 * be cleared. */
6637 if ((stash = CvSTASH(sv)))
6638 sv_del_backref(MUTABLE_SV(stash), sv);
6639 goto freescalar;
6640 case SVt_PVHV:
6641 if (PL_last_swash_hv == (const HV *)sv) {
6642 PL_last_swash_hv = NULL;
6643 }
6644 if (HvTOTALKEYS((HV*)sv) > 0) {
6645 const HEK *hek;
6646 /* this statement should match the one at the beginning of
6647 * hv_undef_flags() */
6648 if ( PL_phase != PERL_PHASE_DESTRUCT
6649 && (hek = HvNAME_HEK((HV*)sv)))
6650 {
6651 if (PL_stashcache) {
6652 DEBUG_o(Perl_deb(aTHX_
6653 "sv_clear clearing PL_stashcache for '%" HEKf
6654 "'\n",
6655 HEKfARG(hek)));
6656 (void)hv_deletehek(PL_stashcache,
6657 hek, G_DISCARD);
6658 }
6659 hv_name_set((HV*)sv, NULL, 0, 0);
6660 }
6661
6662 /* save old iter_sv in unused SvSTASH field */
6663 assert(!SvOBJECT(sv));
6664 SvSTASH(sv) = (HV*)iter_sv;
6665 iter_sv = sv;
6666
6667 /* save old hash_index in unused SvMAGIC field */
6668 assert(!SvMAGICAL(sv));
6669 assert(!SvMAGIC(sv));
6670 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6671 hash_index = 0;
6672
6673 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6674 goto get_next_sv; /* process this new sv */
6675 }
6676 /* free empty hash */
6677 Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6678 assert(!HvARRAY((HV*)sv));
6679 break;
6680 case SVt_PVAV:
6681 {
6682 AV* av = MUTABLE_AV(sv);
6683 if (PL_comppad == av) {
6684 PL_comppad = NULL;
6685 PL_curpad = NULL;
6686 }
6687 if (AvREAL(av) && AvFILLp(av) > -1) {
6688 next_sv = AvARRAY(av)[AvFILLp(av)--];
6689 /* save old iter_sv in top-most slot of AV,
6690 * and pray that it doesn't get wiped in the meantime */
6691 AvARRAY(av)[AvMAX(av)] = iter_sv;
6692 iter_sv = sv;
6693 goto get_next_sv; /* process this new sv */
6694 }
6695 Safefree(AvALLOC(av));
6696 }
6697
6698 break;
6699 case SVt_PVLV:
6700 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6701 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6702 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6703 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6704 }
6705 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
6706 SvREFCNT_dec(LvTARG(sv));
6707 if (isREGEXP(sv)) goto freeregexp;
6708 /* FALLTHROUGH */
6709 case SVt_PVGV:
6710 if (isGV_with_GP(sv)) {
6711 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6712 && HvENAME_get(stash))
6713 mro_method_changed_in(stash);
6714 gp_free(MUTABLE_GV(sv));
6715 if (GvNAME_HEK(sv))
6716 unshare_hek(GvNAME_HEK(sv));
6717 /* If we're in a stash, we don't own a reference to it.
6718 * However it does have a back reference to us, which
6719 * needs to be cleared. */
6720 if ((stash = GvSTASH(sv)))
6721 sv_del_backref(MUTABLE_SV(stash), sv);
6722 }
6723 /* FIXME. There are probably more unreferenced pointers to SVs
6724 * in the interpreter struct that we should check and tidy in
6725 * a similar fashion to this: */
6726 /* See also S_sv_unglob, which does the same thing. */
6727 if ((const GV *)sv == PL_last_in_gv)
6728 PL_last_in_gv = NULL;
6729 else if ((const GV *)sv == PL_statgv)
6730 PL_statgv = NULL;
6731 else if ((const GV *)sv == PL_stderrgv)
6732 PL_stderrgv = NULL;
6733 /* FALLTHROUGH */
6734 case SVt_PVMG:
6735 case SVt_PVNV:
6736 case SVt_PVIV:
6737 case SVt_INVLIST:
6738 case SVt_PV:
6739 freescalar:
6740 /* Don't bother with SvOOK_off(sv); as we're only going to
6741 * free it. */
6742 if (SvOOK(sv)) {
6743 STRLEN offset;
6744 SvOOK_offset(sv, offset);
6745 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6746 /* Don't even bother with turning off the OOK flag. */
6747 }
6748 if (SvROK(sv)) {
6749 free_rv:
6750 {
6751 SV * const target = SvRV(sv);
6752 if (SvWEAKREF(sv))
6753 sv_del_backref(target, sv);
6754 else
6755 next_sv = target;
6756 }
6757 }
6758#ifdef PERL_ANY_COW
6759 else if (SvPVX_const(sv)
6760 && !(SvTYPE(sv) == SVt_PVIO
6761 && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6762 {
6763 if (SvIsCOW(sv)) {
6764 if (DEBUG_C_TEST) {
6765 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6766 sv_dump(sv);
6767 }
6768 if (SvLEN(sv)) {
6769 if (CowREFCNT(sv)) {
6770 sv_buf_to_rw(sv);
6771 CowREFCNT(sv)--;
6772 sv_buf_to_ro(sv);
6773 SvLEN_set(sv, 0);
6774 }
6775 } else {
6776 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6777 }
6778
6779 }
6780 if (SvLEN(sv)) {
6781 Safefree(SvPVX_mutable(sv));
6782 }
6783 }
6784#else
6785 else if (SvPVX_const(sv) && SvLEN(sv)
6786 && !(SvTYPE(sv) == SVt_PVIO
6787 && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6788 Safefree(SvPVX_mutable(sv));
6789 else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6790 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6791 }
6792#endif
6793 break;
6794 case SVt_NV:
6795 break;
6796 }
6797
6798 free_body:
6799
6800 SvFLAGS(sv) &= SVf_BREAK;
6801 SvFLAGS(sv) |= SVTYPEMASK;
6802
6803 sv_type_details = bodies_by_type + type;
6804 if (sv_type_details->arena) {
6805 del_body(((char *)SvANY(sv) + sv_type_details->offset),
6806 &PL_body_roots[type]);
6807 }
6808 else if (sv_type_details->body_size) {
6809 safefree(SvANY(sv));
6810 }
6811
6812 free_head:
6813 /* caller is responsible for freeing the head of the original sv */
6814 if (sv != orig_sv && !SvREFCNT(sv))
6815 del_SV(sv);
6816
6817 /* grab and free next sv, if any */
6818 get_next_sv:
6819 while (1) {
6820 sv = NULL;
6821 if (next_sv) {
6822 sv = next_sv;
6823 next_sv = NULL;
6824 }
6825 else if (!iter_sv) {
6826 break;
6827 } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6828 AV *const av = (AV*)iter_sv;
6829 if (AvFILLp(av) > -1) {
6830 sv = AvARRAY(av)[AvFILLp(av)--];
6831 }
6832 else { /* no more elements of current AV to free */
6833 sv = iter_sv;
6834 type = SvTYPE(sv);
6835 /* restore previous value, squirrelled away */
6836 iter_sv = AvARRAY(av)[AvMAX(av)];
6837 Safefree(AvALLOC(av));
6838 goto free_body;
6839 }
6840 } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6841 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6842 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6843 /* no more elements of current HV to free */
6844 sv = iter_sv;
6845 type = SvTYPE(sv);
6846 /* Restore previous values of iter_sv and hash_index,
6847 * squirrelled away */
6848 assert(!SvOBJECT(sv));
6849 iter_sv = (SV*)SvSTASH(sv);
6850 assert(!SvMAGICAL(sv));
6851 hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6852#ifdef DEBUGGING
6853 /* perl -DA does not like rubbish in SvMAGIC. */
6854 SvMAGIC_set(sv, 0);
6855#endif
6856
6857 /* free any remaining detritus from the hash struct */
6858 Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6859 assert(!HvARRAY((HV*)sv));
6860 goto free_body;
6861 }
6862 }
6863
6864 /* unrolled SvREFCNT_dec and sv_free2 follows: */
6865
6866 if (!sv)
6867 continue;
6868 if (!SvREFCNT(sv)) {
6869 sv_free(sv);
6870 continue;
6871 }
6872 if (--(SvREFCNT(sv)))
6873 continue;
6874#ifdef DEBUGGING
6875 if (SvTEMP(sv)) {
6876 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6877 "Attempt to free temp prematurely: SV 0x%" UVxf
6878 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6879 continue;
6880 }
6881#endif
6882 if (SvIMMORTAL(sv)) {
6883 /* make sure SvREFCNT(sv)==0 happens very seldom */
6884 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6885 continue;
6886 }
6887 break;
6888 } /* while 1 */
6889
6890 } /* while sv */
6891}
6892
6893/* This routine curses the sv itself, not the object referenced by sv. So
6894 sv does not have to be ROK. */
6895
6896static bool
6897S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6898 PERL_ARGS_ASSERT_CURSE;
6899 assert(SvOBJECT(sv));
6900
6901 if (PL_defstash && /* Still have a symbol table? */
6902 SvDESTROYABLE(sv))
6903 {
6904 dSP;
6905 HV* stash;
6906 do {
6907 stash = SvSTASH(sv);
6908 assert(SvTYPE(stash) == SVt_PVHV);
6909 if (HvNAME(stash)) {
6910 CV* destructor = NULL;
6911 struct mro_meta *meta;
6912
6913 assert (SvOOK(stash));
6914
6915 DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6916 HvNAME(stash)) );
6917
6918 /* don't make this an initialization above the assert, since it needs
6919 an AUX structure */
6920 meta = HvMROMETA(stash);
6921 if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6922 destructor = meta->destroy;
6923 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6924 (void *)destructor, HvNAME(stash)) );
6925 }
6926 else {
6927 bool autoload = FALSE;
6928 GV *gv =
6929 gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6930 if (gv)
6931 destructor = GvCV(gv);
6932 if (!destructor) {
6933 gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6934 GV_AUTOLOAD_ISMETHOD);
6935 if (gv)
6936 destructor = GvCV(gv);
6937 if (destructor)
6938 autoload = TRUE;
6939 }
6940 /* we don't cache AUTOLOAD for DESTROY, since this code
6941 would then need to set $__PACKAGE__::AUTOLOAD, or the
6942 equivalent for XS AUTOLOADs */
6943 if (!autoload) {
6944 meta->destroy_gen = PL_sub_generation;
6945 meta->destroy = destructor;
6946
6947 DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6948 (void *)destructor, HvNAME(stash)) );
6949 }
6950 else {
6951 DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6952 HvNAME(stash)) );
6953 }
6954 }
6955 assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6956 if (destructor
6957 /* A constant subroutine can have no side effects, so
6958 don't bother calling it. */
6959 && !CvCONST(destructor)
6960 /* Don't bother calling an empty destructor or one that
6961 returns immediately. */
6962 && (CvISXSUB(destructor)
6963 || (CvSTART(destructor)
6964 && (CvSTART(destructor)->op_next->op_type
6965 != OP_LEAVESUB)
6966 && (CvSTART(destructor)->op_next->op_type
6967 != OP_PUSHMARK
6968 || CvSTART(destructor)->op_next->op_next->op_type
6969 != OP_RETURN
6970 )
6971 ))
6972 )
6973 {
6974 SV* const tmpref = newRV(sv);
6975 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6976 ENTER;
6977 PUSHSTACKi(PERLSI_DESTROY);
6978 EXTEND(SP, 2);
6979 PUSHMARK(SP);
6980 PUSHs(tmpref);
6981 PUTBACK;
6982 call_sv(MUTABLE_SV(destructor),
6983 G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6984 POPSTACK;
6985 SPAGAIN;
6986 LEAVE;
6987 if(SvREFCNT(tmpref) < 2) {
6988 /* tmpref is not kept alive! */
6989 SvREFCNT(sv)--;
6990 SvRV_set(tmpref, NULL);
6991 SvROK_off(tmpref);
6992 }
6993 SvREFCNT_dec_NN(tmpref);
6994 }
6995 }
6996 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6997
6998
6999 if (check_refcnt && SvREFCNT(sv)) {
7000 if (PL_in_clean_objs)
7001 Perl_croak(aTHX_
7002 "DESTROY created new reference to dead object '%" HEKf "'",
7003 HEKfARG(HvNAME_HEK(stash)));
7004 /* DESTROY gave object new lease on life */
7005 return FALSE;
7006 }
7007 }
7008
7009 if (SvOBJECT(sv)) {
7010 HV * const stash = SvSTASH(sv);
7011 /* Curse before freeing the stash, as freeing the stash could cause
7012 a recursive call into S_curse. */
7013 SvOBJECT_off(sv); /* Curse the object. */
7014 SvSTASH_set(sv,0); /* SvREFCNT_dec may try to read this */
7015 SvREFCNT_dec(stash); /* possibly of changed persuasion */
7016 }
7017 return TRUE;
7018}
7019
7020/*
7021=for apidoc sv_newref
7022
7023Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
7024instead.
7025
7026=cut
7027*/
7028
7029SV *
7030Perl_sv_newref(pTHX_ SV *const sv)
7031{
7032 PERL_UNUSED_CONTEXT;
7033 if (sv)
7034 (SvREFCNT(sv))++;
7035 return sv;
7036}
7037
7038/*
7039=for apidoc sv_free
7040
7041Decrement an SV's reference count, and if it drops to zero, call
7042C<sv_clear> to invoke destructors and free up any memory used by
7043the body; finally, deallocating the SV's head itself.
7044Normally called via a wrapper macro C<SvREFCNT_dec>.
7045
7046=cut
7047*/
7048
7049void
7050Perl_sv_free(pTHX_ SV *const sv)
7051{
7052 SvREFCNT_dec(sv);
7053}
7054
7055
7056/* Private helper function for SvREFCNT_dec().
7057 * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7058
7059void
7060Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7061{
7062 dVAR;
7063
7064 PERL_ARGS_ASSERT_SV_FREE2;
7065
7066 if (LIKELY( rc == 1 )) {
7067 /* normal case */
7068 SvREFCNT(sv) = 0;
7069
7070#ifdef DEBUGGING
7071 if (SvTEMP(sv)) {
7072 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7073 "Attempt to free temp prematurely: SV 0x%" UVxf
7074 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7075 return;
7076 }
7077#endif
7078 if (SvIMMORTAL(sv)) {
7079 /* make sure SvREFCNT(sv)==0 happens very seldom */
7080 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7081 return;
7082 }
7083 sv_clear(sv);
7084 if (! SvREFCNT(sv)) /* may have have been resurrected */
7085 del_SV(sv);
7086 return;
7087 }
7088
7089 /* handle exceptional cases */
7090
7091 assert(rc == 0);
7092
7093 if (SvFLAGS(sv) & SVf_BREAK)
7094 /* this SV's refcnt has been artificially decremented to
7095 * trigger cleanup */
7096 return;
7097 if (PL_in_clean_all) /* All is fair */
7098 return;
7099 if (SvIMMORTAL(sv)) {
7100 /* make sure SvREFCNT(sv)==0 happens very seldom */
7101 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7102 return;
7103 }
7104 if (ckWARN_d(WARN_INTERNAL)) {
7105#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7106 Perl_dump_sv_child(aTHX_ sv);
7107#else
7108 #ifdef DEBUG_LEAKING_SCALARS
7109 sv_dump(sv);
7110 #endif
7111#ifdef DEBUG_LEAKING_SCALARS_ABORT
7112 if (PL_warnhook == PERL_WARNHOOK_FATAL
7113 || ckDEAD(packWARN(WARN_INTERNAL))) {
7114 /* Don't let Perl_warner cause us to escape our fate: */
7115 abort();
7116 }
7117#endif
7118 /* This may not return: */
7119 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7120 "Attempt to free unreferenced scalar: SV 0x%" UVxf
7121 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7122#endif
7123 }
7124#ifdef DEBUG_LEAKING_SCALARS_ABORT
7125 abort();
7126#endif
7127
7128}
7129
7130
7131/*
7132=for apidoc sv_len
7133
7134Returns the length of the string in the SV. Handles magic and type
7135coercion and sets the UTF8 flag appropriately. See also C<L</SvCUR>>, which
7136gives raw access to the C<xpv_cur> slot.
7137
7138=cut
7139*/
7140
7141STRLEN
7142Perl_sv_len(pTHX_ SV *const sv)
7143{
7144 STRLEN len;
7145
7146 if (!sv)
7147 return 0;
7148
7149 (void)SvPV_const(sv, len);
7150 return len;
7151}
7152
7153/*
7154=for apidoc sv_len_utf8
7155
7156Returns the number of characters in the string in an SV, counting wide
7157UTF-8 bytes as a single character. Handles magic and type coercion.
7158
7159=cut
7160*/
7161
7162/*
7163 * The length is cached in PERL_MAGIC_utf8, in the mg_len field. Also the
7164 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7165 * (Note that the mg_len is not the length of the mg_ptr field.
7166 * This allows the cache to store the character length of the string without
7167 * needing to malloc() extra storage to attach to the mg_ptr.)
7168 *
7169 */
7170
7171STRLEN
7172Perl_sv_len_utf8(pTHX_ SV *const sv)
7173{
7174 if (!sv)
7175 return 0;
7176
7177 SvGETMAGIC(sv);
7178 return sv_len_utf8_nomg(sv);
7179}
7180
7181STRLEN
7182Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7183{
7184 STRLEN len;
7185 const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7186
7187 PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7188
7189 if (PL_utf8cache && SvUTF8(sv)) {
7190 STRLEN ulen;
7191 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7192
7193 if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7194 if (mg->mg_len != -1)
7195 ulen = mg->mg_len;
7196 else {
7197 /* We can use the offset cache for a headstart.
7198 The longer value is stored in the first pair. */
7199 STRLEN *cache = (STRLEN *) mg->mg_ptr;
7200
7201 ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7202 s + len);
7203 }
7204
7205 if (PL_utf8cache < 0) {
7206 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7207 assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7208 }
7209 }
7210 else {
7211 ulen = Perl_utf8_length(aTHX_ s, s + len);
7212 utf8_mg_len_cache_update(sv, &mg, ulen);
7213 }
7214 return ulen;
7215 }
7216 return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7217}
7218
7219/* Walk forwards to find the byte corresponding to the passed in UTF-8
7220 offset. */
7221static STRLEN
7222S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7223 STRLEN *const uoffset_p, bool *const at_end)
7224{
7225 const U8 *s = start;
7226 STRLEN uoffset = *uoffset_p;
7227
7228 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7229
7230 while (s < send && uoffset) {
7231 --uoffset;
7232 s += UTF8SKIP(s);
7233 }
7234 if (s == send) {
7235 *at_end = TRUE;
7236 }
7237 else if (s > send) {
7238 *at_end = TRUE;
7239 /* This is the existing behaviour. Possibly it should be a croak, as
7240 it's actually a bounds error */
7241 s = send;
7242 }
7243 *uoffset_p -= uoffset;
7244 return s - start;
7245}
7246
7247/* Given the length of the string in both bytes and UTF-8 characters, decide
7248 whether to walk forwards or backwards to find the byte corresponding to
7249 the passed in UTF-8 offset. */
7250static STRLEN
7251S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7252 STRLEN uoffset, const STRLEN uend)
7253{
7254 STRLEN backw = uend - uoffset;
7255
7256 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7257
7258 if (uoffset < 2 * backw) {
7259 /* The assumption is that going forwards is twice the speed of going
7260 forward (that's where the 2 * backw comes from).
7261 (The real figure of course depends on the UTF-8 data.) */
7262 const U8 *s = start;
7263
7264 while (s < send && uoffset--)
7265 s += UTF8SKIP(s);
7266 assert (s <= send);
7267 if (s > send)
7268 s = send;
7269 return s - start;
7270 }
7271
7272 while (backw--) {
7273 send--;
7274 while (UTF8_IS_CONTINUATION(*send))
7275 send--;
7276 }
7277 return send - start;
7278}
7279
7280/* For the string representation of the given scalar, find the byte
7281 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
7282 give another position in the string, *before* the sought offset, which
7283 (which is always true, as 0, 0 is a valid pair of positions), which should
7284 help reduce the amount of linear searching.
7285 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7286 will be used to reduce the amount of linear searching. The cache will be
7287 created if necessary, and the found value offered to it for update. */
7288static STRLEN
7289S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7290 const U8 *const send, STRLEN uoffset,
7291 STRLEN uoffset0, STRLEN boffset0)
7292{
7293 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
7294 bool found = FALSE;
7295 bool at_end = FALSE;
7296
7297 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7298
7299 assert (uoffset >= uoffset0);
7300
7301 if (!uoffset)
7302 return 0;
7303
7304 if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7305 && PL_utf8cache
7306 && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7307 (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7308 if ((*mgp)->mg_ptr) {
7309 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7310 if (cache[0] == uoffset) {
7311 /* An exact match. */
7312 return cache[1];
7313 }
7314 if (cache[2] == uoffset) {
7315 /* An exact match. */
7316 return cache[3];
7317 }
7318
7319 if (cache[0] < uoffset) {
7320 /* The cache already knows part of the way. */
7321 if (cache[0] > uoffset0) {
7322 /* The cache knows more than the passed in pair */
7323 uoffset0 = cache[0];
7324 boffset0 = cache[1];
7325 }
7326 if ((*mgp)->mg_len != -1) {
7327 /* And we know the end too. */
7328 boffset = boffset0
7329 + sv_pos_u2b_midway(start + boffset0, send,
7330 uoffset - uoffset0,
7331 (*mgp)->mg_len - uoffset0);
7332 } else {
7333 uoffset -= uoffset0;
7334 boffset = boffset0
7335 + sv_pos_u2b_forwards(start + boffset0,
7336 send, &uoffset, &at_end);
7337 uoffset += uoffset0;
7338 }
7339 }
7340 else if (cache[2] < uoffset) {
7341 /* We're between the two cache entries. */
7342 if (cache[2] > uoffset0) {
7343 /* and the cache knows more than the passed in pair */
7344 uoffset0 = cache[2];
7345 boffset0 = cache[3];
7346 }
7347
7348 boffset = boffset0
7349 + sv_pos_u2b_midway(start + boffset0,
7350 start + cache[1],
7351 uoffset - uoffset0,
7352 cache[0] - uoffset0);
7353 } else {
7354 boffset = boffset0
7355 + sv_pos_u2b_midway(start + boffset0,
7356 start + cache[3],
7357 uoffset - uoffset0,
7358 cache[2] - uoffset0);
7359 }
7360 found = TRUE;
7361 }
7362 else if ((*mgp)->mg_len != -1) {
7363 /* If we can take advantage of a passed in offset, do so. */
7364 /* In fact, offset0 is either 0, or less than offset, so don't
7365 need to worry about the other possibility. */
7366 boffset = boffset0
7367 + sv_pos_u2b_midway(start + boffset0, send,
7368 uoffset - uoffset0,
7369 (*mgp)->mg_len - uoffset0);
7370 found = TRUE;
7371 }
7372 }
7373
7374 if (!found || PL_utf8cache < 0) {
7375 STRLEN real_boffset;
7376 uoffset -= uoffset0;
7377 real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7378 send, &uoffset, &at_end);
7379 uoffset += uoffset0;
7380
7381 if (found && PL_utf8cache < 0)
7382 assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7383 real_boffset, sv);
7384 boffset = real_boffset;
7385 }
7386
7387 if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7388 if (at_end)
7389 utf8_mg_len_cache_update(sv, mgp, uoffset);
7390 else
7391 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7392 }
7393 return boffset;
7394}
7395
7396
7397/*
7398=for apidoc sv_pos_u2b_flags
7399
7400Converts the offset from a count of UTF-8 chars from
7401the start of the string, to a count of the equivalent number of bytes; if
7402C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7403C<offset>, rather than from the start
7404of the string. Handles type coercion.
7405C<flags> is passed to C<SvPV_flags>, and usually should be
7406C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7407
7408=cut
7409*/
7410
7411/*
7412 * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7413 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7414 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
7415 *
7416 */
7417
7418STRLEN
7419Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7420 U32 flags)
7421{
7422 const U8 *start;
7423 STRLEN len;
7424 STRLEN boffset;
7425
7426 PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7427
7428 start = (U8*)SvPV_flags(sv, len, flags);
7429 if (len) {
7430 const U8 * const send = start + len;
7431 MAGIC *mg = NULL;
7432 boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7433
7434 if (lenp
7435 && *lenp /* don't bother doing work for 0, as its bytes equivalent
7436 is 0, and *lenp is already set to that. */) {
7437 /* Convert the relative offset to absolute. */
7438 const STRLEN uoffset2 = uoffset + *lenp;
7439 const STRLEN boffset2
7440 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7441 uoffset, boffset) - boffset;
7442
7443 *lenp = boffset2;
7444 }
7445 } else {
7446 if (lenp)
7447 *lenp = 0;
7448 boffset = 0;
7449 }
7450
7451 return boffset;
7452}
7453
7454/*
7455=for apidoc sv_pos_u2b
7456
7457Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7458the start of the string, to a count of the equivalent number of bytes; if
7459C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7460the offset, rather than from the start of the string. Handles magic and
7461type coercion.
7462
7463Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7464than 2Gb.
7465
7466=cut
7467*/
7468
7469/*
7470 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7471 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7472 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
7473 *
7474 */
7475
7476/* This function is subject to size and sign problems */
7477
7478void
7479Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7480{
7481 PERL_ARGS_ASSERT_SV_POS_U2B;
7482
7483 if (lenp) {
7484 STRLEN ulen = (STRLEN)*lenp;
7485 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7486 SV_GMAGIC|SV_CONST_RETURN);
7487 *lenp = (I32)ulen;
7488 } else {
7489 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7490 SV_GMAGIC|SV_CONST_RETURN);
7491 }
7492}
7493
7494static void
7495S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7496 const STRLEN ulen)
7497{
7498 PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7499 if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7500 return;
7501
7502 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7503 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7504 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7505 }
7506 assert(*mgp);
7507
7508 (*mgp)->mg_len = ulen;
7509}
7510
7511/* Create and update the UTF8 magic offset cache, with the proffered utf8/
7512 byte length pairing. The (byte) length of the total SV is passed in too,
7513 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7514 may not have updated SvCUR, so we can't rely on reading it directly.
7515
7516 The proffered utf8/byte length pairing isn't used if the cache already has
7517 two pairs, and swapping either for the proffered pair would increase the
7518 RMS of the intervals between known byte offsets.
7519
7520 The cache itself consists of 4 STRLEN values
7521 0: larger UTF-8 offset
7522 1: corresponding byte offset
7523 2: smaller UTF-8 offset
7524 3: corresponding byte offset
7525
7526 Unused cache pairs have the value 0, 0.
7527 Keeping the cache "backwards" means that the invariant of
7528 cache[0] >= cache[2] is maintained even with empty slots, which means that
7529 the code that uses it doesn't need to worry if only 1 entry has actually
7530 been set to non-zero. It also makes the "position beyond the end of the
7531 cache" logic much simpler, as the first slot is always the one to start
7532 from.
7533*/
7534static void
7535S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7536 const STRLEN utf8, const STRLEN blen)
7537{
7538 STRLEN *cache;
7539
7540 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7541
7542 if (SvREADONLY(sv))
7543 return;
7544
7545 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7546 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7547 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7548 0);
7549 (*mgp)->mg_len = -1;
7550 }
7551 assert(*mgp);
7552
7553 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7554 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7555 (*mgp)->mg_ptr = (char *) cache;
7556 }
7557 assert(cache);
7558
7559 if (PL_utf8cache < 0 && SvPOKp(sv)) {
7560 /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7561 a pointer. Note that we no longer cache utf8 offsets on refer-
7562 ences, but this check is still a good idea, for robustness. */
7563 const U8 *start = (const U8 *) SvPVX_const(sv);
7564 const STRLEN realutf8 = utf8_length(start, start + byte);
7565
7566 assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7567 sv);
7568 }
7569
7570 /* Cache is held with the later position first, to simplify the code
7571 that deals with unbounded ends. */
7572
7573 ASSERT_UTF8_CACHE(cache);
7574 if (cache[1] == 0) {
7575 /* Cache is totally empty */
7576 cache[0] = utf8;
7577 cache[1] = byte;
7578 } else if (cache[3] == 0) {
7579 if (byte > cache[1]) {
7580 /* New one is larger, so goes first. */
7581 cache[2] = cache[0];
7582 cache[3] = cache[1];
7583 cache[0] = utf8;
7584 cache[1] = byte;
7585 } else {
7586 cache[2] = utf8;
7587 cache[3] = byte;
7588 }
7589 } else {
7590/* float casts necessary? XXX */
7591#define THREEWAY_SQUARE(a,b,c,d) \
7592 ((float)((d) - (c))) * ((float)((d) - (c))) \
7593 + ((float)((c) - (b))) * ((float)((c) - (b))) \
7594 + ((float)((b) - (a))) * ((float)((b) - (a)))
7595
7596 /* Cache has 2 slots in use, and we know three potential pairs.
7597 Keep the two that give the lowest RMS distance. Do the
7598 calculation in bytes simply because we always know the byte
7599 length. squareroot has the same ordering as the positive value,
7600 so don't bother with the actual square root. */
7601 if (byte > cache[1]) {
7602 /* New position is after the existing pair of pairs. */
7603 const float keep_earlier
7604 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7605 const float keep_later
7606 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7607
7608 if (keep_later < keep_earlier) {
7609 cache[2] = cache[0];
7610 cache[3] = cache[1];
7611 }
7612 cache[0] = utf8;
7613 cache[1] = byte;
7614 }
7615 else {
7616 const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7617 float b, c, keep_earlier;
7618 if (byte > cache[3]) {
7619 /* New position is between the existing pair of pairs. */
7620 b = (float)cache[3];
7621 c = (float)byte;
7622 } else {
7623 /* New position is before the existing pair of pairs. */
7624 b = (float)byte;
7625 c = (float)cache[3];
7626 }
7627 keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7628 if (byte > cache[3]) {
7629 if (keep_later < keep_earlier) {
7630 cache[2] = utf8;
7631 cache[3] = byte;
7632 }
7633 else {
7634 cache[0] = utf8;
7635 cache[1] = byte;
7636 }
7637 }
7638 else {
7639 if (! (keep_later < keep_earlier)) {
7640 cache[0] = cache[2];
7641 cache[1] = cache[3];
7642 }
7643 cache[2] = utf8;
7644 cache[3] = byte;
7645 }
7646 }
7647 }
7648 ASSERT_UTF8_CACHE(cache);
7649}
7650
7651/* We already know all of the way, now we may be able to walk back. The same
7652 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7653 backward is half the speed of walking forward. */
7654static STRLEN
7655S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7656 const U8 *end, STRLEN endu)
7657{
7658 const STRLEN forw = target - s;
7659 STRLEN backw = end - target;
7660
7661 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7662
7663 if (forw < 2 * backw) {
7664 return utf8_length(s, target);
7665 }
7666
7667 while (end > target) {
7668 end--;
7669 while (UTF8_IS_CONTINUATION(*end)) {
7670 end--;
7671 }
7672 endu--;
7673 }
7674 return endu;
7675}
7676
7677/*
7678=for apidoc sv_pos_b2u_flags
7679
7680Converts C<offset> from a count of bytes from the start of the string, to
7681a count of the equivalent number of UTF-8 chars. Handles type coercion.
7682C<flags> is passed to C<SvPV_flags>, and usually should be
7683C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7684
7685=cut
7686*/
7687
7688/*
7689 * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7690 * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7691 * and byte offsets.
7692 *
7693 */
7694STRLEN
7695Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7696{
7697 const U8* s;
7698 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
7699 STRLEN blen;
7700 MAGIC* mg = NULL;
7701 const U8* send;
7702 bool found = FALSE;
7703
7704 PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7705
7706 s = (const U8*)SvPV_flags(sv, blen, flags);
7707
7708 if (blen < offset)
7709 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7710 ", byte=%" UVuf, (UV)blen, (UV)offset);
7711
7712 send = s + offset;
7713
7714 if (!SvREADONLY(sv)
7715 && PL_utf8cache
7716 && SvTYPE(sv) >= SVt_PVMG
7717 && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7718 {
7719 if (mg->mg_ptr) {
7720 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7721 if (cache[1] == offset) {
7722 /* An exact match. */
7723 return cache[0];
7724 }
7725 if (cache[3] == offset) {
7726 /* An exact match. */
7727 return cache[2];
7728 }
7729
7730 if (cache[1] < offset) {
7731 /* We already know part of the way. */
7732 if (mg->mg_len != -1) {
7733 /* Actually, we know the end too. */
7734 len = cache[0]
7735 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7736 s + blen, mg->mg_len - cache[0]);
7737 } else {
7738 len = cache[0] + utf8_length(s + cache[1], send);
7739 }
7740 }
7741 else if (cache[3] < offset) {
7742 /* We're between the two cached pairs, so we do the calculation
7743 offset by the byte/utf-8 positions for the earlier pair,
7744 then add the utf-8 characters from the string start to
7745 there. */
7746 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7747 s + cache[1], cache[0] - cache[2])
7748 + cache[2];
7749
7750 }
7751 else { /* cache[3] > offset */
7752 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7753 cache[2]);
7754
7755 }
7756 ASSERT_UTF8_CACHE(cache);
7757 found = TRUE;
7758 } else if (mg->mg_len != -1) {
7759 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7760 found = TRUE;
7761 }
7762 }
7763 if (!found || PL_utf8cache < 0) {
7764 const STRLEN real_len = utf8_length(s, send);
7765
7766 if (found && PL_utf8cache < 0)
7767 assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7768 len = real_len;
7769 }
7770
7771 if (PL_utf8cache) {
7772 if (blen == offset)
7773 utf8_mg_len_cache_update(sv, &mg, len);
7774 else
7775 utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7776 }
7777
7778 return len;
7779}
7780
7781/*
7782=for apidoc sv_pos_b2u
7783
7784Converts the value pointed to by C<offsetp> from a count of bytes from the
7785start of the string, to a count of the equivalent number of UTF-8 chars.
7786Handles magic and type coercion.
7787
7788Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7789longer than 2Gb.
7790
7791=cut
7792*/
7793
7794/*
7795 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7796 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7797 * byte offsets.
7798 *
7799 */
7800void
7801Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7802{
7803 PERL_ARGS_ASSERT_SV_POS_B2U;
7804
7805 if (!sv)
7806 return;
7807
7808 *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7809 SV_GMAGIC|SV_CONST_RETURN);
7810}
7811
7812static void
7813S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7814 STRLEN real, SV *const sv)
7815{
7816 PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7817
7818 /* As this is debugging only code, save space by keeping this test here,
7819 rather than inlining it in all the callers. */
7820 if (from_cache == real)
7821 return;
7822
7823 /* Need to turn the assertions off otherwise we may recurse infinitely
7824 while printing error messages. */
7825 SAVEI8(PL_utf8cache);
7826 PL_utf8cache = 0;
7827 Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7828 func, (UV) from_cache, (UV) real, SVfARG(sv));
7829}
7830
7831/*
7832=for apidoc sv_eq
7833
7834Returns a boolean indicating whether the strings in the two SVs are
7835identical. Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7836coerce its args to strings if necessary.
7837
7838=for apidoc sv_eq_flags
7839
7840Returns a boolean indicating whether the strings in the two SVs are
7841identical. Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7842if necessary. If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7843
7844=cut
7845*/
7846
7847I32
7848Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7849{
7850 const char *pv1;
7851 STRLEN cur1;
7852 const char *pv2;
7853 STRLEN cur2;
7854 I32 eq = 0;
7855 SV* svrecode = NULL;
7856
7857 if (!sv1) {
7858 pv1 = "";
7859 cur1 = 0;
7860 }
7861 else {
7862 /* if pv1 and pv2 are the same, second SvPV_const call may
7863 * invalidate pv1 (if we are handling magic), so we may need to
7864 * make a copy */
7865 if (sv1 == sv2 && flags & SV_GMAGIC
7866 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7867 pv1 = SvPV_const(sv1, cur1);
7868 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7869 }
7870 pv1 = SvPV_flags_const(sv1, cur1, flags);
7871 }
7872
7873 if (!sv2){
7874 pv2 = "";
7875 cur2 = 0;
7876 }
7877 else
7878 pv2 = SvPV_flags_const(sv2, cur2, flags);
7879
7880 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7881 /* Differing utf8ness. */
7882 if (SvUTF8(sv1)) {
7883 /* sv1 is the UTF-8 one */
7884 return bytes_cmp_utf8((const U8*)pv2, cur2,
7885 (const U8*)pv1, cur1) == 0;
7886 }
7887 else {
7888 /* sv2 is the UTF-8 one */
7889 return bytes_cmp_utf8((const U8*)pv1, cur1,
7890 (const U8*)pv2, cur2) == 0;
7891 }
7892 }
7893
7894 if (cur1 == cur2)
7895 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7896
7897 SvREFCNT_dec(svrecode);
7898
7899 return eq;
7900}
7901
7902/*
7903=for apidoc sv_cmp
7904
7905Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
7906string in C<sv1> is less than, equal to, or greater than the string in
7907C<sv2>. Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7908coerce its args to strings if necessary. See also C<L</sv_cmp_locale>>.
7909
7910=for apidoc sv_cmp_flags
7911
7912Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
7913string in C<sv1> is less than, equal to, or greater than the string in
7914C<sv2>. Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7915if necessary. If the flags has the C<SV_GMAGIC> bit set, it handles get magic. See
7916also C<L</sv_cmp_locale_flags>>.
7917
7918=cut
7919*/
7920
7921I32
7922Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7923{
7924 return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7925}
7926
7927I32
7928Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7929 const U32 flags)
7930{
7931 STRLEN cur1, cur2;
7932 const char *pv1, *pv2;
7933 I32 cmp;
7934 SV *svrecode = NULL;
7935
7936 if (!sv1) {
7937 pv1 = "";
7938 cur1 = 0;
7939 }
7940 else
7941 pv1 = SvPV_flags_const(sv1, cur1, flags);
7942
7943 if (!sv2) {
7944 pv2 = "";
7945 cur2 = 0;
7946 }
7947 else
7948 pv2 = SvPV_flags_const(sv2, cur2, flags);
7949
7950 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7951 /* Differing utf8ness. */
7952 if (SvUTF8(sv1)) {
7953 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7954 (const U8*)pv1, cur1);
7955 return retval ? retval < 0 ? -1 : +1 : 0;
7956 }
7957 else {
7958 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7959 (const U8*)pv2, cur2);
7960 return retval ? retval < 0 ? -1 : +1 : 0;
7961 }
7962 }
7963
7964 /* Here, if both are non-NULL, then they have the same UTF8ness. */
7965
7966 if (!cur1) {
7967 cmp = cur2 ? -1 : 0;
7968 } else if (!cur2) {
7969 cmp = 1;
7970 } else {
7971 STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7972
7973#ifdef EBCDIC
7974 if (! DO_UTF8(sv1)) {
7975#endif
7976 const I32 retval = memcmp((const void*)pv1,
7977 (const void*)pv2,
7978 shortest_len);
7979 if (retval) {
7980 cmp = retval < 0 ? -1 : 1;
7981 } else if (cur1 == cur2) {
7982 cmp = 0;
7983 } else {
7984 cmp = cur1 < cur2 ? -1 : 1;
7985 }
7986#ifdef EBCDIC
7987 }
7988 else { /* Both are to be treated as UTF-EBCDIC */
7989
7990 /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7991 * which remaps code points 0-255. We therefore generally have to
7992 * unmap back to the original values to get an accurate comparison.
7993 * But we don't have to do that for UTF-8 invariants, as by
7994 * definition, they aren't remapped, nor do we have to do it for
7995 * above-latin1 code points, as they also aren't remapped. (This
7996 * code also works on ASCII platforms, but the memcmp() above is
7997 * much faster). */
7998
7999 const char *e = pv1 + shortest_len;
8000
8001 /* Find the first bytes that differ between the two strings */
8002 while (pv1 < e && *pv1 == *pv2) {
8003 pv1++;
8004 pv2++;
8005 }
8006
8007
8008 if (pv1 == e) { /* Are the same all the way to the end */
8009 if (cur1 == cur2) {
8010 cmp = 0;
8011 } else {
8012 cmp = cur1 < cur2 ? -1 : 1;
8013 }
8014 }
8015 else /* Here *pv1 and *pv2 are not equal, but all bytes earlier
8016 * in the strings were. The current bytes may or may not be
8017 * at the beginning of a character. But neither or both are
8018 * (or else earlier bytes would have been different). And
8019 * if we are in the middle of a character, the two
8020 * characters are comprised of the same number of bytes
8021 * (because in this case the start bytes are the same, and
8022 * the start bytes encode the character's length). */
8023 if (UTF8_IS_INVARIANT(*pv1))
8024 {
8025 /* If both are invariants; can just compare directly */
8026 if (UTF8_IS_INVARIANT(*pv2)) {
8027 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8028 }
8029 else /* Since *pv1 is invariant, it is the whole character,
8030 which means it is at the beginning of a character.
8031 That means pv2 is also at the beginning of a
8032 character (see earlier comment). Since it isn't
8033 invariant, it must be a start byte. If it starts a
8034 character whose code point is above 255, that
8035 character is greater than any single-byte char, which
8036 *pv1 is */
8037 if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8038 {
8039 cmp = -1;
8040 }
8041 else {
8042 /* Here, pv2 points to a character composed of 2 bytes
8043 * whose code point is < 256. Get its code point and
8044 * compare with *pv1 */
8045 cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8046 ? -1
8047 : 1;
8048 }
8049 }
8050 else /* The code point starting at pv1 isn't a single byte */
8051 if (UTF8_IS_INVARIANT(*pv2))
8052 {
8053 /* But here, the code point starting at *pv2 is a single byte,
8054 * and so *pv1 must begin a character, hence is a start byte.
8055 * If that character is above 255, it is larger than any
8056 * single-byte char, which *pv2 is */
8057 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8058 cmp = 1;
8059 }
8060 else {
8061 /* Here, pv1 points to a character composed of 2 bytes
8062 * whose code point is < 256. Get its code point and
8063 * compare with the single byte character *pv2 */
8064 cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8065 ? -1
8066 : 1;
8067 }
8068 }
8069 else /* Here, we've ruled out either *pv1 and *pv2 being
8070 invariant. That means both are part of variants, but not
8071 necessarily at the start of a character */
8072 if ( UTF8_IS_ABOVE_LATIN1_START(*pv1)
8073 || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8074 {
8075 /* Here, at least one is the start of a character, which means
8076 * the other is also a start byte. And the code point of at
8077 * least one of the characters is above 255. It is a
8078 * characteristic of UTF-EBCDIC that all start bytes for
8079 * above-latin1 code points are well behaved as far as code
8080 * point comparisons go, and all are larger than all other
8081 * start bytes, so the comparison with those is also well
8082 * behaved */
8083 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8084 }
8085 else {
8086 /* Here both *pv1 and *pv2 are part of variant characters.
8087 * They could be both continuations, or both start characters.
8088 * (One or both could even be an illegal start character (for
8089 * an overlong) which for the purposes of sorting we treat as
8090 * legal. */
8091 if (UTF8_IS_CONTINUATION(*pv1)) {
8092
8093 /* If they are continuations for code points above 255,
8094 * then comparing the current byte is sufficient, as there
8095 * is no remapping of these and so the comparison is
8096 * well-behaved. We determine if they are such
8097 * continuations by looking at the preceding byte. It
8098 * could be a start byte, from which we can tell if it is
8099 * for an above 255 code point. Or it could be a
8100 * continuation, which means the character occupies at
8101 * least 3 bytes, so must be above 255. */
8102 if ( UTF8_IS_CONTINUATION(*(pv2 - 1))
8103 || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8104 {
8105 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8106 goto cmp_done;
8107 }
8108
8109 /* Here, the continuations are for code points below 256;
8110 * back up one to get to the start byte */
8111 pv1--;
8112 pv2--;
8113 }
8114
8115 /* We need to get the actual native code point of each of these
8116 * variants in order to compare them */
8117 cmp = ( EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8118 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8119 ? -1
8120 : 1;
8121 }
8122 }
8123 cmp_done: ;
8124#endif
8125 }
8126
8127 SvREFCNT_dec(svrecode);
8128
8129 return cmp;
8130}
8131
8132/*
8133=for apidoc sv_cmp_locale
8134
8135Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
8136S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8137if necessary. See also C<L</sv_cmp>>.
8138
8139=for apidoc sv_cmp_locale_flags
8140
8141Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
8142S<C<'use bytes'>> aware and will coerce its args to strings if necessary. If
8143the flags contain C<SV_GMAGIC>, it handles get magic. See also
8144C<L</sv_cmp_flags>>.
8145
8146=cut
8147*/
8148
8149I32
8150Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8151{
8152 return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8153}
8154
8155I32
8156Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8157 const U32 flags)
8158{
8159#ifdef USE_LOCALE_COLLATE
8160
8161 char *pv1, *pv2;
8162 STRLEN len1, len2;
8163 I32 retval;
8164
8165 if (PL_collation_standard)
8166 goto raw_compare;
8167
8168 len1 = len2 = 0;
8169
8170 /* Revert to using raw compare if both operands exist, but either one
8171 * doesn't transform properly for collation */
8172 if (sv1 && sv2) {
8173 pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8174 if (! pv1) {
8175 goto raw_compare;
8176 }
8177 pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8178 if (! pv2) {
8179 goto raw_compare;
8180 }
8181 }
8182 else {
8183 pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8184 pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8185 }
8186
8187 if (!pv1 || !len1) {
8188 if (pv2 && len2)
8189 return -1;
8190 else
8191 goto raw_compare;
8192 }
8193 else {
8194 if (!pv2 || !len2)
8195 return 1;
8196 }
8197
8198 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8199
8200 if (retval)
8201 return retval < 0 ? -1 : 1;
8202
8203 /*
8204 * When the result of collation is equality, that doesn't mean
8205 * that there are no differences -- some locales exclude some
8206 * characters from consideration. So to avoid false equalities,
8207 * we use the raw string as a tiebreaker.
8208 */
8209
8210 raw_compare:
8211 /* FALLTHROUGH */
8212
8213#else
8214 PERL_UNUSED_ARG(flags);
8215#endif /* USE_LOCALE_COLLATE */
8216
8217 return sv_cmp(sv1, sv2);
8218}
8219
8220
8221#ifdef USE_LOCALE_COLLATE
8222
8223/*
8224=for apidoc sv_collxfrm
8225
8226This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
8227C<L</sv_collxfrm_flags>>.
8228
8229=for apidoc sv_collxfrm_flags
8230
8231Add Collate Transform magic to an SV if it doesn't already have it. If the
8232flags contain C<SV_GMAGIC>, it handles get-magic.
8233
8234Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8235scalar data of the variable, but transformed to such a format that a normal
8236memory comparison can be used to compare the data according to the locale
8237settings.
8238
8239=cut
8240*/
8241
8242char *
8243Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8244{
8245 MAGIC *mg;
8246
8247 PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8248
8249 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8250
8251 /* If we don't have collation magic on 'sv', or the locale has changed
8252 * since the last time we calculated it, get it and save it now */
8253 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8254 const char *s;
8255 char *xf;
8256 STRLEN len, xlen;
8257
8258 /* Free the old space */
8259 if (mg)
8260 Safefree(mg->mg_ptr);
8261
8262 s = SvPV_flags_const(sv, len, flags);
8263 if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8264 if (! mg) {
8265 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8266 0, 0);
8267 assert(mg);
8268 }
8269 mg->mg_ptr = xf;
8270 mg->mg_len = xlen;
8271 }
8272 else {
8273 if (mg) {
8274 mg->mg_ptr = NULL;
8275 mg->mg_len = -1;
8276 }
8277 }
8278 }
8279
8280 if (mg && mg->mg_ptr) {
8281 *nxp = mg->mg_len;
8282 return mg->mg_ptr + sizeof(PL_collation_ix);
8283 }
8284 else {
8285 *nxp = 0;
8286 return NULL;
8287 }
8288}
8289
8290#endif /* USE_LOCALE_COLLATE */
8291
8292static char *
8293S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8294{
8295 SV * const tsv = newSV(0);
8296 ENTER;
8297 SAVEFREESV(tsv);
8298 sv_gets(tsv, fp, 0);
8299 sv_utf8_upgrade_nomg(tsv);
8300 SvCUR_set(sv,append);
8301 sv_catsv(sv,tsv);
8302 LEAVE;
8303 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8304}
8305
8306static char *
8307S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8308{
8309 SSize_t bytesread;
8310 const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8311 /* Grab the size of the record we're getting */
8312 char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8313
8314 /* Go yank in */
8315#ifdef __VMS
8316 int fd;
8317 Stat_t st;
8318
8319 /* With a true, record-oriented file on VMS, we need to use read directly
8320 * to ensure that we respect RMS record boundaries. The user is responsible
8321 * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8322 * record size) field. N.B. This is likely to produce invalid results on
8323 * varying-width character data when a record ends mid-character.
8324 */
8325 fd = PerlIO_fileno(fp);
8326 if (fd != -1
8327 && PerlLIO_fstat(fd, &st) == 0
8328 && (st.st_fab_rfm == FAB$C_VAR
8329 || st.st_fab_rfm == FAB$C_VFC
8330 || st.st_fab_rfm == FAB$C_FIX)) {
8331
8332 bytesread = PerlLIO_read(fd, buffer, recsize);
8333 }
8334 else /* in-memory file from PerlIO::Scalar
8335 * or not a record-oriented file
8336 */
8337#endif
8338 {
8339 bytesread = PerlIO_read(fp, buffer, recsize);
8340
8341 /* At this point, the logic in sv_get() means that sv will
8342 be treated as utf-8 if the handle is utf8.
8343 */
8344 if (PerlIO_isutf8(fp) && bytesread > 0) {
8345 char *bend = buffer + bytesread;
8346 char *bufp = buffer;
8347 size_t charcount = 0;
8348 bool charstart = TRUE;
8349 STRLEN skip = 0;
8350
8351 while (charcount < recsize) {
8352 /* count accumulated characters */
8353 while (bufp < bend) {
8354 if (charstart) {
8355 skip = UTF8SKIP(bufp);
8356 }
8357 if (bufp + skip > bend) {
8358 /* partial at the end */
8359 charstart = FALSE;
8360 break;
8361 }
8362 else {
8363 ++charcount;
8364 bufp += skip;
8365 charstart = TRUE;
8366 }
8367 }
8368
8369 if (charcount < recsize) {
8370 STRLEN readsize;
8371 STRLEN bufp_offset = bufp - buffer;
8372 SSize_t morebytesread;
8373
8374 /* originally I read enough to fill any incomplete
8375 character and the first byte of the next
8376 character if needed, but if there's many
8377 multi-byte encoded characters we're going to be
8378 making a read call for every character beyond
8379 the original read size.
8380
8381 So instead, read the rest of the character if
8382 any, and enough bytes to match at least the
8383 start bytes for each character we're going to
8384 read.
8385 */
8386 if (charstart)
8387 readsize = recsize - charcount;
8388 else
8389 readsize = skip - (bend - bufp) + recsize - charcount - 1;
8390 buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8391 bend = buffer + bytesread;
8392 morebytesread = PerlIO_read(fp, bend, readsize);
8393 if (morebytesread <= 0) {
8394 /* we're done, if we still have incomplete
8395 characters the check code in sv_gets() will
8396 warn about them.
8397
8398 I'd originally considered doing
8399 PerlIO_ungetc() on all but the lead
8400 character of the incomplete character, but
8401 read() doesn't do that, so I don't.
8402 */
8403 break;
8404 }
8405
8406 /* prepare to scan some more */
8407 bytesread += morebytesread;
8408 bend = buffer + bytesread;
8409 bufp = buffer + bufp_offset;
8410 }
8411 }
8412 }
8413 }
8414
8415 if (bytesread < 0)
8416 bytesread = 0;
8417 SvCUR_set(sv, bytesread + append);
8418 buffer[bytesread] = '\0';
8419 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8420}
8421
8422/*
8423=for apidoc sv_gets
8424
8425Get a line from the filehandle and store it into the SV, optionally
8426appending to the currently-stored string. If C<append> is not 0, the
8427line is appended to the SV instead of overwriting it. C<append> should
8428be set to the byte offset that the appended string should start at
8429in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8430
8431=cut
8432*/
8433
8434char *
8435Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8436{
8437 const char *rsptr;
8438 STRLEN rslen;
8439 STDCHAR rslast;
8440 STDCHAR *bp;
8441 SSize_t cnt;
8442 int i = 0;
8443 int rspara = 0;
8444
8445 PERL_ARGS_ASSERT_SV_GETS;
8446
8447 if (SvTHINKFIRST(sv))
8448 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8449 /* XXX. If you make this PVIV, then copy on write can copy scalars read
8450 from <>.
8451 However, perlbench says it's slower, because the existing swipe code
8452 is faster than copy on write.
8453 Swings and roundabouts. */
8454 SvUPGRADE(sv, SVt_PV);
8455
8456 if (append) {
8457 /* line is going to be appended to the existing buffer in the sv */
8458 if (PerlIO_isutf8(fp)) {
8459 if (!SvUTF8(sv)) {
8460 sv_utf8_upgrade_nomg(sv);
8461 sv_pos_u2b(sv,&append,0);
8462 }
8463 } else if (SvUTF8(sv)) {
8464 return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8465 }
8466 }
8467
8468 SvPOK_only(sv);
8469 if (!append) {
8470 /* not appending - "clear" the string by setting SvCUR to 0,
8471 * the pv is still avaiable. */
8472 SvCUR_set(sv,0);
8473 }
8474 if (PerlIO_isutf8(fp))
8475 SvUTF8_on(sv);
8476
8477 if (IN_PERL_COMPILETIME) {
8478 /* we always read code in line mode */
8479 rsptr = "\n";
8480 rslen = 1;
8481 }
8482 else if (RsSNARF(PL_rs)) {
8483 /* If it is a regular disk file use size from stat() as estimate
8484 of amount we are going to read -- may result in mallocing
8485 more memory than we really need if the layers below reduce
8486 the size we read (e.g. CRLF or a gzip layer).
8487 */
8488 Stat_t st;
8489 int fd = PerlIO_fileno(fp);
8490 if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode)) {
8491 const Off_t offset = PerlIO_tell(fp);
8492 if (offset != (Off_t) -1 && st.st_size + append > offset) {
8493#ifdef PERL_COPY_ON_WRITE
8494 /* Add an extra byte for the sake of copy-on-write's
8495 * buffer reference count. */
8496 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8497#else
8498 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8499#endif
8500 }
8501 }
8502 rsptr = NULL;
8503 rslen = 0;
8504 }
8505 else if (RsRECORD(PL_rs)) {
8506 return S_sv_gets_read_record(aTHX_ sv, fp, append);
8507 }
8508 else if (RsPARA(PL_rs)) {
8509 rsptr = "\n\n";
8510 rslen = 2;
8511 rspara = 1;
8512 }
8513 else {
8514 /* Get $/ i.e. PL_rs into same encoding as stream wants */
8515 if (PerlIO_isutf8(fp)) {
8516 rsptr = SvPVutf8(PL_rs, rslen);
8517 }
8518 else {
8519 if (SvUTF8(PL_rs)) {
8520 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8521 Perl_croak(aTHX_ "Wide character in $/");
8522 }
8523 }
8524 /* extract the raw pointer to the record separator */
8525 rsptr = SvPV_const(PL_rs, rslen);
8526 }
8527 }
8528
8529 /* rslast is the last character in the record separator
8530 * note we don't use rslast except when rslen is true, so the
8531 * null assign is a placeholder. */
8532 rslast = rslen ? rsptr[rslen - 1] : '\0';
8533
8534 if (rspara) { /* have to do this both before and after */
8535 do { /* to make sure file boundaries work right */
8536 if (PerlIO_eof(fp))
8537 return 0;
8538 i = PerlIO_getc(fp);
8539 if (i != '\n') {
8540 if (i == -1)
8541 return 0;
8542 PerlIO_ungetc(fp,i);
8543 break;
8544 }
8545 } while (i != EOF);
8546 }
8547
8548 /* See if we know enough about I/O mechanism to cheat it ! */
8549
8550 /* This used to be #ifdef test - it is made run-time test for ease
8551 of abstracting out stdio interface. One call should be cheap
8552 enough here - and may even be a macro allowing compile
8553 time optimization.
8554 */
8555
8556 if (PerlIO_fast_gets(fp)) {
8557 /*
8558 * We can do buffer based IO operations on this filehandle.
8559 *
8560 * This means we can bypass a lot of subcalls and process
8561 * the buffer directly, it also means we know the upper bound
8562 * on the amount of data we might read of the current buffer
8563 * into our sv. Knowing this allows us to preallocate the pv
8564 * to be able to hold that maximum, which allows us to simplify
8565 * a lot of logic. */
8566
8567 /*
8568 * We're going to steal some values from the stdio struct
8569 * and put EVERYTHING in the innermost loop into registers.
8570 */
8571 STDCHAR *ptr; /* pointer into fp's read-ahead buffer */
8572 STRLEN bpx; /* length of the data in the target sv
8573 used to fix pointers after a SvGROW */
8574 I32 shortbuffered; /* If the pv buffer is shorter than the amount
8575 of data left in the read-ahead buffer.
8576 If 0 then the pv buffer can hold the full
8577 amount left, otherwise this is the amount it
8578 can hold. */
8579
8580 /* Here is some breathtakingly efficient cheating */
8581
8582 /* When you read the following logic resist the urge to think
8583 * of record separators that are 1 byte long. They are an
8584 * uninteresting special (simple) case.
8585 *
8586 * Instead think of record separators which are at least 2 bytes
8587 * long, and keep in mind that we need to deal with such
8588 * separators when they cross a read-ahead buffer boundary.
8589 *
8590 * Also consider that we need to gracefully deal with separators
8591 * that may be longer than a single read ahead buffer.
8592 *
8593 * Lastly do not forget we want to copy the delimiter as well. We
8594 * are copying all data in the file _up_to_and_including_ the separator
8595 * itself.
8596 *
8597 * Now that you have all that in mind here is what is happening below:
8598 *
8599 * 1. When we first enter the loop we do some memory book keeping to see
8600 * how much free space there is in the target SV. (This sub assumes that
8601 * it is operating on the same SV most of the time via $_ and that it is
8602 * going to be able to reuse the same pv buffer each call.) If there is
8603 * "enough" room then we set "shortbuffered" to how much space there is
8604 * and start reading forward.
8605 *
8606 * 2. When we scan forward we copy from the read-ahead buffer to the target
8607 * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8608 * and the end of the of pv, as well as for the "rslast", which is the last
8609 * char of the separator.
8610 *
8611 * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8612 * (which has a "complete" record up to the point we saw rslast) and check
8613 * it to see if it matches the separator. If it does we are done. If it doesn't
8614 * we continue on with the scan/copy.
8615 *
8616 * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8617 * the IO system to read the next buffer. We do this by doing a getc(), which
8618 * returns a single char read (or EOF), and prefills the buffer, and also
8619 * allows us to find out how full the buffer is. We use this information to
8620 * SvGROW() the sv to the size remaining in the buffer, after which we copy
8621 * the returned single char into the target sv, and then go back into scan
8622 * forward mode.
8623 *
8624 * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8625 * remaining space in the read-buffer.
8626 *
8627 * Note that this code despite its twisty-turny nature is pretty darn slick.
8628 * It manages single byte separators, multi-byte cross boundary separators,
8629 * and cross-read-buffer separators cleanly and efficiently at the cost
8630 * of potentially greatly overallocating the target SV.
8631 *
8632 * Yves
8633 */
8634
8635
8636 /* get the number of bytes remaining in the read-ahead buffer
8637 * on first call on a given fp this will return 0.*/
8638 cnt = PerlIO_get_cnt(fp);
8639
8640 /* make sure we have the room */
8641 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8642 /* Not room for all of it
8643 if we are looking for a separator and room for some
8644 */
8645 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8646 /* just process what we have room for */
8647 shortbuffered = cnt - SvLEN(sv) + append + 1;
8648 cnt -= shortbuffered;
8649 }
8650 else {
8651 /* ensure that the target sv has enough room to hold
8652 * the rest of the read-ahead buffer */
8653 shortbuffered = 0;
8654 /* remember that cnt can be negative */
8655 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8656 }
8657 }
8658 else {
8659 /* we have enough room to hold the full buffer, lets scream */
8660 shortbuffered = 0;
8661 }
8662
8663 /* extract the pointer to sv's string buffer, offset by append as necessary */
8664 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
8665 /* extract the point to the read-ahead buffer */
8666 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8667
8668 /* some trace debug output */
8669 DEBUG_P(PerlIO_printf(Perl_debug_log,
8670 "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8671 DEBUG_P(PerlIO_printf(Perl_debug_log,
8672 "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8673 UVuf "\n",
8674 PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8675 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8676
8677 for (;;) {
8678 screamer:
8679 /* if there is stuff left in the read-ahead buffer */
8680 if (cnt > 0) {
8681 /* if there is a separator */
8682 if (rslen) {
8683 /* find next rslast */
8684 STDCHAR *p;
8685
8686 /* shortcut common case of blank line */
8687 cnt--;
8688 if ((*bp++ = *ptr++) == rslast)
8689 goto thats_all_folks;
8690
8691 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8692 if (p) {
8693 SSize_t got = p - ptr + 1;
8694 Copy(ptr, bp, got, STDCHAR);
8695 ptr += got;
8696 bp += got;
8697 cnt -= got;
8698 goto thats_all_folks;
8699 }
8700 Copy(ptr, bp, cnt, STDCHAR);
8701 ptr += cnt;
8702 bp += cnt;
8703 cnt = 0;
8704 }
8705 else {
8706 /* no separator, slurp the full buffer */
8707 Copy(ptr, bp, cnt, char); /* this | eat */
8708 bp += cnt; /* screams | dust */
8709 ptr += cnt; /* louder | sed :-) */
8710 cnt = 0;
8711 assert (!shortbuffered);
8712 goto cannot_be_shortbuffered;
8713 }
8714 }
8715
8716 if (shortbuffered) { /* oh well, must extend */
8717 /* we didnt have enough room to fit the line into the target buffer
8718 * so we must extend the target buffer and keep going */
8719 cnt = shortbuffered;
8720 shortbuffered = 0;
8721 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8722 SvCUR_set(sv, bpx);
8723 /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8724 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8725 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8726 continue;
8727 }
8728
8729 cannot_be_shortbuffered:
8730 /* we need to refill the read-ahead buffer if possible */
8731
8732 DEBUG_P(PerlIO_printf(Perl_debug_log,
8733 "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8734 PTR2UV(ptr),(IV)cnt));
8735 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8736
8737 DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8738 "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8739 PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8740 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8741
8742 /*
8743 call PerlIO_getc() to let it prefill the lookahead buffer
8744
8745 This used to call 'filbuf' in stdio form, but as that behaves like
8746 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8747 another abstraction.
8748
8749 Note we have to deal with the char in 'i' if we are not at EOF
8750 */
8751 i = PerlIO_getc(fp); /* get more characters */
8752
8753 DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8754 "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8755 PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8756 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8757
8758 /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8759 cnt = PerlIO_get_cnt(fp);
8760 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
8761 DEBUG_P(PerlIO_printf(Perl_debug_log,
8762 "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8763 PTR2UV(ptr),(IV)cnt));
8764
8765 if (i == EOF) /* all done for ever? */
8766 goto thats_really_all_folks;
8767
8768 /* make sure we have enough space in the target sv */
8769 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8770 SvCUR_set(sv, bpx);
8771 SvGROW(sv, bpx + cnt + 2);
8772 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8773
8774 /* copy of the char we got from getc() */
8775 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
8776
8777 /* make sure we deal with the i being the last character of a separator */
8778 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
8779 goto thats_all_folks;
8780 }
8781
8782 thats_all_folks:
8783 /* check if we have actually found the separator - only really applies
8784 * when rslen > 1 */
8785 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8786 memNE((char*)bp - rslen, rsptr, rslen))
8787 goto screamer; /* go back to the fray */
8788 thats_really_all_folks:
8789 if (shortbuffered)
8790 cnt += shortbuffered;
8791 DEBUG_P(PerlIO_printf(Perl_debug_log,
8792 "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8793 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
8794 DEBUG_P(PerlIO_printf(Perl_debug_log,
8795 "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8796 "\n",
8797 PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8798 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8799 *bp = '\0';
8800 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
8801 DEBUG_P(PerlIO_printf(Perl_debug_log,
8802 "Screamer: done, len=%ld, string=|%.*s|\n",
8803 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8804 }
8805 else
8806 {
8807 /*The big, slow, and stupid way. */
8808#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
8809 STDCHAR *buf = NULL;
8810 Newx(buf, 8192, STDCHAR);
8811 assert(buf);
8812#else
8813 STDCHAR buf[8192];
8814#endif
8815
8816 screamer2:
8817 if (rslen) {
8818 const STDCHAR * const bpe = buf + sizeof(buf);
8819 bp = buf;
8820 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8821 ; /* keep reading */
8822 cnt = bp - buf;
8823 }
8824 else {
8825 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8826 /* Accommodate broken VAXC compiler, which applies U8 cast to
8827 * both args of ?: operator, causing EOF to change into 255
8828 */
8829 if (cnt > 0)
8830 i = (U8)buf[cnt - 1];
8831 else
8832 i = EOF;
8833 }
8834
8835 if (cnt < 0)
8836 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
8837 if (append)
8838 sv_catpvn_nomg(sv, (char *) buf, cnt);
8839 else
8840 sv_setpvn(sv, (char *) buf, cnt); /* "nomg" is implied */
8841
8842 if (i != EOF && /* joy */
8843 (!rslen ||
8844 SvCUR(sv) < rslen ||
8845 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8846 {
8847 append = -1;
8848 /*
8849 * If we're reading from a TTY and we get a short read,
8850 * indicating that the user hit his EOF character, we need
8851 * to notice it now, because if we try to read from the TTY
8852 * again, the EOF condition will disappear.
8853 *
8854 * The comparison of cnt to sizeof(buf) is an optimization
8855 * that prevents unnecessary calls to feof().
8856 *
8857 * - jik 9/25/96
8858 */
8859 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8860 goto screamer2;
8861 }
8862
8863#ifdef USE_HEAP_INSTEAD_OF_STACK
8864 Safefree(buf);
8865#endif
8866 }
8867
8868 if (rspara) { /* have to do this both before and after */
8869 while (i != EOF) { /* to make sure file boundaries work right */
8870 i = PerlIO_getc(fp);
8871 if (i != '\n') {
8872 PerlIO_ungetc(fp,i);
8873 break;
8874 }
8875 }
8876 }
8877
8878 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8879}
8880
8881/*
8882=for apidoc sv_inc
8883
8884Auto-increment of the value in the SV, doing string to numeric conversion
8885if necessary. Handles 'get' magic and operator overloading.
8886
8887=cut
8888*/
8889
8890void
8891Perl_sv_inc(pTHX_ SV *const sv)
8892{
8893 if (!sv)
8894 return;
8895 SvGETMAGIC(sv);
8896 sv_inc_nomg(sv);
8897}
8898
8899/*
8900=for apidoc sv_inc_nomg
8901
8902Auto-increment of the value in the SV, doing string to numeric conversion
8903if necessary. Handles operator overloading. Skips handling 'get' magic.
8904
8905=cut
8906*/
8907
8908void
8909Perl_sv_inc_nomg(pTHX_ SV *const sv)
8910{
8911 char *d;
8912 int flags;
8913
8914 if (!sv)
8915 return;
8916 if (SvTHINKFIRST(sv)) {
8917 if (SvREADONLY(sv)) {
8918 Perl_croak_no_modify();
8919 }
8920 if (SvROK(sv)) {
8921 IV i;
8922 if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8923 return;
8924 i = PTR2IV(SvRV(sv));
8925 sv_unref(sv);
8926 sv_setiv(sv, i);
8927 }
8928 else sv_force_normal_flags(sv, 0);
8929 }
8930 flags = SvFLAGS(sv);
8931 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8932 /* It's (privately or publicly) a float, but not tested as an
8933 integer, so test it to see. */
8934 (void) SvIV(sv);
8935 flags = SvFLAGS(sv);
8936 }
8937 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8938 /* It's publicly an integer, or privately an integer-not-float */
8939#ifdef PERL_PRESERVE_IVUV
8940 oops_its_int:
8941#endif
8942 if (SvIsUV(sv)) {
8943 if (SvUVX(sv) == UV_MAX)
8944 sv_setnv(sv, UV_MAX_P1);
8945 else
8946 (void)SvIOK_only_UV(sv);
8947 SvUV_set(sv, SvUVX(sv) + 1);
8948 } else {
8949 if (SvIVX(sv) == IV_MAX)
8950 sv_setuv(sv, (UV)IV_MAX + 1);
8951 else {
8952 (void)SvIOK_only(sv);
8953 SvIV_set(sv, SvIVX(sv) + 1);
8954 }
8955 }
8956 return;
8957 }
8958 if (flags & SVp_NOK) {
8959 const NV was = SvNVX(sv);
8960 if (LIKELY(!Perl_isinfnan(was)) &&
8961 NV_OVERFLOWS_INTEGERS_AT &&
8962 was >= NV_OVERFLOWS_INTEGERS_AT) {
8963 /* diag_listed_as: Lost precision when %s %f by 1 */
8964 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8965 "Lost precision when incrementing %" NVff " by 1",
8966 was);
8967 }
8968 (void)SvNOK_only(sv);
8969 SvNV_set(sv, was + 1.0);
8970 return;
8971 }
8972
8973 /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8974 if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8975 Perl_croak_no_modify();
8976
8977 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8978 if ((flags & SVTYPEMASK) < SVt_PVIV)
8979 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8980 (void)SvIOK_only(sv);
8981 SvIV_set(sv, 1);
8982 return;
8983 }
8984 d = SvPVX(sv);
8985 while (isALPHA(*d)) d++;
8986 while (isDIGIT(*d)) d++;
8987 if (d < SvEND(sv)) {
8988 const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8989#ifdef PERL_PRESERVE_IVUV
8990 /* Got to punt this as an integer if needs be, but we don't issue
8991 warnings. Probably ought to make the sv_iv_please() that does
8992 the conversion if possible, and silently. */
8993 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8994 /* Need to try really hard to see if it's an integer.
8995 9.22337203685478e+18 is an integer.
8996 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8997 so $a="9.22337203685478e+18"; $a+0; $a++
8998 needs to be the same as $a="9.22337203685478e+18"; $a++
8999 or we go insane. */
9000
9001 (void) sv_2iv(sv);
9002 if (SvIOK(sv))
9003 goto oops_its_int;
9004
9005 /* sv_2iv *should* have made this an NV */
9006 if (flags & SVp_NOK) {
9007 (void)SvNOK_only(sv);
9008 SvNV_set(sv, SvNVX(sv) + 1.0);
9009 return;
9010 }
9011 /* I don't think we can get here. Maybe I should assert this
9012 And if we do get here I suspect that sv_setnv will croak. NWC
9013 Fall through. */
9014 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9015 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9016 }
9017#endif /* PERL_PRESERVE_IVUV */
9018 if (!numtype && ckWARN(WARN_NUMERIC))
9019 not_incrementable(sv);
9020 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9021 return;
9022 }
9023 d--;
9024 while (d >= SvPVX_const(sv)) {
9025 if (isDIGIT(*d)) {
9026 if (++*d <= '9')
9027 return;
9028 *(d--) = '0';
9029 }
9030 else {
9031#ifdef EBCDIC
9032 /* MKS: The original code here died if letters weren't consecutive.
9033 * at least it didn't have to worry about non-C locales. The
9034 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9035 * arranged in order (although not consecutively) and that only
9036 * [A-Za-z] are accepted by isALPHA in the C locale.
9037 */
9038 if (isALPHA_FOLD_NE(*d, 'z')) {
9039 do { ++*d; } while (!isALPHA(*d));
9040 return;
9041 }
9042 *(d--) -= 'z' - 'a';
9043#else
9044 ++*d;
9045 if (isALPHA(*d))
9046 return;
9047 *(d--) -= 'z' - 'a' + 1;
9048#endif
9049 }
9050 }
9051 /* oh,oh, the number grew */
9052 SvGROW(sv, SvCUR(sv) + 2);
9053 SvCUR_set(sv, SvCUR(sv) + 1);
9054 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9055 *d = d[-1];
9056 if (isDIGIT(d[1]))
9057 *d = '1';
9058 else
9059 *d = d[1];
9060}
9061
9062/*
9063=for apidoc sv_dec
9064
9065Auto-decrement of the value in the SV, doing string to numeric conversion
9066if necessary. Handles 'get' magic and operator overloading.
9067
9068=cut
9069*/
9070
9071void
9072Perl_sv_dec(pTHX_ SV *const sv)
9073{
9074 if (!sv)
9075 return;
9076 SvGETMAGIC(sv);
9077 sv_dec_nomg(sv);
9078}
9079
9080/*
9081=for apidoc sv_dec_nomg
9082
9083Auto-decrement of the value in the SV, doing string to numeric conversion
9084if necessary. Handles operator overloading. Skips handling 'get' magic.
9085
9086=cut
9087*/
9088
9089void
9090Perl_sv_dec_nomg(pTHX_ SV *const sv)
9091{
9092 int flags;
9093
9094 if (!sv)
9095 return;
9096 if (SvTHINKFIRST(sv)) {
9097 if (SvREADONLY(sv)) {
9098 Perl_croak_no_modify();
9099 }
9100 if (SvROK(sv)) {
9101 IV i;
9102 if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9103 return;
9104 i = PTR2IV(SvRV(sv));
9105 sv_unref(sv);
9106 sv_setiv(sv, i);
9107 }
9108 else sv_force_normal_flags(sv, 0);
9109 }
9110 /* Unlike sv_inc we don't have to worry about string-never-numbers
9111 and keeping them magic. But we mustn't warn on punting */
9112 flags = SvFLAGS(sv);
9113 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9114 /* It's publicly an integer, or privately an integer-not-float */
9115#ifdef PERL_PRESERVE_IVUV
9116 oops_its_int:
9117#endif
9118 if (SvIsUV(sv)) {
9119 if (SvUVX(sv) == 0) {
9120 (void)SvIOK_only(sv);
9121 SvIV_set(sv, -1);
9122 }
9123 else {
9124 (void)SvIOK_only_UV(sv);
9125 SvUV_set(sv, SvUVX(sv) - 1);
9126 }
9127 } else {
9128 if (SvIVX(sv) == IV_MIN) {
9129 sv_setnv(sv, (NV)IV_MIN);
9130 goto oops_its_num;
9131 }
9132 else {
9133 (void)SvIOK_only(sv);
9134 SvIV_set(sv, SvIVX(sv) - 1);
9135 }
9136 }
9137 return;
9138 }
9139 if (flags & SVp_NOK) {
9140 oops_its_num:
9141 {
9142 const NV was = SvNVX(sv);
9143 if (LIKELY(!Perl_isinfnan(was)) &&
9144 NV_OVERFLOWS_INTEGERS_AT &&
9145 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9146 /* diag_listed_as: Lost precision when %s %f by 1 */
9147 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9148 "Lost precision when decrementing %" NVff " by 1",
9149 was);
9150 }
9151 (void)SvNOK_only(sv);
9152 SvNV_set(sv, was - 1.0);
9153 return;
9154 }
9155 }
9156
9157 /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9158 if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9159 Perl_croak_no_modify();
9160
9161 if (!(flags & SVp_POK)) {
9162 if ((flags & SVTYPEMASK) < SVt_PVIV)
9163 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9164 SvIV_set(sv, -1);
9165 (void)SvIOK_only(sv);
9166 return;
9167 }
9168#ifdef PERL_PRESERVE_IVUV
9169 {
9170 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9171 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9172 /* Need to try really hard to see if it's an integer.
9173 9.22337203685478e+18 is an integer.
9174 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9175 so $a="9.22337203685478e+18"; $a+0; $a--
9176 needs to be the same as $a="9.22337203685478e+18"; $a--
9177 or we go insane. */
9178
9179 (void) sv_2iv(sv);
9180 if (SvIOK(sv))
9181 goto oops_its_int;
9182
9183 /* sv_2iv *should* have made this an NV */
9184 if (flags & SVp_NOK) {
9185 (void)SvNOK_only(sv);
9186 SvNV_set(sv, SvNVX(sv) - 1.0);
9187 return;
9188 }
9189 /* I don't think we can get here. Maybe I should assert this
9190 And if we do get here I suspect that sv_setnv will croak. NWC
9191 Fall through. */
9192 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9193 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9194 }
9195 }
9196#endif /* PERL_PRESERVE_IVUV */
9197 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
9198}
9199
9200/* this define is used to eliminate a chunk of duplicated but shared logic
9201 * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9202 * used anywhere but here - yves
9203 */
9204#define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9205 STMT_START { \
9206 SSize_t ix = ++PL_tmps_ix; \
9207 if (UNLIKELY(ix >= PL_tmps_max)) \
9208 ix = tmps_grow_p(ix); \
9209 PL_tmps_stack[ix] = (AnSv); \
9210 } STMT_END
9211
9212/*
9213=for apidoc sv_mortalcopy
9214
9215Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9216The new SV is marked as mortal. It will be destroyed "soon", either by an
9217explicit call to C<FREETMPS>, or by an implicit call at places such as
9218statement boundaries. See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9219
9220=cut
9221*/
9222
9223/* Make a string that will exist for the duration of the expression
9224 * evaluation. Actually, it may have to last longer than that, but
9225 * hopefully we won't free it until it has been assigned to a
9226 * permanent location. */
9227
9228SV *
9229Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9230{
9231 SV *sv;
9232
9233 if (flags & SV_GMAGIC)
9234 SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9235 new_SV(sv);
9236 sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9237 PUSH_EXTEND_MORTAL__SV_C(sv);
9238 SvTEMP_on(sv);
9239 return sv;
9240}
9241
9242/*
9243=for apidoc sv_newmortal
9244
9245Creates a new null SV which is mortal. The reference count of the SV is
9246set to 1. It will be destroyed "soon", either by an explicit call to
9247C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9248See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9249
9250=cut
9251*/
9252
9253SV *
9254Perl_sv_newmortal(pTHX)
9255{
9256 SV *sv;
9257
9258 new_SV(sv);
9259 SvFLAGS(sv) = SVs_TEMP;
9260 PUSH_EXTEND_MORTAL__SV_C(sv);
9261 return sv;
9262}
9263
9264
9265/*
9266=for apidoc newSVpvn_flags
9267
9268Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9269characters) into it. The reference count for the
9270SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
9271string. You are responsible for ensuring that the source string is at least
9272C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
9273Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9274If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9275returning. If C<SVf_UTF8> is set, C<s>
9276is considered to be in UTF-8 and the
9277C<SVf_UTF8> flag will be set on the new SV.
9278C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9279
9280 #define newSVpvn_utf8(s, len, u) \
9281 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9282
9283=cut
9284*/
9285
9286SV *
9287Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9288{
9289 SV *sv;
9290
9291 /* All the flags we don't support must be zero.
9292 And we're new code so I'm going to assert this from the start. */
9293 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9294 new_SV(sv);
9295 sv_setpvn(sv,s,len);
9296
9297 /* This code used to do a sv_2mortal(), however we now unroll the call to
9298 * sv_2mortal() and do what it does ourselves here. Since we have asserted
9299 * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9300 * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9301 * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9302 * means that we eliminate quite a few steps than it looks - Yves
9303 * (explaining patch by gfx) */
9304
9305 SvFLAGS(sv) |= flags;
9306
9307 if(flags & SVs_TEMP){
9308 PUSH_EXTEND_MORTAL__SV_C(sv);
9309 }
9310
9311 return sv;
9312}
9313
9314/*
9315=for apidoc sv_2mortal
9316
9317Marks an existing SV as mortal. The SV will be destroyed "soon", either
9318by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9319statement boundaries. C<SvTEMP()> is turned on which means that the SV's
9320string buffer can be "stolen" if this SV is copied. See also
9321C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9322
9323=cut
9324*/
9325
9326SV *
9327Perl_sv_2mortal(pTHX_ SV *const sv)
9328{
9329 dVAR;
9330 if (!sv)
9331 return sv;
9332 if (SvIMMORTAL(sv))
9333 return sv;
9334 PUSH_EXTEND_MORTAL__SV_C(sv);
9335 SvTEMP_on(sv);
9336 return sv;
9337}
9338
9339/*
9340=for apidoc newSVpv
9341
9342Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9343characters) into it. The reference count for the
9344SV is set to 1. If C<len> is zero, Perl will compute the length using
9345C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9346C<NUL> characters and has to have a terminating C<NUL> byte).
9347
9348This function can cause reliability issues if you are likely to pass in
9349empty strings that are not null terminated, because it will run
9350strlen on the string and potentially run past valid memory.
9351
9352Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9353For string literals use L</newSVpvs> instead. This function will work fine for
9354C<NUL> terminated strings, but if you want to avoid the if statement on whether
9355to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9356
9357=cut
9358*/
9359
9360SV *
9361Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9362{
9363 SV *sv;
9364
9365 new_SV(sv);
9366 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9367 return sv;
9368}
9369
9370/*
9371=for apidoc newSVpvn
9372
9373Creates a new SV and copies a string into it, which may contain C<NUL> characters
9374(C<\0>) and other binary data. The reference count for the SV is set to 1.
9375Note that if C<len> is zero, Perl will create a zero length (Perl) string. You
9376are responsible for ensuring that the source buffer is at least
9377C<len> bytes long. If the C<buffer> argument is NULL the new SV will be
9378undefined.
9379
9380=cut
9381*/
9382
9383SV *
9384Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9385{
9386 SV *sv;
9387 new_SV(sv);
9388 sv_setpvn(sv,buffer,len);
9389 return sv;
9390}
9391
9392/*
9393=for apidoc newSVhek
9394
9395Creates a new SV from the hash key structure. It will generate scalars that
9396point to the shared string table where possible. Returns a new (undefined)
9397SV if C<hek> is NULL.
9398
9399=cut
9400*/
9401
9402SV *
9403Perl_newSVhek(pTHX_ const HEK *const hek)
9404{
9405 if (!hek) {
9406 SV *sv;
9407
9408 new_SV(sv);
9409 return sv;
9410 }
9411
9412 if (HEK_LEN(hek) == HEf_SVKEY) {
9413 return newSVsv(*(SV**)HEK_KEY(hek));
9414 } else {
9415 const int flags = HEK_FLAGS(hek);
9416 if (flags & HVhek_WASUTF8) {
9417 /* Trouble :-)
9418 Andreas would like keys he put in as utf8 to come back as utf8
9419 */
9420 STRLEN utf8_len = HEK_LEN(hek);
9421 SV * const sv = newSV_type(SVt_PV);
9422 char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9423 /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9424 sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9425 SvUTF8_on (sv);
9426 return sv;
9427 } else if (flags & HVhek_UNSHARED) {
9428 /* A hash that isn't using shared hash keys has to have
9429 the flag in every key so that we know not to try to call
9430 share_hek_hek on it. */
9431
9432 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9433 if (HEK_UTF8(hek))
9434 SvUTF8_on (sv);
9435 return sv;
9436 }
9437 /* This will be overwhelminly the most common case. */
9438 {
9439 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9440 more efficient than sharepvn(). */
9441 SV *sv;
9442
9443 new_SV(sv);
9444 sv_upgrade(sv, SVt_PV);
9445 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9446 SvCUR_set(sv, HEK_LEN(hek));
9447 SvLEN_set(sv, 0);
9448 SvIsCOW_on(sv);
9449 SvPOK_on(sv);
9450 if (HEK_UTF8(hek))
9451 SvUTF8_on(sv);
9452 return sv;
9453 }
9454 }
9455}
9456
9457/*
9458=for apidoc newSVpvn_share
9459
9460Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9461table. If the string does not already exist in the table, it is
9462created first. Turns on the C<SvIsCOW> flag (or C<READONLY>
9463and C<FAKE> in 5.16 and earlier). If the C<hash> parameter
9464is non-zero, that value is used; otherwise the hash is computed.
9465The string's hash can later be retrieved from the SV
9466with the C<SvSHARED_HASH()> macro. The idea here is
9467that as the string table is used for shared hash keys these strings will have
9468C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9469
9470=cut
9471*/
9472
9473SV *
9474Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9475{
9476 dVAR;
9477 SV *sv;
9478 bool is_utf8 = FALSE;
9479 const char *const orig_src = src;
9480
9481 if (len < 0) {
9482 STRLEN tmplen = -len;
9483 is_utf8 = TRUE;
9484 /* See the note in hv.c:hv_fetch() --jhi */
9485 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9486 len = tmplen;
9487 }
9488 if (!hash)
9489 PERL_HASH(hash, src, len);
9490 new_SV(sv);
9491 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9492 changes here, update it there too. */
9493 sv_upgrade(sv, SVt_PV);
9494 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9495 SvCUR_set(sv, len);
9496 SvLEN_set(sv, 0);
9497 SvIsCOW_on(sv);
9498 SvPOK_on(sv);
9499 if (is_utf8)
9500 SvUTF8_on(sv);
9501 if (src != orig_src)
9502 Safefree(src);
9503 return sv;
9504}
9505
9506/*
9507=for apidoc newSVpv_share
9508
9509Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9510string/length pair.
9511
9512=cut
9513*/
9514
9515SV *
9516Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9517{
9518 return newSVpvn_share(src, strlen(src), hash);
9519}
9520
9521#if defined(PERL_IMPLICIT_CONTEXT)
9522
9523/* pTHX_ magic can't cope with varargs, so this is a no-context
9524 * version of the main function, (which may itself be aliased to us).
9525 * Don't access this version directly.
9526 */
9527
9528SV *
9529Perl_newSVpvf_nocontext(const char *const pat, ...)
9530{
9531 dTHX;
9532 SV *sv;
9533 va_list args;
9534
9535 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9536
9537 va_start(args, pat);
9538 sv = vnewSVpvf(pat, &args);
9539 va_end(args);
9540 return sv;
9541}
9542#endif
9543
9544/*
9545=for apidoc newSVpvf
9546
9547Creates a new SV and initializes it with the string formatted like
9548C<sv_catpvf>.
9549
9550=cut
9551*/
9552
9553SV *
9554Perl_newSVpvf(pTHX_ const char *const pat, ...)
9555{
9556 SV *sv;
9557 va_list args;
9558
9559 PERL_ARGS_ASSERT_NEWSVPVF;
9560
9561 va_start(args, pat);
9562 sv = vnewSVpvf(pat, &args);
9563 va_end(args);
9564 return sv;
9565}
9566
9567/* backend for newSVpvf() and newSVpvf_nocontext() */
9568
9569SV *
9570Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9571{
9572 SV *sv;
9573
9574 PERL_ARGS_ASSERT_VNEWSVPVF;
9575
9576 new_SV(sv);
9577 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9578 return sv;
9579}
9580
9581/*
9582=for apidoc newSVnv
9583
9584Creates a new SV and copies a floating point value into it.
9585The reference count for the SV is set to 1.
9586
9587=cut
9588*/
9589
9590SV *
9591Perl_newSVnv(pTHX_ const NV n)
9592{
9593 SV *sv;
9594
9595 new_SV(sv);
9596 sv_setnv(sv,n);
9597 return sv;
9598}
9599
9600/*
9601=for apidoc newSViv
9602
9603Creates a new SV and copies an integer into it. The reference count for the
9604SV is set to 1.
9605
9606=cut
9607*/
9608
9609SV *
9610Perl_newSViv(pTHX_ const IV i)
9611{
9612 SV *sv;
9613
9614 new_SV(sv);
9615
9616 /* Inlining ONLY the small relevant subset of sv_setiv here
9617 * for performance. Makes a significant difference. */
9618
9619 /* We're starting from SVt_FIRST, so provided that's
9620 * actual 0, we don't have to unset any SV type flags
9621 * to promote to SVt_IV. */
9622 STATIC_ASSERT_STMT(SVt_FIRST == 0);
9623
9624 SET_SVANY_FOR_BODYLESS_IV(sv);
9625 SvFLAGS(sv) |= SVt_IV;
9626 (void)SvIOK_on(sv);
9627
9628 SvIV_set(sv, i);
9629 SvTAINT(sv);
9630
9631 return sv;
9632}
9633
9634/*
9635=for apidoc newSVuv
9636
9637Creates a new SV and copies an unsigned integer into it.
9638The reference count for the SV is set to 1.
9639
9640=cut
9641*/
9642
9643SV *
9644Perl_newSVuv(pTHX_ const UV u)
9645{
9646 SV *sv;
9647
9648 /* Inlining ONLY the small relevant subset of sv_setuv here
9649 * for performance. Makes a significant difference. */
9650
9651 /* Using ivs is more efficient than using uvs - see sv_setuv */
9652 if (u <= (UV)IV_MAX) {
9653 return newSViv((IV)u);
9654 }
9655
9656 new_SV(sv);
9657
9658 /* We're starting from SVt_FIRST, so provided that's
9659 * actual 0, we don't have to unset any SV type flags
9660 * to promote to SVt_IV. */
9661 STATIC_ASSERT_STMT(SVt_FIRST == 0);
9662
9663 SET_SVANY_FOR_BODYLESS_IV(sv);
9664 SvFLAGS(sv) |= SVt_IV;
9665 (void)SvIOK_on(sv);
9666 (void)SvIsUV_on(sv);
9667
9668 SvUV_set(sv, u);
9669 SvTAINT(sv);
9670
9671 return sv;
9672}
9673
9674/*
9675=for apidoc newSV_type
9676
9677Creates a new SV, of the type specified. The reference count for the new SV
9678is set to 1.
9679
9680=cut
9681*/
9682
9683SV *
9684Perl_newSV_type(pTHX_ const svtype type)
9685{
9686 SV *sv;
9687
9688 new_SV(sv);
9689 ASSUME(SvTYPE(sv) == SVt_FIRST);
9690 if(type != SVt_FIRST)
9691 sv_upgrade(sv, type);
9692 return sv;
9693}
9694
9695/*
9696=for apidoc newRV_noinc
9697
9698Creates an RV wrapper for an SV. The reference count for the original
9699SV is B<not> incremented.
9700
9701=cut
9702*/
9703
9704SV *
9705Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9706{
9707 SV *sv;
9708
9709 PERL_ARGS_ASSERT_NEWRV_NOINC;
9710
9711 new_SV(sv);
9712
9713 /* We're starting from SVt_FIRST, so provided that's
9714 * actual 0, we don't have to unset any SV type flags
9715 * to promote to SVt_IV. */
9716 STATIC_ASSERT_STMT(SVt_FIRST == 0);
9717
9718 SET_SVANY_FOR_BODYLESS_IV(sv);
9719 SvFLAGS(sv) |= SVt_IV;
9720 SvROK_on(sv);
9721 SvIV_set(sv, 0);
9722
9723 SvTEMP_off(tmpRef);
9724 SvRV_set(sv, tmpRef);
9725
9726 return sv;
9727}
9728
9729/* newRV_inc is the official function name to use now.
9730 * newRV_inc is in fact #defined to newRV in sv.h
9731 */
9732
9733SV *
9734Perl_newRV(pTHX_ SV *const sv)
9735{
9736 PERL_ARGS_ASSERT_NEWRV;
9737
9738 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9739}
9740
9741/*
9742=for apidoc newSVsv
9743
9744Creates a new SV which is an exact duplicate of the original SV.
9745(Uses C<sv_setsv>.)
9746
9747=cut
9748*/
9749
9750SV *
9751Perl_newSVsv(pTHX_ SV *const old)
9752{
9753 SV *sv;
9754
9755 if (!old)
9756 return NULL;
9757 if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9758 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9759 return NULL;
9760 }
9761 /* Do this here, otherwise we leak the new SV if this croaks. */
9762 SvGETMAGIC(old);
9763 new_SV(sv);
9764 /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9765 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
9766 sv_setsv_flags(sv, old, SV_NOSTEAL);
9767 return sv;
9768}
9769
9770/*
9771=for apidoc sv_reset
9772
9773Underlying implementation for the C<reset> Perl function.
9774Note that the perl-level function is vaguely deprecated.
9775
9776=cut
9777*/
9778
9779void
9780Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9781{
9782 PERL_ARGS_ASSERT_SV_RESET;
9783
9784 sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9785}
9786
9787void
9788Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9789{
9790 char todo[PERL_UCHAR_MAX+1];
9791 const char *send;
9792
9793 if (!stash || SvTYPE(stash) != SVt_PVHV)
9794 return;
9795
9796 if (!s) { /* reset ?? searches */
9797 MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9798 if (mg) {
9799 const U32 count = mg->mg_len / sizeof(PMOP**);
9800 PMOP **pmp = (PMOP**) mg->mg_ptr;
9801 PMOP *const *const end = pmp + count;
9802
9803 while (pmp < end) {
9804#ifdef USE_ITHREADS
9805 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9806#else
9807 (*pmp)->op_pmflags &= ~PMf_USED;
9808#endif
9809 ++pmp;
9810 }
9811 }
9812 return;
9813 }
9814
9815 /* reset variables */
9816
9817 if (!HvARRAY(stash))
9818 return;
9819
9820 Zero(todo, 256, char);
9821 send = s + len;
9822 while (s < send) {
9823 I32 max;
9824 I32 i = (unsigned char)*s;
9825 if (s[1] == '-') {
9826 s += 2;
9827 }
9828 max = (unsigned char)*s++;
9829 for ( ; i <= max; i++) {
9830 todo[i] = 1;
9831 }
9832 for (i = 0; i <= (I32) HvMAX(stash); i++) {
9833 HE *entry;
9834 for (entry = HvARRAY(stash)[i];
9835 entry;
9836 entry = HeNEXT(entry))
9837 {
9838 GV *gv;
9839 SV *sv;
9840
9841 if (!todo[(U8)*HeKEY(entry)])
9842 continue;
9843 gv = MUTABLE_GV(HeVAL(entry));
9844 if (!isGV(gv))
9845 continue;
9846 sv = GvSV(gv);
9847 if (sv && !SvREADONLY(sv)) {
9848 SV_CHECK_THINKFIRST_COW_DROP(sv);
9849 if (!isGV(sv)) SvOK_off(sv);
9850 }
9851 if (GvAV(gv)) {
9852 av_clear(GvAV(gv));
9853 }
9854 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9855 hv_clear(GvHV(gv));
9856 }
9857 }
9858 }
9859 }
9860}
9861
9862/*
9863=for apidoc sv_2io
9864
9865Using various gambits, try to get an IO from an SV: the IO slot if its a
9866GV; or the recursive result if we're an RV; or the IO slot of the symbol
9867named after the PV if we're a string.
9868
9869'Get' magic is ignored on the C<sv> passed in, but will be called on
9870C<SvRV(sv)> if C<sv> is an RV.
9871
9872=cut
9873*/
9874
9875IO*
9876Perl_sv_2io(pTHX_ SV *const sv)
9877{
9878 IO* io;
9879 GV* gv;
9880
9881 PERL_ARGS_ASSERT_SV_2IO;
9882
9883 switch (SvTYPE(sv)) {
9884 case SVt_PVIO:
9885 io = MUTABLE_IO(sv);
9886 break;
9887 case SVt_PVGV:
9888 case SVt_PVLV:
9889 if (isGV_with_GP(sv)) {
9890 gv = MUTABLE_GV(sv);
9891 io = GvIO(gv);
9892 if (!io)
9893 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9894 HEKfARG(GvNAME_HEK(gv)));
9895 break;
9896 }
9897 /* FALLTHROUGH */
9898 default:
9899 if (!SvOK(sv))
9900 Perl_croak(aTHX_ PL_no_usym, "filehandle");
9901 if (SvROK(sv)) {
9902 SvGETMAGIC(SvRV(sv));
9903 return sv_2io(SvRV(sv));
9904 }
9905 gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9906 if (gv)
9907 io = GvIO(gv);
9908 else
9909 io = 0;
9910 if (!io) {
9911 SV *newsv = sv;
9912 if (SvGMAGICAL(sv)) {
9913 newsv = sv_newmortal();
9914 sv_setsv_nomg(newsv, sv);
9915 }
9916 Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9917 }
9918 break;
9919 }
9920 return io;
9921}
9922
9923/*
9924=for apidoc sv_2cv
9925
9926Using various gambits, try to get a CV from an SV; in addition, try if
9927possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9928The flags in C<lref> are passed to C<gv_fetchsv>.
9929
9930=cut
9931*/
9932
9933CV *
9934Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9935{
9936 GV *gv = NULL;
9937 CV *cv = NULL;
9938
9939 PERL_ARGS_ASSERT_SV_2CV;
9940
9941 if (!sv) {
9942 *st = NULL;
9943 *gvp = NULL;
9944 return NULL;
9945 }
9946 switch (SvTYPE(sv)) {
9947 case SVt_PVCV:
9948 *st = CvSTASH(sv);
9949 *gvp = NULL;
9950 return MUTABLE_CV(sv);
9951 case SVt_PVHV:
9952 case SVt_PVAV:
9953 *st = NULL;
9954 *gvp = NULL;
9955 return NULL;
9956 default:
9957 SvGETMAGIC(sv);
9958 if (SvROK(sv)) {
9959 if (SvAMAGIC(sv))
9960 sv = amagic_deref_call(sv, to_cv_amg);
9961
9962 sv = SvRV(sv);
9963 if (SvTYPE(sv) == SVt_PVCV) {
9964 cv = MUTABLE_CV(sv);
9965 *gvp = NULL;
9966 *st = CvSTASH(cv);
9967 return cv;
9968 }
9969 else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9970 gv = MUTABLE_GV(sv);
9971 else
9972 Perl_croak(aTHX_ "Not a subroutine reference");
9973 }
9974 else if (isGV_with_GP(sv)) {
9975 gv = MUTABLE_GV(sv);
9976 }
9977 else {
9978 gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9979 }
9980 *gvp = gv;
9981 if (!gv) {
9982 *st = NULL;
9983 return NULL;
9984 }
9985 /* Some flags to gv_fetchsv mean don't really create the GV */
9986 if (!isGV_with_GP(gv)) {
9987 *st = NULL;
9988 return NULL;
9989 }
9990 *st = GvESTASH(gv);
9991 if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9992 /* XXX this is probably not what they think they're getting.
9993 * It has the same effect as "sub name;", i.e. just a forward
9994 * declaration! */
9995 newSTUB(gv,0);
9996 }
9997 return GvCVu(gv);
9998 }
9999}
10000
10001/*
10002=for apidoc sv_true
10003
10004Returns true if the SV has a true value by Perl's rules.
10005Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
10006instead use an in-line version.
10007
10008=cut
10009*/
10010
10011I32
10012Perl_sv_true(pTHX_ SV *const sv)
10013{
10014 if (!sv)
10015 return 0;
10016 if (SvPOK(sv)) {
10017 const XPV* const tXpv = (XPV*)SvANY(sv);
10018 if (tXpv &&
10019 (tXpv->xpv_cur > 1 ||
10020 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10021 return 1;
10022 else
10023 return 0;
10024 }
10025 else {
10026 if (SvIOK(sv))
10027 return SvIVX(sv) != 0;
10028 else {
10029 if (SvNOK(sv))
10030 return SvNVX(sv) != 0.0;
10031 else
10032 return sv_2bool(sv);
10033 }
10034 }
10035}
10036
10037/*
10038=for apidoc sv_pvn_force
10039
10040Get a sensible string out of the SV somehow.
10041A private implementation of the C<SvPV_force> macro for compilers which
10042can't cope with complex macro expressions. Always use the macro instead.
10043
10044=for apidoc sv_pvn_force_flags
10045
10046Get a sensible string out of the SV somehow.
10047If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
10048appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10049implemented in terms of this function.
10050You normally want to use the various wrapper macros instead: see
10051C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10052
10053=cut
10054*/
10055
10056char *
10057Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10058{
10059 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10060
10061 if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10062 if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10063 sv_force_normal_flags(sv, 0);
10064
10065 if (SvPOK(sv)) {
10066 if (lp)
10067 *lp = SvCUR(sv);
10068 }
10069 else {
10070 char *s;
10071 STRLEN len;
10072
10073 if (SvTYPE(sv) > SVt_PVLV
10074 || isGV_with_GP(sv))
10075 /* diag_listed_as: Can't coerce %s to %s in %s */
10076 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10077 OP_DESC(PL_op));
10078 s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10079 if (!s) {
10080 s = (char *)"";
10081 }
10082 if (lp)
10083 *lp = len;
10084
10085 if (SvTYPE(sv) < SVt_PV ||
10086 s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
10087 if (SvROK(sv))
10088 sv_unref(sv);
10089 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
10090 SvGROW(sv, len + 1);
10091 Move(s,SvPVX(sv),len,char);
10092 SvCUR_set(sv, len);
10093 SvPVX(sv)[len] = '\0';
10094 }
10095 if (!SvPOK(sv)) {
10096 SvPOK_on(sv); /* validate pointer */
10097 SvTAINT(sv);
10098 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10099 PTR2UV(sv),SvPVX_const(sv)));
10100 }
10101 }
10102 (void)SvPOK_only_UTF8(sv);
10103 return SvPVX_mutable(sv);
10104}
10105
10106/*
10107=for apidoc sv_pvbyten_force
10108
10109The backend for the C<SvPVbytex_force> macro. Always use the macro
10110instead.
10111
10112=cut
10113*/
10114
10115char *
10116Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10117{
10118 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10119
10120 sv_pvn_force(sv,lp);
10121 sv_utf8_downgrade(sv,0);
10122 *lp = SvCUR(sv);
10123 return SvPVX(sv);
10124}
10125
10126/*
10127=for apidoc sv_pvutf8n_force
10128
10129The backend for the C<SvPVutf8x_force> macro. Always use the macro
10130instead.
10131
10132=cut
10133*/
10134
10135char *
10136Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10137{
10138 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10139
10140 sv_pvn_force(sv,0);
10141 sv_utf8_upgrade_nomg(sv);
10142 *lp = SvCUR(sv);
10143 return SvPVX(sv);
10144}
10145
10146/*
10147=for apidoc sv_reftype
10148
10149Returns a string describing what the SV is a reference to.
10150
10151If ob is true and the SV is blessed, the string is the class name,
10152otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10153
10154=cut
10155*/
10156
10157const char *
10158Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10159{
10160 PERL_ARGS_ASSERT_SV_REFTYPE;
10161 if (ob && SvOBJECT(sv)) {
10162 return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10163 }
10164 else {
10165 /* WARNING - There is code, for instance in mg.c, that assumes that
10166 * the only reason that sv_reftype(sv,0) would return a string starting
10167 * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10168 * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10169 * this routine inside other subs, and it saves time.
10170 * Do not change this assumption without searching for "dodgy type check" in
10171 * the code.
10172 * - Yves */
10173 switch (SvTYPE(sv)) {
10174 case SVt_NULL:
10175 case SVt_IV:
10176 case SVt_NV:
10177 case SVt_PV:
10178 case SVt_PVIV:
10179 case SVt_PVNV:
10180 case SVt_PVMG:
10181 if (SvVOK(sv))
10182 return "VSTRING";
10183 if (SvROK(sv))
10184 return "REF";
10185 else
10186 return "SCALAR";
10187
10188 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
10189 /* tied lvalues should appear to be
10190 * scalars for backwards compatibility */
10191 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10192 ? "SCALAR" : "LVALUE");
10193 case SVt_PVAV: return "ARRAY";
10194 case SVt_PVHV: return "HASH";
10195 case SVt_PVCV: return "CODE";
10196 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
10197 ? "GLOB" : "SCALAR");
10198 case SVt_PVFM: return "FORMAT";
10199 case SVt_PVIO: return "IO";
10200 case SVt_INVLIST: return "INVLIST";
10201 case SVt_REGEXP: return "REGEXP";
10202 default: return "UNKNOWN";
10203 }
10204 }
10205}
10206
10207/*
10208=for apidoc sv_ref
10209
10210Returns a SV describing what the SV passed in is a reference to.
10211
10212dst can be a SV to be set to the description or NULL, in which case a
10213mortal SV is returned.
10214
10215If ob is true and the SV is blessed, the description is the class
10216name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10217
10218=cut
10219*/
10220
10221SV *
10222Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10223{
10224 PERL_ARGS_ASSERT_SV_REF;
10225
10226 if (!dst)
10227 dst = sv_newmortal();
10228
10229 if (ob && SvOBJECT(sv)) {
10230 HvNAME_get(SvSTASH(sv))
10231 ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10232 : sv_setpvs(dst, "__ANON__");
10233 }
10234 else {
10235 const char * reftype = sv_reftype(sv, 0);
10236 sv_setpv(dst, reftype);
10237 }
10238 return dst;
10239}
10240
10241/*
10242=for apidoc sv_isobject
10243
10244Returns a boolean indicating whether the SV is an RV pointing to a blessed
10245object. If the SV is not an RV, or if the object is not blessed, then this
10246will return false.
10247
10248=cut
10249*/
10250
10251int
10252Perl_sv_isobject(pTHX_ SV *sv)
10253{
10254 if (!sv)
10255 return 0;
10256 SvGETMAGIC(sv);
10257 if (!SvROK(sv))
10258 return 0;
10259 sv = SvRV(sv);
10260 if (!SvOBJECT(sv))
10261 return 0;
10262 return 1;
10263}
10264
10265/*
10266=for apidoc sv_isa
10267
10268Returns a boolean indicating whether the SV is blessed into the specified
10269class. This does not check for subtypes; use C<sv_derived_from> to verify
10270an inheritance relationship.
10271
10272=cut
10273*/
10274
10275int
10276Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10277{
10278 const char *hvname;
10279
10280 PERL_ARGS_ASSERT_SV_ISA;
10281
10282 if (!sv)
10283 return 0;
10284 SvGETMAGIC(sv);
10285 if (!SvROK(sv))
10286 return 0;
10287 sv = SvRV(sv);
10288 if (!SvOBJECT(sv))
10289 return 0;
10290 hvname = HvNAME_get(SvSTASH(sv));
10291 if (!hvname)
10292 return 0;
10293
10294 return strEQ(hvname, name);
10295}
10296
10297/*
10298=for apidoc newSVrv
10299
10300Creates a new SV for the existing RV, C<rv>, to point to. If C<rv> is not an
10301RV then it will be upgraded to one. If C<classname> is non-null then the new
10302SV will be blessed in the specified package. The new SV is returned and its
10303reference count is 1. The reference count 1 is owned by C<rv>.
10304
10305=cut
10306*/
10307
10308SV*
10309Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10310{
10311 SV *sv;
10312
10313 PERL_ARGS_ASSERT_NEWSVRV;
10314
10315 new_SV(sv);
10316
10317 SV_CHECK_THINKFIRST_COW_DROP(rv);
10318
10319 if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10320 const U32 refcnt = SvREFCNT(rv);
10321 SvREFCNT(rv) = 0;
10322 sv_clear(rv);
10323 SvFLAGS(rv) = 0;
10324 SvREFCNT(rv) = refcnt;
10325
10326 sv_upgrade(rv, SVt_IV);
10327 } else if (SvROK(rv)) {
10328 SvREFCNT_dec(SvRV(rv));
10329 } else {
10330 prepare_SV_for_RV(rv);
10331 }
10332
10333 SvOK_off(rv);
10334 SvRV_set(rv, sv);
10335 SvROK_on(rv);
10336
10337 if (classname) {
10338 HV* const stash = gv_stashpv(classname, GV_ADD);
10339 (void)sv_bless(rv, stash);
10340 }
10341 return sv;
10342}
10343
10344SV *
10345Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10346{
10347 SV * const lv = newSV_type(SVt_PVLV);
10348 PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10349 LvTYPE(lv) = 'y';
10350 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10351 LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10352 LvSTARGOFF(lv) = ix;
10353 LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10354 return lv;
10355}
10356
10357/*
10358=for apidoc sv_setref_pv
10359
10360Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
10361argument will be upgraded to an RV. That RV will be modified to point to
10362the new SV. If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10363into the SV. The C<classname> argument indicates the package for the
10364blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
10365will have a reference count of 1, and the RV will be returned.
10366
10367Do not use with other Perl types such as HV, AV, SV, CV, because those
10368objects will become corrupted by the pointer copy process.
10369
10370Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10371
10372=cut
10373*/
10374
10375SV*
10376Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10377{
10378 PERL_ARGS_ASSERT_SV_SETREF_PV;
10379
10380 if (!pv) {
10381 sv_set_undef(rv);
10382 SvSETMAGIC(rv);
10383 }
10384 else
10385 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10386 return rv;
10387}
10388
10389/*
10390=for apidoc sv_setref_iv
10391
10392Copies an integer into a new SV, optionally blessing the SV. The C<rv>
10393argument will be upgraded to an RV. That RV will be modified to point to
10394the new SV. The C<classname> argument indicates the package for the
10395blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
10396will have a reference count of 1, and the RV will be returned.
10397
10398=cut
10399*/
10400
10401SV*
10402Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10403{
10404 PERL_ARGS_ASSERT_SV_SETREF_IV;
10405
10406 sv_setiv(newSVrv(rv,classname), iv);
10407 return rv;
10408}
10409
10410/*
10411=for apidoc sv_setref_uv
10412
10413Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
10414argument will be upgraded to an RV. That RV will be modified to point to
10415the new SV. The C<classname> argument indicates the package for the
10416blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
10417will have a reference count of 1, and the RV will be returned.
10418
10419=cut
10420*/
10421
10422SV*
10423Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10424{
10425 PERL_ARGS_ASSERT_SV_SETREF_UV;
10426
10427 sv_setuv(newSVrv(rv,classname), uv);
10428 return rv;
10429}
10430
10431/*
10432=for apidoc sv_setref_nv
10433
10434Copies a double into a new SV, optionally blessing the SV. The C<rv>
10435argument will be upgraded to an RV. That RV will be modified to point to
10436the new SV. The C<classname> argument indicates the package for the
10437blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
10438will have a reference count of 1, and the RV will be returned.
10439
10440=cut
10441*/
10442
10443SV*
10444Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10445{
10446 PERL_ARGS_ASSERT_SV_SETREF_NV;
10447
10448 sv_setnv(newSVrv(rv,classname), nv);
10449 return rv;
10450}
10451
10452/*
10453=for apidoc sv_setref_pvn
10454
10455Copies a string into a new SV, optionally blessing the SV. The length of the
10456string must be specified with C<n>. The C<rv> argument will be upgraded to
10457an RV. That RV will be modified to point to the new SV. The C<classname>
10458argument indicates the package for the blessing. Set C<classname> to
10459C<NULL> to avoid the blessing. The new SV will have a reference count
10460of 1, and the RV will be returned.
10461
10462Note that C<sv_setref_pv> copies the pointer while this copies the string.
10463
10464=cut
10465*/
10466
10467SV*
10468Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10469 const char *const pv, const STRLEN n)
10470{
10471 PERL_ARGS_ASSERT_SV_SETREF_PVN;
10472
10473 sv_setpvn(newSVrv(rv,classname), pv, n);
10474 return rv;
10475}
10476
10477/*
10478=for apidoc sv_bless
10479
10480Blesses an SV into a specified package. The SV must be an RV. The package
10481must be designated by its stash (see C<L</gv_stashpv>>). The reference count
10482of the SV is unaffected.
10483
10484=cut
10485*/
10486
10487SV*
10488Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10489{
10490 SV *tmpRef;
10491 HV *oldstash = NULL;
10492
10493 PERL_ARGS_ASSERT_SV_BLESS;
10494
10495 SvGETMAGIC(sv);
10496 if (!SvROK(sv))
10497 Perl_croak(aTHX_ "Can't bless non-reference value");
10498 tmpRef = SvRV(sv);
10499 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10500 if (SvREADONLY(tmpRef))
10501 Perl_croak_no_modify();
10502 if (SvOBJECT(tmpRef)) {
10503 oldstash = SvSTASH(tmpRef);
10504 }
10505 }
10506 SvOBJECT_on(tmpRef);
10507 SvUPGRADE(tmpRef, SVt_PVMG);
10508 SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10509 SvREFCNT_dec(oldstash);
10510
10511 if(SvSMAGICAL(tmpRef))
10512 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10513 mg_set(tmpRef);
10514
10515
10516
10517 return sv;
10518}
10519
10520/* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10521 * as it is after unglobbing it.
10522 */
10523
10524PERL_STATIC_INLINE void
10525S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10526{
10527 void *xpvmg;
10528 HV *stash;
10529 SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10530
10531 PERL_ARGS_ASSERT_SV_UNGLOB;
10532
10533 assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10534 SvFAKE_off(sv);
10535 if (!(flags & SV_COW_DROP_PV))
10536 gv_efullname3(temp, MUTABLE_GV(sv), "*");
10537
10538 SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10539 if (GvGP(sv)) {
10540 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10541 && HvNAME_get(stash))
10542 mro_method_changed_in(stash);
10543 gp_free(MUTABLE_GV(sv));
10544 }
10545 if (GvSTASH(sv)) {
10546 sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10547 GvSTASH(sv) = NULL;
10548 }
10549 GvMULTI_off(sv);
10550 if (GvNAME_HEK(sv)) {
10551 unshare_hek(GvNAME_HEK(sv));
10552 }
10553 isGV_with_GP_off(sv);
10554
10555 if(SvTYPE(sv) == SVt_PVGV) {
10556 /* need to keep SvANY(sv) in the right arena */
10557 xpvmg = new_XPVMG();
10558 StructCopy(SvANY(sv), xpvmg, XPVMG);
10559 del_XPVGV(SvANY(sv));
10560 SvANY(sv) = xpvmg;
10561
10562 SvFLAGS(sv) &= ~SVTYPEMASK;
10563 SvFLAGS(sv) |= SVt_PVMG;
10564 }
10565
10566 /* Intentionally not calling any local SET magic, as this isn't so much a
10567 set operation as merely an internal storage change. */
10568 if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10569 else sv_setsv_flags(sv, temp, 0);
10570
10571 if ((const GV *)sv == PL_last_in_gv)
10572 PL_last_in_gv = NULL;
10573 else if ((const GV *)sv == PL_statgv)
10574 PL_statgv = NULL;
10575}
10576
10577/*
10578=for apidoc sv_unref_flags
10579
10580Unsets the RV status of the SV, and decrements the reference count of
10581whatever was being referenced by the RV. This can almost be thought of
10582as a reversal of C<newSVrv>. The C<cflags> argument can contain
10583C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10584(otherwise the decrementing is conditional on the reference count being
10585different from one or the reference being a readonly SV).
10586See C<L</SvROK_off>>.
10587
10588=cut
10589*/
10590
10591void
10592Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10593{
10594 SV* const target = SvRV(ref);
10595
10596 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10597
10598 if (SvWEAKREF(ref)) {
10599 sv_del_backref(target, ref);
10600 SvWEAKREF_off(ref);
10601 SvRV_set(ref, NULL);
10602 return;
10603 }
10604 SvRV_set(ref, NULL);
10605 SvROK_off(ref);
10606 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10607 assigned to as BEGIN {$a = \"Foo"} will fail. */
10608 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10609 SvREFCNT_dec_NN(target);
10610 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10611 sv_2mortal(target); /* Schedule for freeing later */
10612}
10613
10614/*
10615=for apidoc sv_untaint
10616
10617Untaint an SV. Use C<SvTAINTED_off> instead.
10618
10619=cut
10620*/
10621
10622void
10623Perl_sv_untaint(pTHX_ SV *const sv)
10624{
10625 PERL_ARGS_ASSERT_SV_UNTAINT;
10626 PERL_UNUSED_CONTEXT;
10627
10628 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10629 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10630 if (mg)
10631 mg->mg_len &= ~1;
10632 }
10633}
10634
10635/*
10636=for apidoc sv_tainted
10637
10638Test an SV for taintedness. Use C<SvTAINTED> instead.
10639
10640=cut
10641*/
10642
10643bool
10644Perl_sv_tainted(pTHX_ SV *const sv)
10645{
10646 PERL_ARGS_ASSERT_SV_TAINTED;
10647 PERL_UNUSED_CONTEXT;
10648
10649 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10650 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10651 if (mg && (mg->mg_len & 1) )
10652 return TRUE;
10653 }
10654 return FALSE;
10655}
10656
10657#ifndef NO_MATHOMS /* Can't move these to mathoms.c because call uiv_2buf(),
10658 private to this file */
10659
10660/*
10661=for apidoc sv_setpviv
10662
10663Copies an integer into the given SV, also updating its string value.
10664Does not handle 'set' magic. See C<L</sv_setpviv_mg>>.
10665
10666=cut
10667*/
10668
10669void
10670Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10671{
10672 char buf[TYPE_CHARS(UV)];
10673 char *ebuf;
10674 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10675
10676 PERL_ARGS_ASSERT_SV_SETPVIV;
10677
10678 sv_setpvn(sv, ptr, ebuf - ptr);
10679}
10680
10681/*
10682=for apidoc sv_setpviv_mg
10683
10684Like C<sv_setpviv>, but also handles 'set' magic.
10685
10686=cut
10687*/
10688
10689void
10690Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10691{
10692 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10693
10694 sv_setpviv(sv, iv);
10695 SvSETMAGIC(sv);
10696}
10697
10698#endif /* NO_MATHOMS */
10699
10700#if defined(PERL_IMPLICIT_CONTEXT)
10701
10702/* pTHX_ magic can't cope with varargs, so this is a no-context
10703 * version of the main function, (which may itself be aliased to us).
10704 * Don't access this version directly.
10705 */
10706
10707void
10708Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10709{
10710 dTHX;
10711 va_list args;
10712
10713 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10714
10715 va_start(args, pat);
10716 sv_vsetpvf(sv, pat, &args);
10717 va_end(args);
10718}
10719
10720/* pTHX_ magic can't cope with varargs, so this is a no-context
10721 * version of the main function, (which may itself be aliased to us).
10722 * Don't access this version directly.
10723 */
10724
10725void
10726Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10727{
10728 dTHX;
10729 va_list args;
10730
10731 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10732
10733 va_start(args, pat);
10734 sv_vsetpvf_mg(sv, pat, &args);
10735 va_end(args);
10736}
10737#endif
10738
10739/*
10740=for apidoc sv_setpvf
10741
10742Works like C<sv_catpvf> but copies the text into the SV instead of
10743appending it. Does not handle 'set' magic. See C<L</sv_setpvf_mg>>.
10744
10745=cut
10746*/
10747
10748void
10749Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10750{
10751 va_list args;
10752
10753 PERL_ARGS_ASSERT_SV_SETPVF;
10754
10755 va_start(args, pat);
10756 sv_vsetpvf(sv, pat, &args);
10757 va_end(args);
10758}
10759
10760/*
10761=for apidoc sv_vsetpvf
10762
10763Works like C<sv_vcatpvf> but copies the text into the SV instead of
10764appending it. Does not handle 'set' magic. See C<L</sv_vsetpvf_mg>>.
10765
10766Usually used via its frontend C<sv_setpvf>.
10767
10768=cut
10769*/
10770
10771void
10772Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10773{
10774 PERL_ARGS_ASSERT_SV_VSETPVF;
10775
10776 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10777}
10778
10779/*
10780=for apidoc sv_setpvf_mg
10781
10782Like C<sv_setpvf>, but also handles 'set' magic.
10783
10784=cut
10785*/
10786
10787void
10788Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10789{
10790 va_list args;
10791
10792 PERL_ARGS_ASSERT_SV_SETPVF_MG;
10793
10794 va_start(args, pat);
10795 sv_vsetpvf_mg(sv, pat, &args);
10796 va_end(args);
10797}
10798
10799/*
10800=for apidoc sv_vsetpvf_mg
10801
10802Like C<sv_vsetpvf>, but also handles 'set' magic.
10803
10804Usually used via its frontend C<sv_setpvf_mg>.
10805
10806=cut
10807*/
10808
10809void
10810Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10811{
10812 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10813
10814 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10815 SvSETMAGIC(sv);
10816}
10817
10818#if defined(PERL_IMPLICIT_CONTEXT)
10819
10820/* pTHX_ magic can't cope with varargs, so this is a no-context
10821 * version of the main function, (which may itself be aliased to us).
10822 * Don't access this version directly.
10823 */
10824
10825void
10826Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10827{
10828 dTHX;
10829 va_list args;
10830
10831 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10832
10833 va_start(args, pat);
10834 sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10835 va_end(args);
10836}
10837
10838/* pTHX_ magic can't cope with varargs, so this is a no-context
10839 * version of the main function, (which may itself be aliased to us).
10840 * Don't access this version directly.
10841 */
10842
10843void
10844Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10845{
10846 dTHX;
10847 va_list args;
10848
10849 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10850
10851 va_start(args, pat);
10852 sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10853 SvSETMAGIC(sv);
10854 va_end(args);
10855}
10856#endif
10857
10858/*
10859=for apidoc sv_catpvf
10860
10861Processes its arguments like C<sv_catpvfn>, and appends the formatted
10862output to an SV. As with C<sv_catpvfn> called with a non-null C-style
10863variable argument list, argument reordering is not supported.
10864If the appended data contains "wide" characters
10865(including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10866and characters >255 formatted with C<%c>), the original SV might get
10867upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
10868C<L</sv_catpvf_mg>>. If the original SV was UTF-8, the pattern should be
10869valid UTF-8; if the original SV was bytes, the pattern should be too.
10870
10871=cut */
10872
10873void
10874Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10875{
10876 va_list args;
10877
10878 PERL_ARGS_ASSERT_SV_CATPVF;
10879
10880 va_start(args, pat);
10881 sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10882 va_end(args);
10883}
10884
10885/*
10886=for apidoc sv_vcatpvf
10887
10888Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10889variable argument list, and appends the formatted output
10890to an SV. Does not handle 'set' magic. See C<L</sv_vcatpvf_mg>>.
10891
10892Usually used via its frontend C<sv_catpvf>.
10893
10894=cut
10895*/
10896
10897void
10898Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10899{
10900 PERL_ARGS_ASSERT_SV_VCATPVF;
10901
10902 sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10903}
10904
10905/*
10906=for apidoc sv_catpvf_mg
10907
10908Like C<sv_catpvf>, but also handles 'set' magic.
10909
10910=cut
10911*/
10912
10913void
10914Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10915{
10916 va_list args;
10917
10918 PERL_ARGS_ASSERT_SV_CATPVF_MG;
10919
10920 va_start(args, pat);
10921 sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10922 SvSETMAGIC(sv);
10923 va_end(args);
10924}
10925
10926/*
10927=for apidoc sv_vcatpvf_mg
10928
10929Like C<sv_vcatpvf>, but also handles 'set' magic.
10930
10931Usually used via its frontend C<sv_catpvf_mg>.
10932
10933=cut
10934*/
10935
10936void
10937Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10938{
10939 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10940
10941 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10942 SvSETMAGIC(sv);
10943}
10944
10945/*
10946=for apidoc sv_vsetpvfn
10947
10948Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10949appending it.
10950
10951Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10952
10953=cut
10954*/
10955
10956void
10957Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10958 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10959{
10960 PERL_ARGS_ASSERT_SV_VSETPVFN;
10961
10962 SvPVCLEAR(sv);
10963 sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10964}
10965
10966
10967/*
10968 * Warn of missing argument to sprintf. The value used in place of such
10969 * arguments should be &PL_sv_no; an undefined value would yield
10970 * inappropriate "use of uninit" warnings [perl #71000].
10971 */
10972STATIC void
10973S_warn_vcatpvfn_missing_argument(pTHX) {
10974 if (ckWARN(WARN_MISSING)) {
10975 Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10976 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10977 }
10978}
10979
10980
10981STATIC I32
10982S_expect_number(pTHX_ char **const pattern)
10983{
10984 I32 var = 0;
10985
10986 PERL_ARGS_ASSERT_EXPECT_NUMBER;
10987
10988 switch (**pattern) {
10989 case '1': case '2': case '3':
10990 case '4': case '5': case '6':
10991 case '7': case '8': case '9':
10992 var = *(*pattern)++ - '0';
10993 while (isDIGIT(**pattern)) {
10994 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10995 if (tmp < var)
10996 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10997 var = tmp;
10998 }
10999 }
11000 return var;
11001}
11002
11003STATIC char *
11004S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11005{
11006 const int neg = nv < 0;
11007 UV uv;
11008
11009 PERL_ARGS_ASSERT_F0CONVERT;
11010
11011 if (UNLIKELY(Perl_isinfnan(nv))) {
11012 STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
11013 *len = n;
11014 return endbuf - n;
11015 }
11016 if (neg)
11017 nv = -nv;
11018 if (nv < UV_MAX) {
11019 char *p = endbuf;
11020 nv += 0.5;
11021 uv = (UV)nv;
11022 if (uv & 1 && uv == nv)
11023 uv--; /* Round to even */
11024 do {
11025 const unsigned dig = uv % 10;
11026 *--p = '0' + dig;
11027 } while (uv /= 10);
11028 if (neg)
11029 *--p = '-';
11030 *len = endbuf - p;
11031 return p;
11032 }
11033 return NULL;
11034}
11035
11036
11037/*
11038=for apidoc sv_vcatpvfn
11039
11040=for apidoc sv_vcatpvfn_flags
11041
11042Processes its arguments like C<vsprintf> and appends the formatted output
11043to an SV. Uses an array of SVs if the C-style variable argument list is
11044missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11045or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11046C<va_list> argument list with a format string that uses argument reordering
11047will yield an exception.
11048
11049When running with taint checks enabled, indicates via
11050C<maybe_tainted> if results are untrustworthy (often due to the use of
11051locales).
11052
11053If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11054
11055Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11056
11057=cut
11058*/
11059
11060#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
11061 vecstr = (U8*)SvPV_const(vecsv,veclen);\
11062 vec_utf8 = DO_UTF8(vecsv);
11063
11064/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11065
11066void
11067Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11068 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
11069{
11070 PERL_ARGS_ASSERT_SV_VCATPVFN;
11071
11072 sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11073}
11074
11075#ifdef LONGDOUBLE_DOUBLEDOUBLE
11076/* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11077 * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11078 * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11079 * after the first 1023 zero bits.
11080 *
11081 * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11082 * of dynamically growing buffer might be better, start at just 16 bytes
11083 * (for example) and grow only when necessary. Or maybe just by looking
11084 * at the exponents of the two doubles? */
11085# define DOUBLEDOUBLE_MAXBITS 2098
11086#endif
11087
11088/* vhex will contain the values (0..15) of the hex digits ("nybbles"
11089 * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11090 * per xdigit. For the double-double case, this can be rather many.
11091 * The non-double-double-long-double overshoots since all bits of NV
11092 * are not mantissa bits, there are also exponent bits. */
11093#ifdef LONGDOUBLE_DOUBLEDOUBLE
11094# define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11095#else
11096# define VHEX_SIZE (1+(NVSIZE * 8)/4)
11097#endif
11098
11099/* If we do not have a known long double format, (including not using
11100 * long doubles, or long doubles being equal to doubles) then we will
11101 * fall back to the ldexp/frexp route, with which we can retrieve at
11102 * most as many bits as our widest unsigned integer type is. We try
11103 * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11104 *
11105 * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11106 * set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11107 */
11108#if defined(HAS_QUAD) && defined(Uquad_t)
11109# define MANTISSATYPE Uquad_t
11110# define MANTISSASIZE 8
11111#else
11112# define MANTISSATYPE UV
11113# define MANTISSASIZE UVSIZE
11114#endif
11115
11116#if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11117# define HEXTRACT_LITTLE_ENDIAN
11118#elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11119# define HEXTRACT_BIG_ENDIAN
11120#else
11121# define HEXTRACT_MIX_ENDIAN
11122#endif
11123
11124/* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
11125 * the hexadecimal values (for %a/%A). The nv is the NV where the value
11126 * are being extracted from (either directly from the long double in-memory
11127 * presentation, or from the uquad computed via frexp+ldexp). frexp also
11128 * is used to update the exponent. The subnormal is set to true
11129 * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11130 * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11131 *
11132 * The tricky part is that S_hextract() needs to be called twice:
11133 * the first time with vend as NULL, and the second time with vend as
11134 * the pointer returned by the first call. What happens is that on
11135 * the first round the output size is computed, and the intended
11136 * extraction sanity checked. On the second round the actual output
11137 * (the extraction of the hexadecimal values) takes place.
11138 * Sanity failures cause fatal failures during both rounds. */
11139STATIC U8*
11140S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11141 U8* vhex, U8* vend)
11142{
11143 U8* v = vhex;
11144 int ix;
11145 int ixmin = 0, ixmax = 0;
11146
11147 /* XXX Inf/NaN are not handled here, since it is
11148 * assumed they are to be output as "Inf" and "NaN". */
11149
11150 /* These macros are just to reduce typos, they have multiple
11151 * repetitions below, but usually only one (or sometimes two)
11152 * of them is really being used. */
11153 /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11154#define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11155#define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11156#define HEXTRACT_OUTPUT(ix) \
11157 STMT_START { \
11158 HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11159 } STMT_END
11160#define HEXTRACT_COUNT(ix, c) \
11161 STMT_START { \
11162 v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11163 } STMT_END
11164#define HEXTRACT_BYTE(ix) \
11165 STMT_START { \
11166 if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11167 } STMT_END
11168#define HEXTRACT_LO_NYBBLE(ix) \
11169 STMT_START { \
11170 if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11171 } STMT_END
11172 /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11173 * to make it look less odd when the top bits of a NV
11174 * are extracted using HEXTRACT_LO_NYBBLE: the highest
11175 * order bits can be in the "low nybble" of a byte. */
11176#define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11177#define HEXTRACT_BYTES_LE(a, b) \
11178 for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11179#define HEXTRACT_BYTES_BE(a, b) \
11180 for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11181#define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11182#define HEXTRACT_IMPLICIT_BIT(nv) \
11183 STMT_START { \
11184 if (!*subnormal) { \
11185 if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11186 } \
11187 } STMT_END
11188
11189/* Most formats do. Those which don't should undef this.
11190 *
11191 * But also note that IEEE 754 subnormals do not have it, or,
11192 * expressed alternatively, their implicit bit is zero. */
11193#define HEXTRACT_HAS_IMPLICIT_BIT
11194
11195/* Many formats do. Those which don't should undef this. */
11196#define HEXTRACT_HAS_TOP_NYBBLE
11197
11198 /* HEXTRACTSIZE is the maximum number of xdigits. */
11199#if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11200# define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11201#else
11202# define HEXTRACTSIZE 2 * NVSIZE
11203#endif
11204
11205 const U8* vmaxend = vhex + HEXTRACTSIZE;
11206 PERL_UNUSED_VAR(ix); /* might happen */
11207 (void)Perl_frexp(PERL_ABS(nv), exponent);
11208 *subnormal = FALSE;
11209 if (vend && (vend <= vhex || vend > vmaxend)) {
11210 /* diag_listed_as: Hexadecimal float: internal error (%s) */
11211 Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11212 }
11213 {
11214 /* First check if using long doubles. */
11215#if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11216# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11217 /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11218 * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11219 /* The bytes 13..0 are the mantissa/fraction,
11220 * the 15,14 are the sign+exponent. */
11221 const U8* nvp = (const U8*)(&nv);
11222 HEXTRACT_GET_SUBNORMAL(nv);
11223 HEXTRACT_IMPLICIT_BIT(nv);
11224# undef HEXTRACT_HAS_TOP_NYBBLE
11225 HEXTRACT_BYTES_LE(13, 0);
11226# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11227 /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11228 * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11229 /* The bytes 2..15 are the mantissa/fraction,
11230 * the 0,1 are the sign+exponent. */
11231 const U8* nvp = (const U8*)(&nv);
11232 HEXTRACT_GET_SUBNORMAL(nv);
11233 HEXTRACT_IMPLICIT_BIT(nv);
11234# undef HEXTRACT_HAS_TOP_NYBBLE
11235 HEXTRACT_BYTES_BE(2, 15);
11236# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11237 /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11238 * significand, 15 bits of exponent, 1 bit of sign. No implicit bit.
11239 * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11240 * and OS X), meaning that 2 or 6 bytes are empty padding. */
11241 /* The bytes 0..1 are the sign+exponent,
11242 * the bytes 2..9 are the mantissa/fraction. */
11243 const U8* nvp = (const U8*)(&nv);
11244# undef HEXTRACT_HAS_IMPLICIT_BIT
11245# undef HEXTRACT_HAS_TOP_NYBBLE
11246 HEXTRACT_GET_SUBNORMAL(nv);
11247 HEXTRACT_BYTES_LE(7, 0);
11248# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11249 /* Does this format ever happen? (Wikipedia says the Motorola
11250 * 6888x math coprocessors used format _like_ this but padded
11251 * to 96 bits with 16 unused bits between the exponent and the
11252 * mantissa.) */
11253 const U8* nvp = (const U8*)(&nv);
11254# undef HEXTRACT_HAS_IMPLICIT_BIT
11255# undef HEXTRACT_HAS_TOP_NYBBLE
11256 HEXTRACT_GET_SUBNORMAL(nv);
11257 HEXTRACT_BYTES_BE(0, 7);
11258# else
11259# define HEXTRACT_FALLBACK
11260 /* Double-double format: two doubles next to each other.
11261 * The first double is the high-order one, exactly like
11262 * it would be for a "lone" double. The second double
11263 * is shifted down using the exponent so that that there
11264 * are no common bits. The tricky part is that the value
11265 * of the double-double is the SUM of the two doubles and
11266 * the second one can be also NEGATIVE.
11267 *
11268 * Because of this tricky construction the bytewise extraction we
11269 * use for the other long double formats doesn't work, we must
11270 * extract the values bit by bit.
11271 *
11272 * The little-endian double-double is used .. somewhere?
11273 *
11274 * The big endian double-double is used in e.g. PPC/Power (AIX)
11275 * and MIPS (SGI).
11276 *
11277 * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11278 * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11279 * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11280 */
11281# endif
11282#else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11283 /* Using normal doubles, not long doubles.
11284 *
11285 * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11286 * bytes, since we might need to handle printf precision, and
11287 * also need to insert the radix. */
11288# if NVSIZE == 8
11289# ifdef HEXTRACT_LITTLE_ENDIAN
11290 /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11291 const U8* nvp = (const U8*)(&nv);
11292 HEXTRACT_GET_SUBNORMAL(nv);
11293 HEXTRACT_IMPLICIT_BIT(nv);
11294 HEXTRACT_TOP_NYBBLE(6);
11295 HEXTRACT_BYTES_LE(5, 0);
11296# elif defined(HEXTRACT_BIG_ENDIAN)
11297 /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11298 const U8* nvp = (const U8*)(&nv);
11299 HEXTRACT_GET_SUBNORMAL(nv);
11300 HEXTRACT_IMPLICIT_BIT(nv);
11301 HEXTRACT_TOP_NYBBLE(1);
11302 HEXTRACT_BYTES_BE(2, 7);
11303# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11304 /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11305 const U8* nvp = (const U8*)(&nv);
11306 HEXTRACT_GET_SUBNORMAL(nv);
11307 HEXTRACT_IMPLICIT_BIT(nv);
11308 HEXTRACT_TOP_NYBBLE(2); /* 6 */
11309 HEXTRACT_BYTE(1); /* 5 */
11310 HEXTRACT_BYTE(0); /* 4 */
11311 HEXTRACT_BYTE(7); /* 3 */
11312 HEXTRACT_BYTE(6); /* 2 */
11313 HEXTRACT_BYTE(5); /* 1 */
11314 HEXTRACT_BYTE(4); /* 0 */
11315# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11316 /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11317 const U8* nvp = (const U8*)(&nv);
11318 HEXTRACT_GET_SUBNORMAL(nv);
11319 HEXTRACT_IMPLICIT_BIT(nv);
11320 HEXTRACT_TOP_NYBBLE(5); /* 6 */
11321 HEXTRACT_BYTE(6); /* 5 */
11322 HEXTRACT_BYTE(7); /* 4 */
11323 HEXTRACT_BYTE(0); /* 3 */
11324 HEXTRACT_BYTE(1); /* 2 */
11325 HEXTRACT_BYTE(2); /* 1 */
11326 HEXTRACT_BYTE(3); /* 0 */
11327# else
11328# define HEXTRACT_FALLBACK
11329# endif
11330# else
11331# define HEXTRACT_FALLBACK
11332# endif
11333#endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11334# ifdef HEXTRACT_FALLBACK
11335 HEXTRACT_GET_SUBNORMAL(nv);
11336# undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11337 /* The fallback is used for the double-double format, and
11338 * for unknown long double formats, and for unknown double
11339 * formats, or in general unknown NV formats. */
11340 if (nv == (NV)0.0) {
11341 if (vend)
11342 *v++ = 0;
11343 else
11344 v++;
11345 *exponent = 0;
11346 }
11347 else {
11348 NV d = nv < 0 ? -nv : nv;
11349 NV e = (NV)1.0;
11350 U8 ha = 0x0; /* hexvalue accumulator */
11351 U8 hd = 0x8; /* hexvalue digit */
11352
11353 /* Shift d and e (and update exponent) so that e <= d < 2*e,
11354 * this is essentially manual frexp(). Multiplying by 0.5 and
11355 * doubling should be lossless in binary floating point. */
11356
11357 *exponent = 1;
11358
11359 while (e > d) {
11360 e *= (NV)0.5;
11361 (*exponent)--;
11362 }
11363 /* Now d >= e */
11364
11365 while (d >= e + e) {
11366 e += e;
11367 (*exponent)++;
11368 }
11369 /* Now e <= d < 2*e */
11370
11371 /* First extract the leading hexdigit (the implicit bit). */
11372 if (d >= e) {
11373 d -= e;
11374 if (vend)
11375 *v++ = 1;
11376 else
11377 v++;
11378 }
11379 else {
11380 if (vend)
11381 *v++ = 0;
11382 else
11383 v++;
11384 }
11385 e *= (NV)0.5;
11386
11387 /* Then extract the remaining hexdigits. */
11388 while (d > (NV)0.0) {
11389 if (d >= e) {
11390 ha |= hd;
11391 d -= e;
11392 }
11393 if (hd == 1) {
11394 /* Output or count in groups of four bits,
11395 * that is, when the hexdigit is down to one. */
11396 if (vend)
11397 *v++ = ha;
11398 else
11399 v++;
11400 /* Reset the hexvalue. */
11401 ha = 0x0;
11402 hd = 0x8;
11403 }
11404 else
11405 hd >>= 1;
11406 e *= (NV)0.5;
11407 }
11408
11409 /* Flush possible pending hexvalue. */
11410 if (ha) {
11411 if (vend)
11412 *v++ = ha;
11413 else
11414 v++;
11415 }
11416 }
11417# endif
11418 }
11419 /* Croak for various reasons: if the output pointer escaped the
11420 * output buffer, if the extraction index escaped the extraction
11421 * buffer, or if the ending output pointer didn't match the
11422 * previously computed value. */
11423 if (v <= vhex || v - vhex >= VHEX_SIZE ||
11424 /* For double-double the ixmin and ixmax stay at zero,
11425 * which is convenient since the HEXTRACTSIZE is tricky
11426 * for double-double. */
11427 ixmin < 0 || ixmax >= NVSIZE ||
11428 (vend && v != vend)) {
11429 /* diag_listed_as: Hexadecimal float: internal error (%s) */
11430 Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11431 }
11432 return v;
11433}
11434
11435/* Helper for sv_vcatpvfn_flags(). */
11436#define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr) \
11437 STMT_START { \
11438 if (in_range) \
11439 (var) = (expr); \
11440 else { \
11441 (var) = &PL_sv_no; /* [perl #71000] */ \
11442 arg_missing = TRUE; \
11443 } \
11444 } STMT_END
11445
11446void
11447
11448
11449/* This function assumes that pat has the same utf8-ness as sv.
11450 * It's the caller's responsibility to ensure that this is so.
11451 */
11452
11453Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11454 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11455 const U32 flags)
11456{
11457 char *p;
11458 char *q;
11459 const char *patend;
11460 STRLEN origlen;
11461 I32 svix = 0;
11462 static const char nullstr[] = "(null)";
11463 SV *argsv = NULL;
11464 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
11465 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11466 SV *nsv = NULL;
11467 /* Times 4: a decimal digit takes more than 3 binary digits.
11468 * NV_DIG: mantissa takes than many decimal digits.
11469 * Plus 32: Playing safe. */
11470 char ebuf[IV_DIG * 4 + NV_DIG + 32];
11471 bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11472 bool hexfp = FALSE; /* hexadecimal floating point? */
11473
11474 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11475
11476 PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11477 PERL_UNUSED_ARG(maybe_tainted);
11478
11479 if (flags & SV_GMAGIC)
11480 SvGETMAGIC(sv);
11481
11482 /* no matter what, this is a string now */
11483 (void)SvPV_force_nomg(sv, origlen);
11484
11485 /* special-case "", "%s", and "%-p" (SVf - see below) */
11486 if (patlen == 0) {
11487 if (svmax && ckWARN(WARN_REDUNDANT))
11488 Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11489 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11490 return;
11491 }
11492 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11493 if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11494 Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11495 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11496
11497 if (args) {
11498 const char * const s = va_arg(*args, char*);
11499 sv_catpv_nomg(sv, s ? s : nullstr);
11500 }
11501 else if (svix < svmax) {
11502 /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11503 SvGETMAGIC(*svargs);
11504 sv_catsv_nomg(sv, *svargs);
11505 }
11506 else
11507 S_warn_vcatpvfn_missing_argument(aTHX);
11508 return;
11509 }
11510 if (args && patlen == 3 && pat[0] == '%' &&
11511 pat[1] == '-' && pat[2] == 'p') {
11512 if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11513 Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11514 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11515 argsv = MUTABLE_SV(va_arg(*args, void*));
11516 sv_catsv_nomg(sv, argsv);
11517 return;
11518 }
11519
11520#if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11521 /* special-case "%.<number>[gf]" */
11522 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11523 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11524 unsigned digits = 0;
11525 const char *pp;
11526
11527 pp = pat + 2;
11528 while (*pp >= '0' && *pp <= '9')
11529 digits = 10 * digits + (*pp++ - '0');
11530
11531 /* XXX: Why do this `svix < svmax` test? Couldn't we just
11532 format the first argument and WARN_REDUNDANT if svmax > 1?
11533 Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11534 if (pp + 1 == pat + patlen && svix < svmax) {
11535 const NV nv = SvNV(*svargs);
11536 if (LIKELY(!Perl_isinfnan(nv))) {
11537 if (*pp == 'g') {
11538 /* Add check for digits != 0 because it seems that some
11539 gconverts are buggy in this case, and we don't yet have
11540 a Configure test for this. */
11541 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11542 /* 0, point, slack */
11543 STORE_LC_NUMERIC_SET_TO_NEEDED();
11544 SNPRINTF_G(nv, ebuf, size, digits);
11545 sv_catpv_nomg(sv, ebuf);
11546 if (*ebuf) /* May return an empty string for digits==0 */
11547 return;
11548 }
11549 } else if (!digits) {
11550 STRLEN l;
11551
11552 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11553 sv_catpvn_nomg(sv, p, l);
11554 return;
11555 }
11556 }
11557 }
11558 }
11559 }
11560#endif /* !USE_LONG_DOUBLE */
11561
11562 if (!args && svix < svmax && DO_UTF8(*svargs))
11563 has_utf8 = TRUE;
11564
11565 patend = (char*)pat + patlen;
11566 for (p = (char*)pat; p < patend; p = q) {
11567 bool alt = FALSE;
11568 bool left = FALSE;
11569 bool vectorize = FALSE;
11570 bool vectorarg = FALSE;
11571 bool vec_utf8 = FALSE;
11572 char fill = ' ';
11573 char plus = 0;
11574 char intsize = 0;
11575 STRLEN width = 0;
11576 STRLEN zeros = 0;
11577 bool has_precis = FALSE;
11578 STRLEN precis = 0;
11579 const I32 osvix = svix;
11580 bool is_utf8 = FALSE; /* is this item utf8? */
11581 bool used_explicit_ix = FALSE;
11582 bool arg_missing = FALSE;
11583#ifdef HAS_LDBL_SPRINTF_BUG
11584 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11585 with sfio - Allen <allens@cpan.org> */
11586 bool fix_ldbl_sprintf_bug = FALSE;
11587#endif
11588
11589 char esignbuf[4];
11590 U8 utf8buf[UTF8_MAXBYTES+1];
11591 STRLEN esignlen = 0;
11592
11593 const char *eptr = NULL;
11594 const char *fmtstart;
11595 STRLEN elen = 0;
11596 SV *vecsv = NULL;
11597 const U8 *vecstr = NULL;
11598 STRLEN veclen = 0;
11599 char c = 0;
11600 unsigned base = 0;
11601 IV iv = 0;
11602 UV uv = 0;
11603 /* We need a long double target in case HAS_LONG_DOUBLE,
11604 * even without USE_LONG_DOUBLE, so that we can printf with
11605 * long double formats, even without NV being long double.
11606 * But we call the target 'fv' instead of 'nv', since most of
11607 * the time it is not (most compilers these days recognize
11608 * "long double", even if only as a synonym for "double").
11609 */
11610#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11611 defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11612 long double fv;
11613# ifdef Perl_isfinitel
11614# define FV_ISFINITE(x) Perl_isfinitel(x)
11615# endif
11616# define FV_GF PERL_PRIgldbl
11617# if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11618 /* Work around breakage in OTS$CVT_FLOAT_T_X */
11619# define NV_TO_FV(nv,fv) STMT_START { \
11620 double _dv = nv; \
11621 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11622 } STMT_END
11623# else
11624# define NV_TO_FV(nv,fv) (fv)=(nv)
11625# endif
11626#else
11627 NV fv;
11628# define FV_GF NVgf
11629# define NV_TO_FV(nv,fv) (fv)=(nv)
11630#endif
11631#ifndef FV_ISFINITE
11632# define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11633#endif
11634 NV nv;
11635 STRLEN float_need; /* what PL_efloatsize needs to become */
11636 const char *dotstr = ".";
11637 STRLEN dotstrlen = 1;
11638 I32 efix = 0; /* explicit format parameter index */
11639 I32 ewix = 0; /* explicit width index */
11640 I32 epix = 0; /* explicit precision index */
11641 I32 evix = 0; /* explicit vector index */
11642 bool asterisk = FALSE;
11643 bool infnan = FALSE;
11644
11645 /* echo everything up to the next format specification */
11646 for (q = p; q < patend && *q != '%'; ++q) ;
11647 if (q > p) {
11648 if (has_utf8 && !pat_utf8)
11649 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11650 else
11651 sv_catpvn_nomg(sv, p, q - p);
11652 p = q;
11653 }
11654 if (q++ >= patend)
11655 break;
11656
11657 fmtstart = q;
11658
11659/*
11660 We allow format specification elements in this order:
11661 \d+\$ explicit format parameter index
11662 [-+ 0#]+ flags
11663 v|\*(\d+\$)?v vector with optional (optionally specified) arg
11664 0 flag (as above): repeated to allow "v02"
11665 \d+|\*(\d+\$)? width using optional (optionally specified) arg
11666 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11667 [hlqLV] size
11668 [%bcdefginopsuxDFOUX] format (mandatory)
11669*/
11670
11671 if (args) {
11672/*
11673 As of perl5.9.3, printf format checking is on by default.
11674 Internally, perl uses %p formats to provide an escape to
11675 some extended formatting. This block deals with those
11676 extensions: if it does not match, (char*)q is reset and
11677 the normal format processing code is used.
11678
11679 Currently defined extensions are:
11680 %p include pointer address (standard)
11681 %-p (SVf) include an SV (previously %_)
11682 %-<num>p include an SV with precision <num>
11683 %2p include a HEK
11684 %3p include a HEK with precision of 256
11685 %4p char* preceded by utf8 flag and length
11686 %<num>p (where num is 1 or > 4) reserved for future
11687 extensions
11688
11689 Robin Barker 2005-07-14 (but modified since)
11690
11691 %1p (VDf) removed. RMB 2007-10-19
11692*/
11693 char* r = q;
11694 bool sv = FALSE;
11695 STRLEN n = 0;
11696 if (*q == '-')
11697 sv = *q++;
11698 else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11699 /* The argument has already gone through cBOOL, so the cast
11700 is safe. */
11701 is_utf8 = (bool)va_arg(*args, int);
11702 elen = va_arg(*args, UV);
11703 /* if utf8 length is larger than 0x7ffff..., then it might
11704 * have been a signed value that wrapped */
11705 if (elen > ((~(STRLEN)0) >> 1)) {
11706 assert(0); /* in DEBUGGING build we want to crash */
11707 elen= 0; /* otherwise we want to treat this as an empty string */
11708 }
11709 eptr = va_arg(*args, char *);
11710 q += sizeof(UTF8f)-1;
11711 goto string;
11712 }
11713 n = expect_number(&q);
11714 if (*q++ == 'p') {
11715 if (sv) { /* SVf */
11716 if (n) {
11717 precis = n;
11718 has_precis = TRUE;
11719 }
11720 argsv = MUTABLE_SV(va_arg(*args, void*));
11721 eptr = SvPV_const(argsv, elen);
11722 if (DO_UTF8(argsv))
11723 is_utf8 = TRUE;
11724 goto string;
11725 }
11726 else if (n==2 || n==3) { /* HEKf */
11727 HEK * const hek = va_arg(*args, HEK *);
11728 eptr = HEK_KEY(hek);
11729 elen = HEK_LEN(hek);
11730 if (HEK_UTF8(hek)) is_utf8 = TRUE;
11731 if (n==3) precis = 256, has_precis = TRUE;
11732 goto string;
11733 }
11734 else if (n) {
11735 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11736 "internal %%<num>p might conflict with future printf extensions");
11737 }
11738 }
11739 q = r;
11740 }
11741
11742 if ( (width = expect_number(&q)) ) {
11743 if (*q == '$') {
11744 if (args)
11745 Perl_croak_nocontext(
11746 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11747 ++q;
11748 efix = width;
11749 used_explicit_ix = TRUE;
11750 } else {
11751 goto gotwidth;
11752 }
11753 }
11754
11755 /* FLAGS */
11756
11757 while (*q) {
11758 switch (*q) {
11759 case ' ':
11760 case '+':
11761 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11762 q++;
11763 else
11764 plus = *q++;
11765 continue;
11766
11767 case '-':
11768 left = TRUE;
11769 q++;
11770 continue;
11771
11772 case '0':
11773 fill = *q++;
11774 continue;
11775
11776 case '#':
11777 alt = TRUE;
11778 q++;
11779 continue;
11780
11781 default:
11782 break;
11783 }
11784 break;
11785 }
11786
11787 tryasterisk:
11788 if (*q == '*') {
11789 q++;
11790 if ( (ewix = expect_number(&q)) ) {
11791 if (*q++ == '$') {
11792 if (args)
11793 Perl_croak_nocontext(
11794 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11795 used_explicit_ix = TRUE;
11796 } else
11797 goto unknown;
11798 }
11799 asterisk = TRUE;
11800 }
11801 if (*q == 'v') {
11802 q++;
11803 if (vectorize)
11804 goto unknown;
11805 if ((vectorarg = asterisk)) {
11806 evix = ewix;
11807 ewix = 0;
11808 asterisk = FALSE;
11809 }
11810 vectorize = TRUE;
11811 goto tryasterisk;
11812 }
11813
11814 if (!asterisk)
11815 {
11816 if( *q == '0' )
11817 fill = *q++;
11818 width = expect_number(&q);
11819 }
11820
11821 if (vectorize && vectorarg) {
11822 /* vectorizing, but not with the default "." */
11823 if (args)
11824 vecsv = va_arg(*args, SV*);
11825 else if (evix) {
11826 FETCH_VCATPVFN_ARGUMENT(
11827 vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11828 } else {
11829 FETCH_VCATPVFN_ARGUMENT(
11830 vecsv, svix < svmax, svargs[svix++]);
11831 }
11832 dotstr = SvPV_const(vecsv, dotstrlen);
11833 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11834 bad with tied or overloaded values that return UTF8. */
11835 if (DO_UTF8(vecsv))
11836 is_utf8 = TRUE;
11837 else if (has_utf8) {
11838 vecsv = sv_mortalcopy(vecsv);
11839 sv_utf8_upgrade(vecsv);
11840 dotstr = SvPV_const(vecsv, dotstrlen);
11841 is_utf8 = TRUE;
11842 }
11843 }
11844
11845 if (asterisk) {
11846 int i;
11847 if (args)
11848 i = va_arg(*args, int);
11849 else
11850 i = (ewix ? ewix <= svmax : svix < svmax) ?
11851 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11852 left |= (i < 0);
11853 width = (i < 0) ? -i : i;
11854 }
11855 gotwidth:
11856
11857 /* PRECISION */
11858
11859 if (*q == '.') {
11860 q++;
11861 if (*q == '*') {
11862 int i;
11863 q++;
11864 if ( (epix = expect_number(&q)) ) {
11865 if (*q++ == '$') {
11866 if (args)
11867 Perl_croak_nocontext(
11868 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11869 used_explicit_ix = TRUE;
11870 } else
11871 goto unknown;
11872 }
11873 if (args)
11874 i = va_arg(*args, int);
11875 else {
11876 SV *precsv;
11877 if (epix)
11878 FETCH_VCATPVFN_ARGUMENT(
11879 precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11880 else
11881 FETCH_VCATPVFN_ARGUMENT(
11882 precsv, svix < svmax, svargs[svix++]);
11883 i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11884 }
11885 precis = i;
11886 has_precis = !(i < 0);
11887 }
11888 else {
11889 precis = 0;
11890 while (isDIGIT(*q))
11891 precis = precis * 10 + (*q++ - '0');
11892 has_precis = TRUE;
11893 }
11894 }
11895
11896 if (vectorize) {
11897 if (args) {
11898 VECTORIZE_ARGS
11899 }
11900 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11901 vecsv = svargs[efix ? efix-1 : svix++];
11902 vecstr = (U8*)SvPV_const(vecsv,veclen);
11903 vec_utf8 = DO_UTF8(vecsv);
11904
11905 /* if this is a version object, we need to convert
11906 * back into v-string notation and then let the
11907 * vectorize happen normally
11908 */
11909 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11910 if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
11911 Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11912 "vector argument not supported with alpha versions");
11913 goto vdblank;
11914 }
11915 vecsv = sv_newmortal();
11916 scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11917 vecsv);
11918 vecstr = (U8*)SvPV_const(vecsv, veclen);
11919 vec_utf8 = DO_UTF8(vecsv);
11920 }
11921 }
11922 else {
11923 vdblank:
11924 vecstr = (U8*)"";
11925 veclen = 0;
11926 }
11927 }
11928
11929 /* SIZE */
11930
11931 switch (*q) {
11932#ifdef WIN32
11933 case 'I': /* Ix, I32x, and I64x */
11934# ifdef USE_64_BIT_INT
11935 if (q[1] == '6' && q[2] == '4') {
11936 q += 3;
11937 intsize = 'q';
11938 break;
11939 }
11940# endif
11941 if (q[1] == '3' && q[2] == '2') {
11942 q += 3;
11943 break;
11944 }
11945# ifdef USE_64_BIT_INT
11946 intsize = 'q';
11947# endif
11948 q++;
11949 break;
11950#endif
11951#if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11952 (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11953 case 'L': /* Ld */
11954 /* FALLTHROUGH */
11955# ifdef USE_QUADMATH
11956 case 'Q':
11957 /* FALLTHROUGH */
11958# endif
11959# if IVSIZE >= 8
11960 case 'q': /* qd */
11961# endif
11962 intsize = 'q';
11963 q++;
11964 break;
11965#endif
11966 case 'l':
11967 ++q;
11968#if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11969 (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11970 if (*q == 'l') { /* lld, llf */
11971 intsize = 'q';
11972 ++q;
11973 }
11974 else
11975#endif
11976 intsize = 'l';
11977 break;
11978 case 'h':
11979 if (*++q == 'h') { /* hhd, hhu */
11980 intsize = 'c';
11981 ++q;
11982 }
11983 else
11984 intsize = 'h';
11985 break;
11986 case 'V':
11987 case 'z':
11988 case 't':
11989#ifdef I_STDINT
11990 case 'j':
11991#endif
11992 intsize = *q++;
11993 break;
11994 }
11995
11996 /* CONVERSION */
11997
11998 if (*q == '%') {
11999 eptr = q++;
12000 elen = 1;
12001 if (vectorize) {
12002 c = '%';
12003 goto unknown;
12004 }
12005 goto string;
12006 }
12007
12008 if (!vectorize && !args) {
12009 if (efix) {
12010 const I32 i = efix-1;
12011 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
12012 } else {
12013 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
12014 svargs[svix++]);
12015 }
12016 }
12017
12018 if (argsv && strchr("BbcDdiOopuUXx",*q)) {
12019 /* XXX va_arg(*args) case? need peek, use va_copy? */
12020 SvGETMAGIC(argsv);
12021 if (UNLIKELY(SvAMAGIC(argsv)))
12022 argsv = sv_2num(argsv);
12023 infnan = UNLIKELY(isinfnansv(argsv));
12024 }
12025
12026 switch (c = *q++) {
12027
12028 /* STRINGS */
12029
12030 case 'c':
12031 if (vectorize)
12032 goto unknown;
12033 if (infnan)
12034 Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12035 /* no va_arg() case */
12036 SvNV_nomg(argsv), (int)c);
12037 uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
12038 if ((uv > 255 ||
12039 (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12040 && !IN_BYTES) {
12041 eptr = (char*)utf8buf;
12042 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
12043 is_utf8 = TRUE;
12044 }
12045 else {
12046 c = (char)uv;
12047 eptr = &c;
12048 elen = 1;
12049 }
12050 goto string;
12051
12052 case 's':
12053 if (vectorize)
12054 goto unknown;
12055 if (args) {
12056 eptr = va_arg(*args, char*);
12057 if (eptr)
12058 elen = strlen(eptr);
12059 else {
12060 eptr = (char *)nullstr;
12061 elen = sizeof nullstr - 1;
12062 }
12063 }
12064 else {
12065 eptr = SvPV_const(argsv, elen);
12066 if (DO_UTF8(argsv)) {
12067 STRLEN old_precis = precis;
12068 if (has_precis && precis < elen) {
12069 STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12070 STRLEN p = precis > ulen ? ulen : precis;
12071 precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12072 /* sticks at end */
12073 }
12074 if (width) { /* fudge width (can't fudge elen) */
12075 if (has_precis && precis < elen)
12076 width += precis - old_precis;
12077 else
12078 width +=
12079 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12080 }
12081 is_utf8 = TRUE;
12082 }
12083 }
12084
12085 string:
12086 if (has_precis && precis < elen)
12087 elen = precis;
12088 break;
12089
12090 /* INTEGERS */
12091
12092 case 'p':
12093 if (infnan) {
12094 goto floating_point;
12095 }
12096 if (alt || vectorize)
12097 goto unknown;
12098 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12099 base = 16;
12100 goto integer;
12101
12102 case 'D':
12103#ifdef IV_IS_QUAD
12104 intsize = 'q';
12105#else
12106 intsize = 'l';
12107#endif
12108 /* FALLTHROUGH */
12109 case 'd':
12110 case 'i':
12111 if (infnan) {
12112 goto floating_point;
12113 }
12114 if (vectorize) {
12115 STRLEN ulen;
12116 if (!veclen)
12117 goto donevalidconversion;
12118 if (vec_utf8)
12119 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12120 UTF8_ALLOW_ANYUV);
12121 else {
12122 uv = *vecstr;
12123 ulen = 1;
12124 }
12125 vecstr += ulen;
12126 veclen -= ulen;
12127 if (plus)
12128 esignbuf[esignlen++] = plus;
12129 }
12130 else if (args) {
12131 switch (intsize) {
12132 case 'c': iv = (char)va_arg(*args, int); break;
12133 case 'h': iv = (short)va_arg(*args, int); break;
12134 case 'l': iv = va_arg(*args, long); break;
12135 case 'V': iv = va_arg(*args, IV); break;
12136 case 'z': iv = va_arg(*args, SSize_t); break;
12137#ifdef HAS_PTRDIFF_T
12138 case 't': iv = va_arg(*args, ptrdiff_t); break;
12139#endif
12140 default: iv = va_arg(*args, int); break;
12141#ifdef I_STDINT
12142 case 'j': iv = va_arg(*args, intmax_t); break;
12143#endif
12144 case 'q':
12145#if IVSIZE >= 8
12146 iv = va_arg(*args, Quad_t); break;
12147#else
12148 goto unknown;
12149#endif
12150 }
12151 }
12152 else {
12153 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
12154 switch (intsize) {
12155 case 'c': iv = (char)tiv; break;
12156 case 'h': iv = (short)tiv; break;
12157 case 'l': iv = (long)tiv; break;
12158 case 'V':
12159 default: iv = tiv; break;
12160 case 'q':
12161#if IVSIZE >= 8
12162 iv = (Quad_t)tiv; break;
12163#else
12164 goto unknown;
12165#endif
12166 }
12167 }
12168 if ( !vectorize ) /* we already set uv above */
12169 {
12170 if (iv >= 0) {
12171 uv = iv;
12172 if (plus)
12173 esignbuf[esignlen++] = plus;
12174 }
12175 else {
12176 uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12177 esignbuf[esignlen++] = '-';
12178 }
12179 }
12180 base = 10;
12181 goto integer;
12182
12183 case 'U':
12184#ifdef IV_IS_QUAD
12185 intsize = 'q';
12186#else
12187 intsize = 'l';
12188#endif
12189 /* FALLTHROUGH */
12190 case 'u':
12191 base = 10;
12192 goto uns_integer;
12193
12194 case 'B':
12195 case 'b':
12196 base = 2;
12197 goto uns_integer;
12198
12199 case 'O':
12200#ifdef IV_IS_QUAD
12201 intsize = 'q';
12202#else
12203 intsize = 'l';
12204#endif
12205 /* FALLTHROUGH */
12206 case 'o':
12207 base = 8;
12208 goto uns_integer;
12209
12210 case 'X':
12211 case 'x':
12212 base = 16;
12213
12214 uns_integer:
12215 if (infnan) {
12216 goto floating_point;
12217 }
12218 if (vectorize) {
12219 STRLEN ulen;
12220 vector:
12221 if (!veclen)
12222 goto donevalidconversion;
12223 if (vec_utf8)
12224 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12225 UTF8_ALLOW_ANYUV);
12226 else {
12227 uv = *vecstr;
12228 ulen = 1;
12229 }
12230 vecstr += ulen;
12231 veclen -= ulen;
12232 }
12233 else if (args) {
12234 switch (intsize) {
12235 case 'c': uv = (unsigned char)va_arg(*args, unsigned); break;
12236 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
12237 case 'l': uv = va_arg(*args, unsigned long); break;
12238 case 'V': uv = va_arg(*args, UV); break;
12239 case 'z': uv = va_arg(*args, Size_t); break;
12240#ifdef HAS_PTRDIFF_T
12241 case 't': uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
12242#endif
12243#ifdef I_STDINT
12244 case 'j': uv = va_arg(*args, uintmax_t); break;
12245#endif
12246 default: uv = va_arg(*args, unsigned); break;
12247 case 'q':
12248#if IVSIZE >= 8
12249 uv = va_arg(*args, Uquad_t); break;
12250#else
12251 goto unknown;
12252#endif
12253 }
12254 }
12255 else {
12256 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
12257 switch (intsize) {
12258 case 'c': uv = (unsigned char)tuv; break;
12259 case 'h': uv = (unsigned short)tuv; break;
12260 case 'l': uv = (unsigned long)tuv; break;
12261 case 'V':
12262 default: uv = tuv; break;
12263 case 'q':
12264#if IVSIZE >= 8
12265 uv = (Uquad_t)tuv; break;
12266#else
12267 goto unknown;
12268#endif
12269 }
12270 }
12271
12272 integer:
12273 {
12274 char *ptr = ebuf + sizeof ebuf;
12275 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
12276 unsigned dig;
12277 zeros = 0;
12278
12279 switch (base) {
12280 case 16:
12281 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
12282 do {
12283 dig = uv & 15;
12284 *--ptr = p[dig];
12285 } while (uv >>= 4);
12286 if (tempalt) {
12287 esignbuf[esignlen++] = '0';
12288 esignbuf[esignlen++] = c; /* 'x' or 'X' */
12289 }
12290 break;
12291 case 8:
12292 do {
12293 dig = uv & 7;
12294 *--ptr = '0' + dig;
12295 } while (uv >>= 3);
12296 if (alt && *ptr != '0')
12297 *--ptr = '0';
12298 break;
12299 case 2:
12300 do {
12301 dig = uv & 1;
12302 *--ptr = '0' + dig;
12303 } while (uv >>= 1);
12304 if (tempalt) {
12305 esignbuf[esignlen++] = '0';
12306 esignbuf[esignlen++] = c;
12307 }
12308 break;
12309 default: /* it had better be ten or less */
12310 do {
12311 dig = uv % base;
12312 *--ptr = '0' + dig;
12313 } while (uv /= base);
12314 break;
12315 }
12316 elen = (ebuf + sizeof ebuf) - ptr;
12317 eptr = ptr;
12318 if (has_precis) {
12319 if (precis > elen)
12320 zeros = precis - elen;
12321 else if (precis == 0 && elen == 1 && *eptr == '0'
12322 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12323 elen = 0;
12324
12325 /* a precision nullifies the 0 flag. */
12326 if (fill == '0')
12327 fill = ' ';
12328 }
12329 }
12330 break;
12331
12332 /* FLOATING POINT */
12333
12334 floating_point:
12335
12336 case 'F':
12337 c = 'f'; /* maybe %F isn't supported here */
12338 /* FALLTHROUGH */
12339 case 'e': case 'E':
12340 case 'f':
12341 case 'g': case 'G':
12342 case 'a': case 'A':
12343 if (vectorize)
12344 goto unknown;
12345
12346 /* This is evil, but floating point is even more evil */
12347
12348 /* for SV-style calling, we can only get NV
12349 for C-style calling, we assume %f is double;
12350 for simplicity we allow any of %Lf, %llf, %qf for long double
12351 */
12352 switch (intsize) {
12353 case 'V':
12354#if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12355 intsize = 'q';
12356#endif
12357 break;
12358/* [perl #20339] - we should accept and ignore %lf rather than die */
12359 case 'l':
12360 /* FALLTHROUGH */
12361 default:
12362#if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12363 intsize = args ? 0 : 'q';
12364#endif
12365 break;
12366 case 'q':
12367#if defined(HAS_LONG_DOUBLE)
12368 break;
12369#else
12370 /* FALLTHROUGH */
12371#endif
12372 case 'c':
12373 case 'h':
12374 case 'z':
12375 case 't':
12376 case 'j':
12377 goto unknown;
12378 }
12379
12380 /* Now we need (long double) if intsize == 'q', else (double). */
12381 if (args) {
12382 /* Note: do not pull NVs off the va_list with va_arg()
12383 * (pull doubles instead) because if you have a build
12384 * with long doubles, you would always be pulling long
12385 * doubles, which would badly break anyone using only
12386 * doubles (i.e. the majority of builds). In other
12387 * words, you cannot mix doubles and long doubles.
12388 * The only case where you can pull off long doubles
12389 * is when the format specifier explicitly asks so with
12390 * e.g. "%Lg". */
12391#ifdef USE_QUADMATH
12392 fv = intsize == 'q' ?
12393 va_arg(*args, NV) : va_arg(*args, double);
12394 nv = fv;
12395#elif LONG_DOUBLESIZE > DOUBLESIZE
12396 if (intsize == 'q') {
12397 fv = va_arg(*args, long double);
12398 nv = fv;
12399 } else {
12400 nv = va_arg(*args, double);
12401 NV_TO_FV(nv, fv);
12402 }
12403#else
12404 nv = va_arg(*args, double);
12405 fv = nv;
12406#endif
12407 }
12408 else
12409 {
12410 if (!infnan) SvGETMAGIC(argsv);
12411 nv = SvNV_nomg(argsv);
12412 NV_TO_FV(nv, fv);
12413 }
12414
12415 float_need = 0;
12416 /* frexp() (or frexpl) has some unspecified behaviour for
12417 * nan/inf/-inf, so let's avoid calling that on non-finites. */
12418 if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12419 int i = PERL_INT_MIN;
12420 (void)Perl_frexp((NV)fv, &i);
12421 if (i == PERL_INT_MIN)
12422 Perl_die(aTHX_ "panic: frexp: %" FV_GF, fv);
12423 /* Do not set hexfp earlier since we want to printf
12424 * Inf/NaN for Inf/NaN, not their hexfp. */
12425 hexfp = isALPHA_FOLD_EQ(c, 'a');
12426 if (UNLIKELY(hexfp)) {
12427 /* This seriously overshoots in most cases, but
12428 * better the undershooting. Firstly, all bytes
12429 * of the NV are not mantissa, some of them are
12430 * exponent. Secondly, for the reasonably common
12431 * long doubles case, the "80-bit extended", two
12432 * or six bytes of the NV are unused. */
12433 float_need +=
12434 (fv < 0) ? 1 : 0 + /* possible unary minus */
12435 2 + /* "0x" */
12436 1 + /* the very unlikely carry */
12437 1 + /* "1" */
12438 1 + /* "." */
12439 2 * NVSIZE + /* 2 hexdigits for each byte */
12440 2 + /* "p+" */
12441 6 + /* exponent: sign, plus up to 16383 (quad fp) */
12442 1; /* \0 */
12443#ifdef LONGDOUBLE_DOUBLEDOUBLE
12444 /* However, for the "double double", we need more.
12445 * Since each double has their own exponent, the
12446 * doubles may float (haha) rather far from each
12447 * other, and the number of required bits is much
12448 * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12449 * See the definition of DOUBLEDOUBLE_MAXBITS.
12450 *
12451 * Need 2 hexdigits for each byte. */
12452 float_need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12453 /* the size for the exponent already added */
12454#endif
12455#ifdef USE_LOCALE_NUMERIC
12456 STORE_LC_NUMERIC_SET_TO_NEEDED();
12457 if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12458 float_need += SvLEN(PL_numeric_radix_sv);
12459 RESTORE_LC_NUMERIC();
12460#endif
12461 }
12462 else if (i > 0) {
12463 float_need = BIT_DIGITS(i);
12464 } /* if i < 0, the number of digits is hard to predict. */
12465 }
12466
12467 {
12468 STRLEN pr = has_precis ? precis : 6; /* known default */
12469 if (float_need >= ((STRLEN)~0) - pr)
12470 croak_memory_wrap();
12471 float_need += pr;
12472 }
12473
12474 if (float_need < width)
12475 float_need = width;
12476
12477#ifdef HAS_LDBL_SPRINTF_BUG
12478 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12479 with sfio - Allen <allens@cpan.org> */
12480
12481# ifdef DBL_MAX
12482# define MY_DBL_MAX DBL_MAX
12483# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12484# if DOUBLESIZE >= 8
12485# define MY_DBL_MAX 1.7976931348623157E+308L
12486# else
12487# define MY_DBL_MAX 3.40282347E+38L
12488# endif
12489# endif
12490
12491# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12492# define MY_DBL_MAX_BUG 1L
12493# else
12494# define MY_DBL_MAX_BUG MY_DBL_MAX
12495# endif
12496
12497# ifdef DBL_MIN
12498# define MY_DBL_MIN DBL_MIN
12499# else /* XXX guessing! -Allen */
12500# if DOUBLESIZE >= 8
12501# define MY_DBL_MIN 2.2250738585072014E-308L
12502# else
12503# define MY_DBL_MIN 1.17549435E-38L
12504# endif
12505# endif
12506
12507 if ((intsize == 'q') && (c == 'f') &&
12508 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12509 (float_need < DBL_DIG)) {
12510 /* it's going to be short enough that
12511 * long double precision is not needed */
12512
12513 if ((fv <= 0L) && (fv >= -0L))
12514 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12515 else {
12516 /* would use Perl_fp_class as a double-check but not
12517 * functional on IRIX - see perl.h comments */
12518
12519 if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12520 /* It's within the range that a double can represent */
12521#if defined(DBL_MAX) && !defined(DBL_MIN)
12522 if ((fv >= ((long double)1/DBL_MAX)) ||
12523 (fv <= (-(long double)1/DBL_MAX)))
12524#endif
12525 fix_ldbl_sprintf_bug = TRUE;
12526 }
12527 }
12528 if (fix_ldbl_sprintf_bug == TRUE) {
12529 double temp;
12530
12531 intsize = 0;
12532 temp = (double)fv;
12533 fv = (NV)temp;
12534 }
12535 }
12536
12537# undef MY_DBL_MAX
12538# undef MY_DBL_MAX_BUG
12539# undef MY_DBL_MIN
12540
12541#endif /* HAS_LDBL_SPRINTF_BUG */
12542
12543 if (float_need >= ((STRLEN)~0) - 40)
12544 croak_memory_wrap();
12545 float_need += 40; /* fudge factor */
12546 if (PL_efloatsize < float_need) {
12547 Safefree(PL_efloatbuf);
12548 PL_efloatsize = float_need;
12549 Newx(PL_efloatbuf, PL_efloatsize, char);
12550 PL_efloatbuf[0] = '\0';
12551 }
12552
12553 if ( !(width || left || plus || alt) && fill != '0'
12554 && has_precis && intsize != 'q' /* Shortcuts */
12555 && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12556 /* See earlier comment about buggy Gconvert when digits,
12557 aka precis is 0 */
12558 if ( c == 'g' && precis ) {
12559 STORE_LC_NUMERIC_SET_TO_NEEDED();
12560 SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12561 /* May return an empty string for digits==0 */
12562 if (*PL_efloatbuf) {
12563 elen = strlen(PL_efloatbuf);
12564 goto float_converted;
12565 }
12566 } else if ( c == 'f' && !precis ) {
12567 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12568 break;
12569 }
12570 }
12571
12572 if (UNLIKELY(hexfp)) {
12573 /* Hexadecimal floating point. */
12574 char* p = PL_efloatbuf;
12575 U8 vhex[VHEX_SIZE];
12576 U8* v = vhex; /* working pointer to vhex */
12577 U8* vend; /* pointer to one beyond last digit of vhex */
12578 U8* vfnz = NULL; /* first non-zero */
12579 U8* vlnz = NULL; /* last non-zero */
12580 U8* v0 = NULL; /* first output */
12581 const bool lower = (c == 'a');
12582 /* At output the values of vhex (up to vend) will
12583 * be mapped through the xdig to get the actual
12584 * human-readable xdigits. */
12585 const char* xdig = PL_hexdigit;
12586 int zerotail = 0; /* how many extra zeros to append */
12587 int exponent = 0; /* exponent of the floating point input */
12588 bool hexradix = FALSE; /* should we output the radix */
12589 bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
12590 bool negative = FALSE;
12591
12592 /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
12593 *
12594 * For example with denormals, (assuming the vanilla
12595 * 64-bit double): the exponent is zero. 1xp-1074 is
12596 * the smallest denormal and the smallest double, it
12597 * could be output also as 0x0.0000000000001p-1022 to
12598 * match its internal structure. */
12599
12600 vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
12601 S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
12602
12603#if NVSIZE > DOUBLESIZE
12604# ifdef HEXTRACT_HAS_IMPLICIT_BIT
12605 /* In this case there is an implicit bit,
12606 * and therefore the exponent is shifted by one. */
12607 exponent--;
12608# else
12609# ifdef NV_X86_80_BIT
12610 if (subnormal) {
12611 /* The subnormals of the x86-80 have a base exponent of -16382,
12612 * (while the physical exponent bits are zero) but the frexp()
12613 * returned the scientific-style floating exponent. We want
12614 * to map the last one as:
12615 * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
12616 * -16835..-16388 -> -16384
12617 * since we want to keep the first hexdigit
12618 * as one of the [8421]. */
12619 exponent = -4 * ( (exponent + 1) / -4) - 2;
12620 } else {
12621 exponent -= 4;
12622 }
12623# endif
12624 /* TBD: other non-implicit-bit platforms than the x86-80. */
12625# endif
12626#endif
12627
12628 negative = fv < 0 || Perl_signbit(nv);
12629 if (negative)
12630 *p++ = '-';
12631 else if (plus)
12632 *p++ = plus;
12633 *p++ = '0';
12634 if (lower) {
12635 *p++ = 'x';
12636 }
12637 else {
12638 *p++ = 'X';
12639 xdig += 16; /* Use uppercase hex. */
12640 }
12641
12642 /* Find the first non-zero xdigit. */
12643 for (v = vhex; v < vend; v++) {
12644 if (*v) {
12645 vfnz = v;
12646 break;
12647 }
12648 }
12649
12650 if (vfnz) {
12651 /* Find the last non-zero xdigit. */
12652 for (v = vend - 1; v >= vhex; v--) {
12653 if (*v) {
12654 vlnz = v;
12655 break;
12656 }
12657 }
12658
12659#if NVSIZE == DOUBLESIZE
12660 if (fv != 0.0)
12661 exponent--;
12662#endif
12663
12664 if (subnormal) {
12665#ifndef NV_X86_80_BIT
12666 if (vfnz[0] > 1) {
12667 /* IEEE 754 subnormals (but not the x86 80-bit):
12668 * we want "normalize" the subnormal,
12669 * so we need to right shift the hex nybbles
12670 * so that the output of the subnormal starts
12671 * from the first true bit. (Another, equally
12672 * valid, policy would be to dump the subnormal
12673 * nybbles as-is, to display the "physical" layout.) */
12674 int i, n;
12675 U8 *vshr;
12676 /* Find the ceil(log2(v[0])) of
12677 * the top non-zero nybble. */
12678 for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
12679 assert(n < 4);
12680 vlnz[1] = 0;
12681 for (vshr = vlnz; vshr >= vfnz; vshr--) {
12682 vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
12683 vshr[0] >>= n;
12684 }
12685 if (vlnz[1]) {
12686 vlnz++;
12687 }
12688 }
12689#endif
12690 v0 = vfnz;
12691 } else {
12692 v0 = vhex;
12693 }
12694
12695 if (has_precis) {
12696 U8* ve = (subnormal ? vlnz + 1 : vend);
12697 SSize_t vn = ve - v0;
12698 assert(vn >= 1);
12699 if (precis < (Size_t)(vn - 1)) {
12700 bool overflow = FALSE;
12701 if (v0[precis + 1] < 0x8) {
12702 /* Round down, nothing to do. */
12703 } else if (v0[precis + 1] > 0x8) {
12704 /* Round up. */
12705 v0[precis]++;
12706 overflow = v0[precis] > 0xF;
12707 v0[precis] &= 0xF;
12708 } else { /* v0[precis] == 0x8 */
12709 /* Half-point: round towards the one
12710 * with the even least-significant digit:
12711 * 08 -> 0 88 -> 8
12712 * 18 -> 2 98 -> a
12713 * 28 -> 2 a8 -> a
12714 * 38 -> 4 b8 -> c
12715 * 48 -> 4 c8 -> c
12716 * 58 -> 6 d8 -> e
12717 * 68 -> 6 e8 -> e
12718 * 78 -> 8 f8 -> 10 */
12719 if ((v0[precis] & 0x1)) {
12720 v0[precis]++;
12721 }
12722 overflow = v0[precis] > 0xF;
12723 v0[precis] &= 0xF;
12724 }
12725
12726 if (overflow) {
12727 for (v = v0 + precis - 1; v >= v0; v--) {
12728 (*v)++;
12729 overflow = *v > 0xF;
12730 (*v) &= 0xF;
12731 if (!overflow) {
12732 break;
12733 }
12734 }
12735 if (v == v0 - 1 && overflow) {
12736 /* If the overflow goes all the
12737 * way to the front, we need to
12738 * insert 0x1 in front, and adjust
12739 * the exponent. */
12740 Move(v0, v0 + 1, vn - 1, char);
12741 *v0 = 0x1;
12742 exponent += 4;
12743 }
12744 }
12745
12746 /* The new effective "last non zero". */
12747 vlnz = v0 + precis;
12748 }
12749 else {
12750 zerotail =
12751 subnormal ? precis - vn + 1 :
12752 precis - (vlnz - vhex);
12753 }
12754 }
12755
12756 v = v0;
12757 *p++ = xdig[*v++];
12758
12759 /* If there are non-zero xdigits, the radix
12760 * is output after the first one. */
12761 if (vfnz < vlnz) {
12762 hexradix = TRUE;
12763 }
12764 }
12765 else {
12766 *p++ = '0';
12767 exponent = 0;
12768 zerotail = precis;
12769 }
12770
12771 /* The radix is always output if precis, or if alt. */
12772 if (precis > 0 || alt) {
12773 hexradix = TRUE;
12774 }
12775
12776 if (hexradix) {
12777#ifndef USE_LOCALE_NUMERIC
12778 *p++ = '.';
12779#else
12780 STORE_LC_NUMERIC_SET_TO_NEEDED();
12781 if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12782 STRLEN n;
12783 const char* r = SvPV(PL_numeric_radix_sv, n);
12784 Copy(r, p, n, char);
12785 p += n;
12786 }
12787 else {
12788 *p++ = '.';
12789 }
12790 RESTORE_LC_NUMERIC();
12791#endif
12792 }
12793
12794 if (vlnz) {
12795 while (v <= vlnz)
12796 *p++ = xdig[*v++];
12797 }
12798
12799 if (zerotail > 0) {
12800 while (zerotail--) {
12801 *p++ = '0';
12802 }
12803 }
12804
12805 elen = p - PL_efloatbuf;
12806 elen += my_snprintf(p, PL_efloatsize - elen,
12807 "%c%+d", lower ? 'p' : 'P',
12808 exponent);
12809
12810 if (elen < width) {
12811 STRLEN gap = (STRLEN)(width - elen);
12812 if (left) {
12813 /* Pad the back with spaces. */
12814 memset(PL_efloatbuf + elen, ' ', gap);
12815 }
12816 else if (fill == '0') {
12817 /* Insert the zeros after the "0x" and the
12818 * the potential sign, but before the digits,
12819 * otherwise we end up with "0000xH.HHH...",
12820 * when we want "0x000H.HHH..." */
12821 STRLEN nzero = gap;
12822 char* zerox = PL_efloatbuf + 2;
12823 STRLEN nmove = elen - 2;
12824 if (negative || plus) {
12825 zerox++;
12826 nmove--;
12827 }
12828 Move(zerox, zerox + nzero, nmove, char);
12829 memset(zerox, fill, nzero);
12830 }
12831 else {
12832 /* Move it to the right. */
12833 Move(PL_efloatbuf, PL_efloatbuf + gap,
12834 elen, char);
12835 /* Pad the front with spaces. */
12836 memset(PL_efloatbuf, ' ', gap);
12837 }
12838 elen = width;
12839 }
12840 }
12841 else {
12842 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12843 if (elen) {
12844 /* Not affecting infnan output: precision, alt, fill. */
12845 if (elen < width) {
12846 STRLEN gap = (STRLEN)(width - elen);
12847 if (left) {
12848 /* Pack the back with spaces. */
12849 memset(PL_efloatbuf + elen, ' ', gap);
12850 } else {
12851 /* Move it to the right. */
12852 Move(PL_efloatbuf, PL_efloatbuf + gap,
12853 elen, char);
12854 /* Pad the front with spaces. */
12855 memset(PL_efloatbuf, ' ', gap);
12856 }
12857 elen = width;
12858 }
12859 }
12860 }
12861
12862 if (elen == 0) {
12863 char *ptr = ebuf + sizeof ebuf;
12864 *--ptr = '\0';
12865 *--ptr = c;
12866#if defined(USE_QUADMATH)
12867 if (intsize == 'q') {
12868 /* "g" -> "Qg" */
12869 *--ptr = 'Q';
12870 }
12871 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12872#elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12873 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12874 * not USE_LONG_DOUBLE and NVff. In other words,
12875 * this needs to work without USE_LONG_DOUBLE. */
12876 if (intsize == 'q') {
12877 /* Copy the one or more characters in a long double
12878 * format before the 'base' ([efgEFG]) character to
12879 * the format string. */
12880 static char const ldblf[] = PERL_PRIfldbl;
12881 char const *p = ldblf + sizeof(ldblf) - 3;
12882 while (p >= ldblf) { *--ptr = *p--; }
12883 }
12884#endif
12885 if (has_precis) {
12886 base = precis;
12887 do { *--ptr = '0' + (base % 10); } while (base /= 10);
12888 *--ptr = '.';
12889 }
12890 if (width) {
12891 base = width;
12892 do { *--ptr = '0' + (base % 10); } while (base /= 10);
12893 }
12894 if (fill == '0')
12895 *--ptr = fill;
12896 if (left)
12897 *--ptr = '-';
12898 if (plus)
12899 *--ptr = plus;
12900 if (alt)
12901 *--ptr = '#';
12902 *--ptr = '%';
12903
12904 /* No taint. Otherwise we are in the strange situation
12905 * where printf() taints but print($float) doesn't.
12906 * --jhi */
12907
12908 STORE_LC_NUMERIC_SET_TO_NEEDED();
12909
12910 /* hopefully the above makes ptr a very constrained format
12911 * that is safe to use, even though it's not literal */
12912 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12913#ifdef USE_QUADMATH
12914 {
12915 const char* qfmt = quadmath_format_single(ptr);
12916 if (!qfmt)
12917 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12918 elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12919 qfmt, nv);
12920 if ((IV)elen == -1) {
12921 if (qfmt != ptr)
12922 SAVEFREEPV(qfmt);
12923 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
12924 }
12925 if (qfmt != ptr)
12926 Safefree(qfmt);
12927 }
12928#elif defined(HAS_LONG_DOUBLE)
12929 elen = ((intsize == 'q')
12930 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12931 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12932#else
12933 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12934#endif
12935 GCC_DIAG_RESTORE;
12936 }
12937
12938 float_converted:
12939 eptr = PL_efloatbuf;
12940 assert((IV)elen > 0); /* here zero elen is bad */
12941
12942#ifdef USE_LOCALE_NUMERIC
12943 /* If the decimal point character in the string is UTF-8, make the
12944 * output utf8 */
12945 if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12946 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12947 {
12948 is_utf8 = TRUE;
12949 }
12950#endif
12951
12952 break;
12953
12954 /* SPECIAL */
12955
12956 case 'n':
12957 {
12958 int i;
12959 if (vectorize)
12960 goto unknown;
12961 i = SvCUR(sv) - origlen;
12962 if (args) {
12963 switch (intsize) {
12964 case 'c': *(va_arg(*args, char*)) = i; break;
12965 case 'h': *(va_arg(*args, short*)) = i; break;
12966 default: *(va_arg(*args, int*)) = i; break;
12967 case 'l': *(va_arg(*args, long*)) = i; break;
12968 case 'V': *(va_arg(*args, IV*)) = i; break;
12969 case 'z': *(va_arg(*args, SSize_t*)) = i; break;
12970#ifdef HAS_PTRDIFF_T
12971 case 't': *(va_arg(*args, ptrdiff_t*)) = i; break;
12972#endif
12973#ifdef I_STDINT
12974 case 'j': *(va_arg(*args, intmax_t*)) = i; break;
12975#endif
12976 case 'q':
12977#if IVSIZE >= 8
12978 *(va_arg(*args, Quad_t*)) = i; break;
12979#else
12980 goto unknown;
12981#endif
12982 }
12983 }
12984 else
12985 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12986 goto donevalidconversion;
12987 }
12988
12989 /* UNKNOWN */
12990
12991 default:
12992 unknown:
12993 if (!args
12994 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12995 && ckWARN(WARN_PRINTF))
12996 {
12997 SV * const msg = sv_newmortal();
12998 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12999 (PL_op->op_type == OP_PRTF) ? "" : "s");
13000 if (fmtstart < patend) {
13001 const char * const fmtend = q < patend ? q : patend;
13002 const char * f;
13003 sv_catpvs(msg, "\"%");
13004 for (f = fmtstart; f < fmtend; f++) {
13005 if (isPRINT(*f)) {
13006 sv_catpvn_nomg(msg, f, 1);
13007 } else {
13008 Perl_sv_catpvf(aTHX_ msg,
13009 "\\%03" UVof, (UV)*f & 0xFF);
13010 }
13011 }
13012 sv_catpvs(msg, "\"");
13013 } else {
13014 sv_catpvs(msg, "end of string");
13015 }
13016 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13017 }
13018
13019 /* mangled format: output the '%', then continue from the
13020 * character following that */
13021 sv_catpvn_nomg(sv, p, 1);
13022 q = p + 1;
13023 svix = osvix;
13024 continue; /* not "break" */
13025 }
13026
13027 if (is_utf8 != has_utf8) {
13028 if (is_utf8) {
13029 if (SvCUR(sv))
13030 sv_utf8_upgrade(sv);
13031 }
13032 else {
13033 const STRLEN old_elen = elen;
13034 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13035 sv_utf8_upgrade(nsv);
13036 eptr = SvPVX_const(nsv);
13037 elen = SvCUR(nsv);
13038
13039 if (width) { /* fudge width (can't fudge elen) */
13040 width += elen - old_elen;
13041 }
13042 is_utf8 = TRUE;
13043 }
13044 }
13045
13046
13047 /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13048
13049 {
13050 STRLEN need, have, gap;
13051
13052 /* signed value that's wrapped? */
13053 assert(elen <= ((~(STRLEN)0) >> 1));
13054
13055 /* Most of these length vars can range to any value if
13056 * supplied with a hostile format and/or args. So check every
13057 * addition for possible overflow. In reality some of these
13058 * values are interdependent so these checks are slightly
13059 * redundant. But its easier to be certain this way.
13060 */
13061
13062 have = elen;
13063
13064 if (have >= (((STRLEN)~0) - zeros))
13065 croak_memory_wrap();
13066 have += zeros;
13067
13068 if (have >= (((STRLEN)~0) - esignlen))
13069 croak_memory_wrap();
13070 have += esignlen;
13071
13072 need = (have > width ? have : width);
13073 gap = need - have;
13074
13075 if (need >= (((STRLEN)~0) - dotstrlen))
13076 croak_memory_wrap();
13077 need += dotstrlen;
13078
13079 if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13080 croak_memory_wrap();
13081 need += (SvCUR(sv) + 1);
13082
13083 SvGROW(sv, need);
13084
13085 p = SvEND(sv);
13086 if (esignlen && fill == '0') {
13087 int i;
13088 for (i = 0; i < (int)esignlen; i++)
13089 *p++ = esignbuf[i];
13090 }
13091 if (gap && !left) {
13092 memset(p, fill, gap);
13093 p += gap;
13094 }
13095 if (esignlen && fill != '0') {
13096 int i;
13097 for (i = 0; i < (int)esignlen; i++)
13098 *p++ = esignbuf[i];
13099 }
13100 if (zeros) {
13101 int i;
13102 for (i = zeros; i; i--)
13103 *p++ = '0';
13104 }
13105 if (elen) {
13106 Copy(eptr, p, elen, char);
13107 p += elen;
13108 }
13109 if (gap && left) {
13110 memset(p, ' ', gap);
13111 p += gap;
13112 }
13113 if (vectorize) {
13114 if (veclen) {
13115 Copy(dotstr, p, dotstrlen, char);
13116 p += dotstrlen;
13117 }
13118 else
13119 vectorize = FALSE; /* done iterating over vecstr */
13120 }
13121 if (is_utf8)
13122 has_utf8 = TRUE;
13123 if (has_utf8)
13124 SvUTF8_on(sv);
13125 *p = '\0';
13126 SvCUR_set(sv, p - SvPVX_const(sv));
13127 }
13128
13129 if (vectorize) {
13130 esignlen = 0;
13131 goto vector;
13132 }
13133
13134 donevalidconversion:
13135 if (used_explicit_ix)
13136 no_redundant_warning = TRUE;
13137 if (arg_missing)
13138 S_warn_vcatpvfn_missing_argument(aTHX);
13139 }
13140
13141 /* Now that we've consumed all our printf format arguments (svix)
13142 * do we have things left on the stack that we didn't use?
13143 */
13144 if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13145 Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13146 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13147 }
13148
13149 SvTAINT(sv);
13150
13151 RESTORE_LC_NUMERIC(); /* Done outside loop, so don't have to save/restore
13152 each iteration. */
13153}
13154
13155/* =========================================================================
13156
13157=head1 Cloning an interpreter
13158
13159=cut
13160
13161All the macros and functions in this section are for the private use of
13162the main function, perl_clone().
13163
13164The foo_dup() functions make an exact copy of an existing foo thingy.
13165During the course of a cloning, a hash table is used to map old addresses
13166to new addresses. The table is created and manipulated with the
13167ptr_table_* functions.
13168
13169 * =========================================================================*/
13170
13171
13172#if defined(USE_ITHREADS)
13173
13174/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13175#ifndef GpREFCNT_inc
13176# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13177#endif
13178
13179
13180/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13181 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13182 If this changes, please unmerge ss_dup.
13183 Likewise, sv_dup_inc_multiple() relies on this fact. */
13184#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup_inc(s,t))
13185#define av_dup(s,t) MUTABLE_AV(sv_dup((const SV *)s,t))
13186#define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13187#define hv_dup(s,t) MUTABLE_HV(sv_dup((const SV *)s,t))
13188#define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13189#define cv_dup(s,t) MUTABLE_CV(sv_dup((const SV *)s,t))
13190#define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13191#define io_dup(s,t) MUTABLE_IO(sv_dup((const SV *)s,t))
13192#define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13193#define gv_dup(s,t) MUTABLE_GV(sv_dup((const SV *)s,t))
13194#define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13195#define SAVEPV(p) ((p) ? savepv(p) : NULL)
13196#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
13197
13198/* clone a parser */
13199
13200yy_parser *
13201Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13202{
13203 yy_parser *parser;
13204
13205 PERL_ARGS_ASSERT_PARSER_DUP;
13206
13207 if (!proto)
13208 return NULL;
13209
13210 /* look for it in the table first */
13211 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13212 if (parser)
13213 return parser;
13214
13215 /* create anew and remember what it is */
13216 Newxz(parser, 1, yy_parser);
13217 ptr_table_store(PL_ptr_table, proto, parser);
13218
13219 /* XXX these not yet duped */
13220 parser->old_parser = NULL;
13221 parser->stack = NULL;
13222 parser->ps = NULL;
13223 parser->stack_max1 = 0;
13224 /* XXX parser->stack->state = 0; */
13225
13226 /* XXX eventually, just Copy() most of the parser struct ? */
13227
13228 parser->lex_brackets = proto->lex_brackets;
13229 parser->lex_casemods = proto->lex_casemods;
13230 parser->lex_brackstack = savepvn(proto->lex_brackstack,
13231 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13232 parser->lex_casestack = savepvn(proto->lex_casestack,
13233 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13234 parser->lex_defer = proto->lex_defer;
13235 parser->lex_dojoin = proto->lex_dojoin;
13236 parser->lex_formbrack = proto->lex_formbrack;
13237 parser->lex_inpat = proto->lex_inpat;
13238 parser->lex_inwhat = proto->lex_inwhat;
13239 parser->lex_op = proto->lex_op;
13240 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
13241 parser->lex_starts = proto->lex_starts;
13242 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
13243 parser->multi_close = proto->multi_close;
13244 parser->multi_open = proto->multi_open;
13245 parser->multi_start = proto->multi_start;
13246 parser->multi_end = proto->multi_end;
13247 parser->preambled = proto->preambled;
13248 parser->lex_super_state = proto->lex_super_state;
13249 parser->lex_sub_inwhat = proto->lex_sub_inwhat;
13250 parser->lex_sub_op = proto->lex_sub_op;
13251 parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13252 parser->linestr = sv_dup_inc(proto->linestr, param);
13253 parser->expect = proto->expect;
13254 parser->copline = proto->copline;
13255 parser->last_lop_op = proto->last_lop_op;
13256 parser->lex_state = proto->lex_state;
13257 parser->rsfp = fp_dup(proto->rsfp, '<', param);
13258 /* rsfp_filters entries have fake IoDIRP() */
13259 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13260 parser->in_my = proto->in_my;
13261 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13262 parser->error_count = proto->error_count;
13263 parser->sig_elems = proto->sig_elems;
13264 parser->sig_optelems= proto->sig_optelems;
13265 parser->sig_slurpy = proto->sig_slurpy;
13266 parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13267 parser->linestr = sv_dup_inc(proto->linestr, param);
13268
13269 {
13270 char * const ols = SvPVX(proto->linestr);
13271 char * const ls = SvPVX(parser->linestr);
13272
13273 parser->bufptr = ls + (proto->bufptr >= ols ?
13274 proto->bufptr - ols : 0);
13275 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
13276 proto->oldbufptr - ols : 0);
13277 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13278 proto->oldoldbufptr - ols : 0);
13279 parser->linestart = ls + (proto->linestart >= ols ?
13280 proto->linestart - ols : 0);
13281 parser->last_uni = ls + (proto->last_uni >= ols ?
13282 proto->last_uni - ols : 0);
13283 parser->last_lop = ls + (proto->last_lop >= ols ?
13284 proto->last_lop - ols : 0);
13285
13286 parser->bufend = ls + SvCUR(parser->linestr);
13287 }
13288
13289 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13290
13291
13292 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13293 Copy(proto->nexttype, parser->nexttype, 5, I32);
13294 parser->nexttoke = proto->nexttoke;
13295
13296 /* XXX should clone saved_curcop here, but we aren't passed
13297 * proto_perl; so do it in perl_clone_using instead */
13298
13299 return parser;
13300}
13301
13302
13303/* duplicate a file handle */
13304
13305PerlIO *
13306Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13307{
13308 PerlIO *ret;
13309
13310 PERL_ARGS_ASSERT_FP_DUP;
13311 PERL_UNUSED_ARG(type);
13312
13313 if (!fp)
13314 return (PerlIO*)NULL;
13315
13316 /* look for it in the table first */
13317 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13318 if (ret)
13319 return ret;
13320
13321 /* create anew and remember what it is */
13322#ifdef __amigaos4__
13323 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13324#else
13325 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13326#endif
13327 ptr_table_store(PL_ptr_table, fp, ret);
13328 return ret;
13329}
13330
13331/* duplicate a directory handle */
13332
13333DIR *
13334Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13335{
13336 DIR *ret;
13337
13338#if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13339 DIR *pwd;
13340 const Direntry_t *dirent;
13341 char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13342 char *name = NULL;
13343 STRLEN len = 0;
13344 long pos;
13345#endif
13346
13347 PERL_UNUSED_CONTEXT;
13348 PERL_ARGS_ASSERT_DIRP_DUP;
13349
13350 if (!dp)
13351 return (DIR*)NULL;
13352
13353 /* look for it in the table first */
13354 ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13355 if (ret)
13356 return ret;
13357
13358#if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13359
13360 PERL_UNUSED_ARG(param);
13361
13362 /* create anew */
13363
13364 /* open the current directory (so we can switch back) */
13365 if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13366
13367 /* chdir to our dir handle and open the present working directory */
13368 if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13369 PerlDir_close(pwd);
13370 return (DIR *)NULL;
13371 }
13372 /* Now we should have two dir handles pointing to the same dir. */
13373
13374 /* Be nice to the calling code and chdir back to where we were. */
13375 /* XXX If this fails, then what? */
13376 PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13377
13378 /* We have no need of the pwd handle any more. */
13379 PerlDir_close(pwd);
13380
13381#ifdef DIRNAMLEN
13382# define d_namlen(d) (d)->d_namlen
13383#else
13384# define d_namlen(d) strlen((d)->d_name)
13385#endif
13386 /* Iterate once through dp, to get the file name at the current posi-
13387 tion. Then step back. */
13388 pos = PerlDir_tell(dp);
13389 if ((dirent = PerlDir_read(dp))) {
13390 len = d_namlen(dirent);
13391 if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13392 /* If the len is somehow magically longer than the
13393 * maximum length of the directory entry, even though
13394 * we could fit it in a buffer, we could not copy it
13395 * from the dirent. Bail out. */
13396 PerlDir_close(ret);
13397 return (DIR*)NULL;
13398 }
13399 if (len <= sizeof smallbuf) name = smallbuf;
13400 else Newx(name, len, char);
13401 Move(dirent->d_name, name, len, char);
13402 }
13403 PerlDir_seek(dp, pos);
13404
13405 /* Iterate through the new dir handle, till we find a file with the
13406 right name. */
13407 if (!dirent) /* just before the end */
13408 for(;;) {
13409 pos = PerlDir_tell(ret);
13410 if (PerlDir_read(ret)) continue; /* not there yet */
13411 PerlDir_seek(ret, pos); /* step back */
13412 break;
13413 }
13414 else {
13415 const long pos0 = PerlDir_tell(ret);
13416 for(;;) {
13417 pos = PerlDir_tell(ret);
13418 if ((dirent = PerlDir_read(ret))) {
13419 if (len == (STRLEN)d_namlen(dirent)
13420 && memEQ(name, dirent->d_name, len)) {
13421 /* found it */
13422 PerlDir_seek(ret, pos); /* step back */
13423 break;
13424 }
13425 /* else we are not there yet; keep iterating */
13426 }
13427 else { /* This is not meant to happen. The best we can do is
13428 reset the iterator to the beginning. */
13429 PerlDir_seek(ret, pos0);
13430 break;
13431 }
13432 }
13433 }
13434#undef d_namlen
13435
13436 if (name && name != smallbuf)
13437 Safefree(name);
13438#endif
13439
13440#ifdef WIN32
13441 ret = win32_dirp_dup(dp, param);
13442#endif
13443
13444 /* pop it in the pointer table */
13445 if (ret)
13446 ptr_table_store(PL_ptr_table, dp, ret);
13447
13448 return ret;
13449}
13450
13451/* duplicate a typeglob */
13452
13453GP *
13454Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13455{
13456 GP *ret;
13457
13458 PERL_ARGS_ASSERT_GP_DUP;
13459
13460 if (!gp)
13461 return (GP*)NULL;
13462 /* look for it in the table first */
13463 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13464 if (ret)
13465 return ret;
13466
13467 /* create anew and remember what it is */
13468 Newxz(ret, 1, GP);
13469 ptr_table_store(PL_ptr_table, gp, ret);
13470
13471 /* clone */
13472 /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13473 on Newxz() to do this for us. */
13474 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
13475 ret->gp_io = io_dup_inc(gp->gp_io, param);
13476 ret->gp_form = cv_dup_inc(gp->gp_form, param);
13477 ret->gp_av = av_dup_inc(gp->gp_av, param);
13478 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
13479 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13480 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
13481 ret->gp_cvgen = gp->gp_cvgen;
13482 ret->gp_line = gp->gp_line;
13483 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
13484 return ret;
13485}
13486
13487/* duplicate a chain of magic */
13488
13489MAGIC *
13490Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13491{
13492 MAGIC *mgret = NULL;
13493 MAGIC **mgprev_p = &mgret;
13494
13495 PERL_ARGS_ASSERT_MG_DUP;
13496
13497 for (; mg; mg = mg->mg_moremagic) {
13498 MAGIC *nmg;
13499
13500 if ((param->flags & CLONEf_JOIN_IN)
13501 && mg->mg_type == PERL_MAGIC_backref)
13502 /* when joining, we let the individual SVs add themselves to
13503 * backref as needed. */
13504 continue;
13505
13506 Newx(nmg, 1, MAGIC);
13507 *mgprev_p = nmg;
13508 mgprev_p = &(nmg->mg_moremagic);
13509
13510 /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13511 dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13512 from the original commit adding Perl_mg_dup() - revision 4538.
13513 Similarly there is the annotation "XXX random ptr?" next to the
13514 assignment to nmg->mg_ptr. */
13515 *nmg = *mg;
13516
13517 /* FIXME for plugins
13518 if (nmg->mg_type == PERL_MAGIC_qr) {
13519 nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13520 }
13521 else
13522 */
13523 nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13524 ? nmg->mg_type == PERL_MAGIC_backref
13525 /* The backref AV has its reference
13526 * count deliberately bumped by 1 */
13527 ? SvREFCNT_inc(av_dup_inc((const AV *)
13528 nmg->mg_obj, param))
13529 : sv_dup_inc(nmg->mg_obj, param)
13530 : (nmg->mg_type == PERL_MAGIC_regdatum ||
13531 nmg->mg_type == PERL_MAGIC_regdata)
13532 ? nmg->mg_obj
13533 : sv_dup(nmg->mg_obj, param);
13534
13535 if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13536 if (nmg->mg_len > 0) {
13537 nmg->mg_ptr = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13538 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13539 AMT_AMAGIC((AMT*)nmg->mg_ptr))
13540 {
13541 AMT * const namtp = (AMT*)nmg->mg_ptr;
13542 sv_dup_inc_multiple((SV**)(namtp->table),
13543 (SV**)(namtp->table), NofAMmeth, param);
13544 }
13545 }
13546 else if (nmg->mg_len == HEf_SVKEY)
13547 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13548 }
13549 if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13550 nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13551 }
13552 }
13553 return mgret;
13554}
13555
13556#endif /* USE_ITHREADS */
13557
13558struct ptr_tbl_arena {
13559 struct ptr_tbl_arena *next;
13560 struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers. */
13561};
13562
13563/* create a new pointer-mapping table */
13564
13565PTR_TBL_t *
13566Perl_ptr_table_new(pTHX)
13567{
13568 PTR_TBL_t *tbl;
13569 PERL_UNUSED_CONTEXT;
13570
13571 Newx(tbl, 1, PTR_TBL_t);
13572 tbl->tbl_max = 511;
13573 tbl->tbl_items = 0;
13574 tbl->tbl_arena = NULL;
13575 tbl->tbl_arena_next = NULL;
13576 tbl->tbl_arena_end = NULL;
13577 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13578 return tbl;
13579}
13580
13581#define PTR_TABLE_HASH(ptr) \
13582 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13583
13584/* map an existing pointer using a table */
13585
13586STATIC PTR_TBL_ENT_t *
13587S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13588{
13589 PTR_TBL_ENT_t *tblent;
13590 const UV hash = PTR_TABLE_HASH(sv);
13591
13592 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13593
13594 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13595 for (; tblent; tblent = tblent->next) {
13596 if (tblent->oldval == sv)
13597 return tblent;
13598 }
13599 return NULL;
13600}
13601
13602void *
13603Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13604{
13605 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13606
13607 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13608 PERL_UNUSED_CONTEXT;
13609
13610 return tblent ? tblent->newval : NULL;
13611}
13612
13613/* add a new entry to a pointer-mapping table 'tbl'. In hash terms, 'oldsv' is
13614 * the key; 'newsv' is the value. The names "old" and "new" are specific to
13615 * the core's typical use of ptr_tables in thread cloning. */
13616
13617void
13618Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13619{
13620 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13621
13622 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13623 PERL_UNUSED_CONTEXT;
13624
13625 if (tblent) {
13626 tblent->newval = newsv;
13627 } else {
13628 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13629
13630 if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13631 struct ptr_tbl_arena *new_arena;
13632
13633 Newx(new_arena, 1, struct ptr_tbl_arena);
13634 new_arena->next = tbl->tbl_arena;
13635 tbl->tbl_arena = new_arena;
13636 tbl->tbl_arena_next = new_arena->array;
13637 tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13638 }
13639
13640 tblent = tbl->tbl_arena_next++;
13641
13642 tblent->oldval = oldsv;
13643 tblent->newval = newsv;
13644 tblent->next = tbl->tbl_ary[entry];
13645 tbl->tbl_ary[entry] = tblent;
13646 tbl->tbl_items++;
13647 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13648 ptr_table_split(tbl);
13649 }
13650}
13651
13652/* double the hash bucket size of an existing ptr table */
13653
13654void
13655Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13656{
13657 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13658 const UV oldsize = tbl->tbl_max + 1;
13659 UV newsize = oldsize * 2;
13660 UV i;
13661
13662 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13663 PERL_UNUSED_CONTEXT;
13664
13665 Renew(ary, newsize, PTR_TBL_ENT_t*);
13666 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13667 tbl->tbl_max = --newsize;
13668 tbl->tbl_ary = ary;
13669 for (i=0; i < oldsize; i++, ary++) {
13670 PTR_TBL_ENT_t **entp = ary;
13671 PTR_TBL_ENT_t *ent = *ary;
13672 PTR_TBL_ENT_t **curentp;
13673 if (!ent)
13674 continue;
13675 curentp = ary + oldsize;
13676 do {
13677 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13678 *entp = ent->next;
13679 ent->next = *curentp;
13680 *curentp = ent;
13681 }
13682 else
13683 entp = &ent->next;
13684 ent = *entp;
13685 } while (ent);
13686 }
13687}
13688
13689/* remove all the entries from a ptr table */
13690/* Deprecated - will be removed post 5.14 */
13691
13692void
13693Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13694{
13695 PERL_UNUSED_CONTEXT;
13696 if (tbl && tbl->tbl_items) {
13697 struct ptr_tbl_arena *arena = tbl->tbl_arena;
13698
13699 Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13700
13701 while (arena) {
13702 struct ptr_tbl_arena *next = arena->next;
13703
13704 Safefree(arena);
13705 arena = next;
13706 };
13707
13708 tbl->tbl_items = 0;
13709 tbl->tbl_arena = NULL;
13710 tbl->tbl_arena_next = NULL;
13711 tbl->tbl_arena_end = NULL;
13712 }
13713}
13714
13715/* clear and free a ptr table */
13716
13717void
13718Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13719{
13720 struct ptr_tbl_arena *arena;
13721
13722 PERL_UNUSED_CONTEXT;
13723
13724 if (!tbl) {
13725 return;
13726 }
13727
13728 arena = tbl->tbl_arena;
13729
13730 while (arena) {
13731 struct ptr_tbl_arena *next = arena->next;
13732
13733 Safefree(arena);
13734 arena = next;
13735 }
13736
13737 Safefree(tbl->tbl_ary);
13738 Safefree(tbl);
13739}
13740
13741#if defined(USE_ITHREADS)
13742
13743void
13744Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13745{
13746 PERL_ARGS_ASSERT_RVPV_DUP;
13747
13748 assert(!isREGEXP(sstr));
13749 if (SvROK(sstr)) {
13750 if (SvWEAKREF(sstr)) {
13751 SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13752 if (param->flags & CLONEf_JOIN_IN) {
13753 /* if joining, we add any back references individually rather
13754 * than copying the whole backref array */
13755 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13756 }
13757 }
13758 else
13759 SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13760 }
13761 else if (SvPVX_const(sstr)) {
13762 /* Has something there */
13763 if (SvLEN(sstr)) {
13764 /* Normal PV - clone whole allocated space */
13765 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13766 /* sstr may not be that normal, but actually copy on write.
13767 But we are a true, independent SV, so: */
13768 SvIsCOW_off(dstr);
13769 }
13770 else {
13771 /* Special case - not normally malloced for some reason */
13772 if (isGV_with_GP(sstr)) {
13773 /* Don't need to do anything here. */
13774 }
13775 else if ((SvIsCOW(sstr))) {
13776 /* A "shared" PV - clone it as "shared" PV */
13777 SvPV_set(dstr,
13778 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13779 param)));
13780 }
13781 else {
13782 /* Some other special case - random pointer */
13783 SvPV_set(dstr, (char *) SvPVX_const(sstr));
13784 }
13785 }
13786 }
13787 else {
13788 /* Copy the NULL */
13789 SvPV_set(dstr, NULL);
13790 }
13791}
13792
13793/* duplicate a list of SVs. source and dest may point to the same memory. */
13794static SV **
13795S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13796 SSize_t items, CLONE_PARAMS *const param)
13797{
13798 PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13799
13800 while (items-- > 0) {
13801 *dest++ = sv_dup_inc(*source++, param);
13802 }
13803
13804 return dest;
13805}
13806
13807/* duplicate an SV of any type (including AV, HV etc) */
13808
13809static SV *
13810S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13811{
13812 dVAR;
13813 SV *dstr;
13814
13815 PERL_ARGS_ASSERT_SV_DUP_COMMON;
13816
13817 if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13818#ifdef DEBUG_LEAKING_SCALARS_ABORT
13819 abort();
13820#endif
13821 return NULL;
13822 }
13823 /* look for it in the table first */
13824 dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13825 if (dstr)
13826 return dstr;
13827
13828 if(param->flags & CLONEf_JOIN_IN) {
13829 /** We are joining here so we don't want do clone
13830 something that is bad **/
13831 if (SvTYPE(sstr) == SVt_PVHV) {
13832 const HEK * const hvname = HvNAME_HEK(sstr);
13833 if (hvname) {
13834 /** don't clone stashes if they already exist **/
13835 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13836 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13837 ptr_table_store(PL_ptr_table, sstr, dstr);
13838 return dstr;
13839 }
13840 }
13841 else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13842 HV *stash = GvSTASH(sstr);
13843 const HEK * hvname;
13844 if (stash && (hvname = HvNAME_HEK(stash))) {
13845 /** don't clone GVs if they already exist **/
13846 SV **svp;
13847 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13848 HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13849 svp = hv_fetch(
13850 stash, GvNAME(sstr),
13851 GvNAMEUTF8(sstr)
13852 ? -GvNAMELEN(sstr)
13853 : GvNAMELEN(sstr),
13854 0
13855 );
13856 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13857 ptr_table_store(PL_ptr_table, sstr, *svp);
13858 return *svp;
13859 }
13860 }
13861 }
13862 }
13863
13864 /* create anew and remember what it is */
13865 new_SV(dstr);
13866
13867#ifdef DEBUG_LEAKING_SCALARS
13868 dstr->sv_debug_optype = sstr->sv_debug_optype;
13869 dstr->sv_debug_line = sstr->sv_debug_line;
13870 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13871 dstr->sv_debug_parent = (SV*)sstr;
13872 FREE_SV_DEBUG_FILE(dstr);
13873 dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13874#endif
13875
13876 ptr_table_store(PL_ptr_table, sstr, dstr);
13877
13878 /* clone */
13879 SvFLAGS(dstr) = SvFLAGS(sstr);
13880 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
13881 SvREFCNT(dstr) = 0; /* must be before any other dups! */
13882
13883#ifdef DEBUGGING
13884 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13885 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13886 (void*)PL_watch_pvx, SvPVX_const(sstr));
13887#endif
13888
13889 /* don't clone objects whose class has asked us not to */
13890 if (SvOBJECT(sstr)
13891 && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13892 {
13893 SvFLAGS(dstr) = 0;
13894 return dstr;
13895 }
13896
13897 switch (SvTYPE(sstr)) {
13898 case SVt_NULL:
13899 SvANY(dstr) = NULL;
13900 break;
13901 case SVt_IV:
13902 SET_SVANY_FOR_BODYLESS_IV(dstr);
13903 if(SvROK(sstr)) {
13904 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13905 } else {
13906 SvIV_set(dstr, SvIVX(sstr));
13907 }
13908 break;
13909 case SVt_NV:
13910#if NVSIZE <= IVSIZE
13911 SET_SVANY_FOR_BODYLESS_NV(dstr);
13912#else
13913 SvANY(dstr) = new_XNV();
13914#endif
13915 SvNV_set(dstr, SvNVX(sstr));
13916 break;
13917 default:
13918 {
13919 /* These are all the types that need complex bodies allocating. */
13920 void *new_body;
13921 const svtype sv_type = SvTYPE(sstr);
13922 const struct body_details *const sv_type_details
13923 = bodies_by_type + sv_type;
13924
13925 switch (sv_type) {
13926 default:
13927 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13928 NOT_REACHED; /* NOTREACHED */
13929 break;
13930
13931 case SVt_PVGV:
13932 case SVt_PVIO:
13933 case SVt_PVFM:
13934 case SVt_PVHV:
13935 case SVt_PVAV:
13936 case SVt_PVCV:
13937 case SVt_PVLV:
13938 case SVt_REGEXP:
13939 case SVt_PVMG:
13940 case SVt_PVNV:
13941 case SVt_PVIV:
13942 case SVt_INVLIST:
13943 case SVt_PV:
13944 assert(sv_type_details->body_size);
13945 if (sv_type_details->arena) {
13946 new_body_inline(new_body, sv_type);
13947 new_body
13948 = (void*)((char*)new_body - sv_type_details->offset);
13949 } else {
13950 new_body = new_NOARENA(sv_type_details);
13951 }
13952 }
13953 assert(new_body);
13954 SvANY(dstr) = new_body;
13955
13956#ifndef PURIFY
13957 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13958 ((char*)SvANY(dstr)) + sv_type_details->offset,
13959 sv_type_details->copy, char);
13960#else
13961 Copy(((char*)SvANY(sstr)),
13962 ((char*)SvANY(dstr)),
13963 sv_type_details->body_size + sv_type_details->offset, char);
13964#endif
13965
13966 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13967 && !isGV_with_GP(dstr)
13968 && !isREGEXP(dstr)
13969 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13970 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13971
13972 /* The Copy above means that all the source (unduplicated) pointers
13973 are now in the destination. We can check the flags and the
13974 pointers in either, but it's possible that there's less cache
13975 missing by always going for the destination.
13976 FIXME - instrument and check that assumption */
13977 if (sv_type >= SVt_PVMG) {
13978 if (SvMAGIC(dstr))
13979 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13980 if (SvOBJECT(dstr) && SvSTASH(dstr))
13981 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13982 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13983 }
13984
13985 /* The cast silences a GCC warning about unhandled types. */
13986 switch ((int)sv_type) {
13987 case SVt_PV:
13988 break;
13989 case SVt_PVIV:
13990 break;
13991 case SVt_PVNV:
13992 break;
13993 case SVt_PVMG:
13994 break;
13995 case SVt_REGEXP:
13996 duprex:
13997 /* FIXME for plugins */
13998 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13999 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14000 break;
14001 case SVt_PVLV:
14002 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14003 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14004 LvTARG(dstr) = dstr;
14005 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14006 LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14007 else
14008 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14009 if (isREGEXP(sstr)) goto duprex;
14010 case SVt_PVGV:
14011 /* non-GP case already handled above */
14012 if(isGV_with_GP(sstr)) {
14013 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14014 /* Don't call sv_add_backref here as it's going to be
14015 created as part of the magic cloning of the symbol
14016 table--unless this is during a join and the stash
14017 is not actually being cloned. */
14018 /* Danger Will Robinson - GvGP(dstr) isn't initialised
14019 at the point of this comment. */
14020 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14021 if (param->flags & CLONEf_JOIN_IN)
14022 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14023 GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14024 (void)GpREFCNT_inc(GvGP(dstr));
14025 }
14026 break;
14027 case SVt_PVIO:
14028 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14029 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14030 /* I have no idea why fake dirp (rsfps)
14031 should be treated differently but otherwise
14032 we end up with leaks -- sky*/
14033 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
14034 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
14035 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14036 } else {
14037 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
14038 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
14039 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
14040 if (IoDIRP(dstr)) {
14041 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr), param);
14042 } else {
14043 NOOP;
14044 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
14045 }
14046 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14047 }
14048 if (IoOFP(dstr) == IoIFP(sstr))
14049 IoOFP(dstr) = IoIFP(dstr);
14050 else
14051 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14052 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
14053 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
14054 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
14055 break;
14056 case SVt_PVAV:
14057 /* avoid cloning an empty array */
14058 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14059 SV **dst_ary, **src_ary;
14060 SSize_t items = AvFILLp((const AV *)sstr) + 1;
14061
14062 src_ary = AvARRAY((const AV *)sstr);
14063 Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14064 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14065 AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14066 AvALLOC((const AV *)dstr) = dst_ary;
14067 if (AvREAL((const AV *)sstr)) {
14068 dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14069 param);
14070 }
14071 else {
14072 while (items-- > 0)
14073 *dst_ary++ = sv_dup(*src_ary++, param);
14074 }
14075 items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14076 while (items-- > 0) {
14077 *dst_ary++ = NULL;
14078 }
14079 }
14080 else {
14081 AvARRAY(MUTABLE_AV(dstr)) = NULL;
14082 AvALLOC((const AV *)dstr) = (SV**)NULL;
14083 AvMAX( (const AV *)dstr) = -1;
14084 AvFILLp((const AV *)dstr) = -1;
14085 }
14086 break;
14087 case SVt_PVHV:
14088 if (HvARRAY((const HV *)sstr)) {
14089 STRLEN i = 0;
14090 const bool sharekeys = !!HvSHAREKEYS(sstr);
14091 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14092 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14093 char *darray;
14094 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14095 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14096 char);
14097 HvARRAY(dstr) = (HE**)darray;
14098 while (i <= sxhv->xhv_max) {
14099 const HE * const source = HvARRAY(sstr)[i];
14100 HvARRAY(dstr)[i] = source
14101 ? he_dup(source, sharekeys, param) : 0;
14102 ++i;
14103 }
14104 if (SvOOK(sstr)) {
14105 const struct xpvhv_aux * const saux = HvAUX(sstr);
14106 struct xpvhv_aux * const daux = HvAUX(dstr);
14107 /* This flag isn't copied. */
14108 SvOOK_on(dstr);
14109
14110 if (saux->xhv_name_count) {
14111 HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14112 const I32 count
14113 = saux->xhv_name_count < 0
14114 ? -saux->xhv_name_count
14115 : saux->xhv_name_count;
14116 HEK **shekp = sname + count;
14117 HEK **dhekp;
14118 Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14119 dhekp = daux->xhv_name_u.xhvnameu_names + count;
14120 while (shekp-- > sname) {
14121 dhekp--;
14122 *dhekp = hek_dup(*shekp, param);
14123 }
14124 }
14125 else {
14126 daux->xhv_name_u.xhvnameu_name
14127 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14128 param);
14129 }
14130 daux->xhv_name_count = saux->xhv_name_count;
14131
14132 daux->xhv_aux_flags = saux->xhv_aux_flags;
14133#ifdef PERL_HASH_RANDOMIZE_KEYS
14134 daux->xhv_rand = saux->xhv_rand;
14135 daux->xhv_last_rand = saux->xhv_last_rand;
14136#endif
14137 daux->xhv_riter = saux->xhv_riter;
14138 daux->xhv_eiter = saux->xhv_eiter
14139 ? he_dup(saux->xhv_eiter,
14140 cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14141 /* backref array needs refcnt=2; see sv_add_backref */
14142 daux->xhv_backreferences =
14143 (param->flags & CLONEf_JOIN_IN)
14144 /* when joining, we let the individual GVs and
14145 * CVs add themselves to backref as
14146 * needed. This avoids pulling in stuff
14147 * that isn't required, and simplifies the
14148 * case where stashes aren't cloned back
14149 * if they already exist in the parent
14150 * thread */
14151 ? NULL
14152 : saux->xhv_backreferences
14153 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14154 ? MUTABLE_AV(SvREFCNT_inc(
14155 sv_dup_inc((const SV *)
14156 saux->xhv_backreferences, param)))
14157 : MUTABLE_AV(sv_dup((const SV *)
14158 saux->xhv_backreferences, param))
14159 : 0;
14160
14161 daux->xhv_mro_meta = saux->xhv_mro_meta
14162 ? mro_meta_dup(saux->xhv_mro_meta, param)
14163 : 0;
14164
14165 /* Record stashes for possible cloning in Perl_clone(). */
14166 if (HvNAME(sstr))
14167 av_push(param->stashes, dstr);
14168 }
14169 }
14170 else
14171 HvARRAY(MUTABLE_HV(dstr)) = NULL;
14172 break;
14173 case SVt_PVCV:
14174 if (!(param->flags & CLONEf_COPY_STACKS)) {
14175 CvDEPTH(dstr) = 0;
14176 }
14177 /* FALLTHROUGH */
14178 case SVt_PVFM:
14179 /* NOTE: not refcounted */
14180 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14181 hv_dup(CvSTASH(dstr), param);
14182 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14183 Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14184 if (!CvISXSUB(dstr)) {
14185 OP_REFCNT_LOCK;
14186 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14187 OP_REFCNT_UNLOCK;
14188 CvSLABBED_off(dstr);
14189 } else if (CvCONST(dstr)) {
14190 CvXSUBANY(dstr).any_ptr =
14191 sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14192 }
14193 assert(!CvSLABBED(dstr));
14194 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14195 if (CvNAMED(dstr))
14196 SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14197 hek_dup(CvNAME_HEK((CV *)sstr), param);
14198 /* don't dup if copying back - CvGV isn't refcounted, so the
14199 * duped GV may never be freed. A bit of a hack! DAPM */
14200 else
14201 SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14202 CvCVGV_RC(dstr)
14203 ? gv_dup_inc(CvGV(sstr), param)
14204 : (param->flags & CLONEf_JOIN_IN)
14205 ? NULL
14206 : gv_dup(CvGV(sstr), param);
14207
14208 if (!CvISXSUB(sstr)) {
14209 PADLIST * padlist = CvPADLIST(sstr);
14210 if(padlist)
14211 padlist = padlist_dup(padlist, param);
14212 CvPADLIST_set(dstr, padlist);
14213 } else
14214/* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14215 PoisonPADLIST(dstr);
14216
14217 CvOUTSIDE(dstr) =
14218 CvWEAKOUTSIDE(sstr)
14219 ? cv_dup( CvOUTSIDE(dstr), param)
14220 : cv_dup_inc(CvOUTSIDE(dstr), param);
14221 break;
14222 }
14223 }
14224 }
14225
14226 return dstr;
14227 }
14228
14229SV *
14230Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14231{
14232 PERL_ARGS_ASSERT_SV_DUP_INC;
14233 return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14234}
14235
14236SV *
14237Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14238{
14239 SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14240 PERL_ARGS_ASSERT_SV_DUP;
14241
14242 /* Track every SV that (at least initially) had a reference count of 0.
14243 We need to do this by holding an actual reference to it in this array.
14244 If we attempt to cheat, turn AvREAL_off(), and store only pointers
14245 (akin to the stashes hash, and the perl stack), we come unstuck if
14246 a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14247 thread) is manipulated in a CLONE method, because CLONE runs before the
14248 unreferenced array is walked to find SVs still with SvREFCNT() == 0
14249 (and fix things up by giving each a reference via the temps stack).
14250 Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14251 then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14252 before the walk of unreferenced happens and a reference to that is SV
14253 added to the temps stack. At which point we have the same SV considered
14254 to be in use, and free to be re-used. Not good.
14255 */
14256 if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14257 assert(param->unreferenced);
14258 av_push(param->unreferenced, SvREFCNT_inc(dstr));
14259 }
14260
14261 return dstr;
14262}
14263
14264/* duplicate a context */
14265
14266PERL_CONTEXT *
14267Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14268{
14269 PERL_CONTEXT *ncxs;
14270
14271 PERL_ARGS_ASSERT_CX_DUP;
14272
14273 if (!cxs)
14274 return (PERL_CONTEXT*)NULL;
14275
14276 /* look for it in the table first */
14277 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14278 if (ncxs)
14279 return ncxs;
14280
14281 /* create anew and remember what it is */
14282 Newx(ncxs, max + 1, PERL_CONTEXT);
14283 ptr_table_store(PL_ptr_table, cxs, ncxs);
14284 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14285
14286 while (ix >= 0) {
14287 PERL_CONTEXT * const ncx = &ncxs[ix];
14288 if (CxTYPE(ncx) == CXt_SUBST) {
14289 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14290 }
14291 else {
14292 ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14293 switch (CxTYPE(ncx)) {
14294 case CXt_SUB:
14295 ncx->blk_sub.cv = cv_dup_inc(ncx->blk_sub.cv, param);
14296 if(CxHASARGS(ncx)){
14297 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14298 } else {
14299 ncx->blk_sub.savearray = NULL;
14300 }
14301 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14302 ncx->blk_sub.prevcomppad);
14303 break;
14304 case CXt_EVAL:
14305 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14306 param);
14307 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14308 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
14309 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14310 /* XXX what do do with cur_top_env ???? */
14311 break;
14312 case CXt_LOOP_LAZYSV:
14313 ncx->blk_loop.state_u.lazysv.end
14314 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14315 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14316 duplication code instead.
14317 We are taking advantage of (1) av_dup_inc and sv_dup_inc
14318 actually being the same function, and (2) order
14319 equivalence of the two unions.
14320 We can assert the later [but only at run time :-(] */
14321 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14322 (void *) &ncx->blk_loop.state_u.lazysv.cur);
14323 /* FALLTHROUGH */
14324 case CXt_LOOP_ARY:
14325 ncx->blk_loop.state_u.ary.ary
14326 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14327 /* FALLTHROUGH */
14328 case CXt_LOOP_LIST:
14329 case CXt_LOOP_LAZYIV:
14330 /* code common to all 'for' CXt_LOOP_* types */
14331 ncx->blk_loop.itersave =
14332 sv_dup_inc(ncx->blk_loop.itersave, param);
14333 if (CxPADLOOP(ncx)) {
14334 PADOFFSET off = ncx->blk_loop.itervar_u.svp
14335 - &CX_CURPAD_SV(ncx->blk_loop, 0);
14336 ncx->blk_loop.oldcomppad =
14337 (PAD*)ptr_table_fetch(PL_ptr_table,
14338 ncx->blk_loop.oldcomppad);
14339 ncx->blk_loop.itervar_u.svp =
14340 &CX_CURPAD_SV(ncx->blk_loop, off);
14341 }
14342 else {
14343 /* this copies the GV if CXp_FOR_GV, or the SV for an
14344 * alias (for \$x (...)) - relies on gv_dup being the
14345 * same as sv_dup */
14346 ncx->blk_loop.itervar_u.gv
14347 = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14348 param);
14349 }
14350 break;
14351 case CXt_LOOP_PLAIN:
14352 break;
14353 case CXt_FORMAT:
14354 ncx->blk_format.prevcomppad =
14355 (PAD*)ptr_table_fetch(PL_ptr_table,
14356 ncx->blk_format.prevcomppad);
14357 ncx->blk_format.cv = cv_dup_inc(ncx->blk_format.cv, param);
14358 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
14359 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14360 param);
14361 break;
14362 case CXt_GIVEN:
14363 ncx->blk_givwhen.defsv_save =
14364 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14365 break;
14366 case CXt_BLOCK:
14367 case CXt_NULL:
14368 case CXt_WHEN:
14369 break;
14370 }
14371 }
14372 --ix;
14373 }
14374 return ncxs;
14375}
14376
14377/* duplicate a stack info structure */
14378
14379PERL_SI *
14380Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14381{
14382 PERL_SI *nsi;
14383
14384 PERL_ARGS_ASSERT_SI_DUP;
14385
14386 if (!si)
14387 return (PERL_SI*)NULL;
14388
14389 /* look for it in the table first */
14390 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14391 if (nsi)
14392 return nsi;
14393
14394 /* create anew and remember what it is */
14395 Newxz(nsi, 1, PERL_SI);
14396 ptr_table_store(PL_ptr_table, si, nsi);
14397
14398 nsi->si_stack = av_dup_inc(si->si_stack, param);
14399 nsi->si_cxix = si->si_cxix;
14400 nsi->si_cxmax = si->si_cxmax;
14401 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14402 nsi->si_type = si->si_type;
14403 nsi->si_prev = si_dup(si->si_prev, param);
14404 nsi->si_next = si_dup(si->si_next, param);
14405 nsi->si_markoff = si->si_markoff;
14406
14407 return nsi;
14408}
14409
14410#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
14411#define TOPINT(ss,ix) ((ss)[ix].any_i32)
14412#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
14413#define TOPLONG(ss,ix) ((ss)[ix].any_long)
14414#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
14415#define TOPIV(ss,ix) ((ss)[ix].any_iv)
14416#define POPUV(ss,ix) ((ss)[--(ix)].any_uv)
14417#define TOPUV(ss,ix) ((ss)[ix].any_uv)
14418#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
14419#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
14420#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
14421#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
14422#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
14423#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
14424#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14425#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14426
14427/* XXXXX todo */
14428#define pv_dup_inc(p) SAVEPV(p)
14429#define pv_dup(p) SAVEPV(p)
14430#define svp_dup_inc(p,pp) any_dup(p,pp)
14431
14432/* map any object to the new equivent - either something in the
14433 * ptr table, or something in the interpreter structure
14434 */
14435
14436void *
14437Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14438{
14439 void *ret;
14440
14441 PERL_ARGS_ASSERT_ANY_DUP;
14442
14443 if (!v)
14444 return (void*)NULL;
14445
14446 /* look for it in the table first */
14447 ret = ptr_table_fetch(PL_ptr_table, v);
14448 if (ret)
14449 return ret;
14450
14451 /* see if it is part of the interpreter structure */
14452 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14453 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14454 else {
14455 ret = v;
14456 }
14457
14458 return ret;
14459}
14460
14461/* duplicate the save stack */
14462
14463ANY *
14464Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14465{
14466 dVAR;
14467 ANY * const ss = proto_perl->Isavestack;
14468 const I32 max = proto_perl->Isavestack_max + SS_MAXPUSH;
14469 I32 ix = proto_perl->Isavestack_ix;
14470 ANY *nss;
14471 const SV *sv;
14472 const GV *gv;
14473 const AV *av;
14474 const HV *hv;
14475 void* ptr;
14476 int intval;
14477 long longval;
14478 GP *gp;
14479 IV iv;
14480 I32 i;
14481 char *c = NULL;
14482 void (*dptr) (void*);
14483 void (*dxptr) (pTHX_ void*);
14484
14485 PERL_ARGS_ASSERT_SS_DUP;
14486
14487 Newxz(nss, max, ANY);
14488
14489 while (ix > 0) {
14490 const UV uv = POPUV(ss,ix);
14491 const U8 type = (U8)uv & SAVE_MASK;
14492
14493 TOPUV(nss,ix) = uv;
14494 switch (type) {
14495 case SAVEt_CLEARSV:
14496 case SAVEt_CLEARPADRANGE:
14497 break;
14498 case SAVEt_HELEM: /* hash element */
14499 case SAVEt_SV: /* scalar reference */
14500 sv = (const SV *)POPPTR(ss,ix);
14501 TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14502 /* FALLTHROUGH */
14503 case SAVEt_ITEM: /* normal string */
14504 case SAVEt_GVSV: /* scalar slot in GV */
14505 sv = (const SV *)POPPTR(ss,ix);
14506 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14507 if (type == SAVEt_SV)
14508 break;
14509 /* FALLTHROUGH */
14510 case SAVEt_FREESV:
14511 case SAVEt_MORTALIZESV:
14512 case SAVEt_READONLY_OFF:
14513 sv = (const SV *)POPPTR(ss,ix);
14514 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14515 break;
14516 case SAVEt_FREEPADNAME:
14517 ptr = POPPTR(ss,ix);
14518 TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14519 PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14520 break;
14521 case SAVEt_SHARED_PVREF: /* char* in shared space */
14522 c = (char*)POPPTR(ss,ix);
14523 TOPPTR(nss,ix) = savesharedpv(c);
14524 ptr = POPPTR(ss,ix);
14525 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14526 break;
14527 case SAVEt_GENERIC_SVREF: /* generic sv */
14528 case SAVEt_SVREF: /* scalar reference */
14529 sv = (const SV *)POPPTR(ss,ix);
14530 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14531 if (type == SAVEt_SVREF)
14532 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14533 ptr = POPPTR(ss,ix);
14534 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14535 break;
14536 case SAVEt_GVSLOT: /* any slot in GV */
14537 sv = (const SV *)POPPTR(ss,ix);
14538 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14539 ptr = POPPTR(ss,ix);
14540 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14541 sv = (const SV *)POPPTR(ss,ix);
14542 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14543 break;
14544 case SAVEt_HV: /* hash reference */
14545 case SAVEt_AV: /* array reference */
14546 sv = (const SV *) POPPTR(ss,ix);
14547 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14548 /* FALLTHROUGH */
14549 case SAVEt_COMPPAD:
14550 case SAVEt_NSTAB:
14551 sv = (const SV *) POPPTR(ss,ix);
14552 TOPPTR(nss,ix) = sv_dup(sv, param);
14553 break;
14554 case SAVEt_INT: /* int reference */
14555 ptr = POPPTR(ss,ix);
14556 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14557 intval = (int)POPINT(ss,ix);
14558 TOPINT(nss,ix) = intval;
14559 break;
14560 case SAVEt_LONG: /* long reference */
14561 ptr = POPPTR(ss,ix);
14562 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14563 longval = (long)POPLONG(ss,ix);
14564 TOPLONG(nss,ix) = longval;
14565 break;
14566 case SAVEt_I32: /* I32 reference */
14567 ptr = POPPTR(ss,ix);
14568 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14569 i = POPINT(ss,ix);
14570 TOPINT(nss,ix) = i;
14571 break;
14572 case SAVEt_IV: /* IV reference */
14573 case SAVEt_STRLEN: /* STRLEN/size_t ref */
14574 ptr = POPPTR(ss,ix);
14575 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14576 iv = POPIV(ss,ix);
14577 TOPIV(nss,ix) = iv;
14578 break;
14579 case SAVEt_TMPSFLOOR:
14580 iv = POPIV(ss,ix);
14581 TOPIV(nss,ix) = iv;
14582 break;
14583 case SAVEt_HPTR: /* HV* reference */
14584 case SAVEt_APTR: /* AV* reference */
14585 case SAVEt_SPTR: /* SV* reference */
14586 ptr = POPPTR(ss,ix);
14587 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14588 sv = (const SV *)POPPTR(ss,ix);
14589 TOPPTR(nss,ix) = sv_dup(sv, param);
14590 break;
14591 case SAVEt_VPTR: /* random* reference */
14592 ptr = POPPTR(ss,ix);
14593 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14594 /* FALLTHROUGH */
14595 case SAVEt_INT_SMALL:
14596 case SAVEt_I32_SMALL:
14597 case SAVEt_I16: /* I16 reference */
14598 case SAVEt_I8: /* I8 reference */
14599 case SAVEt_BOOL:
14600 ptr = POPPTR(ss,ix);
14601 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14602 break;
14603 case SAVEt_GENERIC_PVREF: /* generic char* */
14604 case SAVEt_PPTR: /* char* reference */
14605 ptr = POPPTR(ss,ix);
14606 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14607 c = (char*)POPPTR(ss,ix);
14608 TOPPTR(nss,ix) = pv_dup(c);
14609 break;
14610 case SAVEt_GP: /* scalar reference */
14611 gp = (GP*)POPPTR(ss,ix);
14612 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14613 (void)GpREFCNT_inc(gp);
14614 gv = (const GV *)POPPTR(ss,ix);
14615 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14616 break;
14617 case SAVEt_FREEOP:
14618 ptr = POPPTR(ss,ix);
14619 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14620 /* these are assumed to be refcounted properly */
14621 OP *o;
14622 switch (((OP*)ptr)->op_type) {
14623 case OP_LEAVESUB:
14624 case OP_LEAVESUBLV:
14625 case OP_LEAVEEVAL:
14626 case OP_LEAVE:
14627 case OP_SCOPE:
14628 case OP_LEAVEWRITE:
14629 TOPPTR(nss,ix) = ptr;
14630 o = (OP*)ptr;
14631 OP_REFCNT_LOCK;
14632 (void) OpREFCNT_inc(o);
14633 OP_REFCNT_UNLOCK;
14634 break;
14635 default:
14636 TOPPTR(nss,ix) = NULL;
14637 break;
14638 }
14639 }
14640 else
14641 TOPPTR(nss,ix) = NULL;
14642 break;
14643 case SAVEt_FREECOPHH:
14644 ptr = POPPTR(ss,ix);
14645 TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14646 break;
14647 case SAVEt_ADELETE:
14648 av = (const AV *)POPPTR(ss,ix);
14649 TOPPTR(nss,ix) = av_dup_inc(av, param);
14650 i = POPINT(ss,ix);
14651 TOPINT(nss,ix) = i;
14652 break;
14653 case SAVEt_DELETE:
14654 hv = (const HV *)POPPTR(ss,ix);
14655 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14656 i = POPINT(ss,ix);
14657 TOPINT(nss,ix) = i;
14658 /* FALLTHROUGH */
14659 case SAVEt_FREEPV:
14660 c = (char*)POPPTR(ss,ix);
14661 TOPPTR(nss,ix) = pv_dup_inc(c);
14662 break;
14663 case SAVEt_STACK_POS: /* Position on Perl stack */
14664 i = POPINT(ss,ix);
14665 TOPINT(nss,ix) = i;
14666 break;
14667 case SAVEt_DESTRUCTOR:
14668 ptr = POPPTR(ss,ix);
14669 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
14670 dptr = POPDPTR(ss,ix);
14671 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14672 any_dup(FPTR2DPTR(void *, dptr),
14673 proto_perl));
14674 break;
14675 case SAVEt_DESTRUCTOR_X:
14676 ptr = POPPTR(ss,ix);
14677 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
14678 dxptr = POPDXPTR(ss,ix);
14679 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14680 any_dup(FPTR2DPTR(void *, dxptr),
14681 proto_perl));
14682 break;
14683 case SAVEt_REGCONTEXT:
14684 case SAVEt_ALLOC:
14685 ix -= uv >> SAVE_TIGHT_SHIFT;
14686 break;
14687 case SAVEt_AELEM: /* array element */
14688 sv = (const SV *)POPPTR(ss,ix);
14689 TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14690 i = POPINT(ss,ix);
14691 TOPINT(nss,ix) = i;
14692 av = (const AV *)POPPTR(ss,ix);
14693 TOPPTR(nss,ix) = av_dup_inc(av, param);
14694 break;
14695 case SAVEt_OP:
14696 ptr = POPPTR(ss,ix);
14697 TOPPTR(nss,ix) = ptr;
14698 break;
14699 case SAVEt_HINTS:
14700 ptr = POPPTR(ss,ix);
14701 ptr = cophh_copy((COPHH*)ptr);
14702 TOPPTR(nss,ix) = ptr;
14703 i = POPINT(ss,ix);
14704 TOPINT(nss,ix) = i;
14705 if (i & HINT_LOCALIZE_HH) {
14706 hv = (const HV *)POPPTR(ss,ix);
14707 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14708 }
14709 break;
14710 case SAVEt_PADSV_AND_MORTALIZE:
14711 longval = (long)POPLONG(ss,ix);
14712 TOPLONG(nss,ix) = longval;
14713 ptr = POPPTR(ss,ix);
14714 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14715 sv = (const SV *)POPPTR(ss,ix);
14716 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14717 break;
14718 case SAVEt_SET_SVFLAGS:
14719 i = POPINT(ss,ix);
14720 TOPINT(nss,ix) = i;
14721 i = POPINT(ss,ix);
14722 TOPINT(nss,ix) = i;
14723 sv = (const SV *)POPPTR(ss,ix);
14724 TOPPTR(nss,ix) = sv_dup(sv, param);
14725 break;
14726 case SAVEt_COMPILE_WARNINGS:
14727 ptr = POPPTR(ss,ix);
14728 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14729 break;
14730 case SAVEt_PARSER:
14731 ptr = POPPTR(ss,ix);
14732 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14733 break;
14734 default:
14735 Perl_croak(aTHX_
14736 "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
14737 }
14738 }
14739
14740 return nss;
14741}
14742
14743
14744/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14745 * flag to the result. This is done for each stash before cloning starts,
14746 * so we know which stashes want their objects cloned */
14747
14748static void
14749do_mark_cloneable_stash(pTHX_ SV *const sv)
14750{
14751 const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14752 if (hvname) {
14753 GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14754 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14755 if (cloner && GvCV(cloner)) {
14756 dSP;
14757 UV status;
14758
14759 ENTER;
14760 SAVETMPS;
14761 PUSHMARK(SP);
14762 mXPUSHs(newSVhek(hvname));
14763 PUTBACK;
14764 call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14765 SPAGAIN;
14766 status = POPu;
14767 PUTBACK;
14768 FREETMPS;
14769 LEAVE;
14770 if (status)
14771 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14772 }
14773 }
14774}
14775
14776
14777
14778/*
14779=for apidoc perl_clone
14780
14781Create and return a new interpreter by cloning the current one.
14782
14783C<perl_clone> takes these flags as parameters:
14784
14785C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14786without it we only clone the data and zero the stacks,
14787with it we copy the stacks and the new perl interpreter is
14788ready to run at the exact same point as the previous one.
14789The pseudo-fork code uses C<COPY_STACKS> while the
14790threads->create doesn't.
14791
14792C<CLONEf_KEEP_PTR_TABLE> -
14793C<perl_clone> keeps a ptr_table with the pointer of the old
14794variable as a key and the new variable as a value,
14795this allows it to check if something has been cloned and not
14796clone it again but rather just use the value and increase the
14797refcount. If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14798the ptr_table using the function
14799C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14800reason to keep it around is if you want to dup some of your own
14801variable who are outside the graph perl scans, an example of this
14802code is in F<threads.xs> create.
14803
14804C<CLONEf_CLONE_HOST> -
14805This is a win32 thing, it is ignored on unix, it tells perls
14806win32host code (which is c++) to clone itself, this is needed on
14807win32 if you want to run two threads at the same time,
14808if you just want to do some stuff in a separate perl interpreter
14809and then throw it away and return to the original one,
14810you don't need to do anything.
14811
14812=cut
14813*/
14814
14815/* XXX the above needs expanding by someone who actually understands it ! */
14816EXTERN_C PerlInterpreter *
14817perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14818
14819PerlInterpreter *
14820perl_clone(PerlInterpreter *proto_perl, UV flags)
14821{
14822 dVAR;
14823#ifdef PERL_IMPLICIT_SYS
14824
14825 PERL_ARGS_ASSERT_PERL_CLONE;
14826
14827 /* perlhost.h so we need to call into it
14828 to clone the host, CPerlHost should have a c interface, sky */
14829
14830#ifndef __amigaos4__
14831 if (flags & CLONEf_CLONE_HOST) {
14832 return perl_clone_host(proto_perl,flags);
14833 }
14834#endif
14835 return perl_clone_using(proto_perl, flags,
14836 proto_perl->IMem,
14837 proto_perl->IMemShared,
14838 proto_perl->IMemParse,
14839 proto_perl->IEnv,
14840 proto_perl->IStdIO,
14841 proto_perl->ILIO,
14842 proto_perl->IDir,
14843 proto_perl->ISock,
14844 proto_perl->IProc);
14845}
14846
14847PerlInterpreter *
14848perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14849 struct IPerlMem* ipM, struct IPerlMem* ipMS,
14850 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14851 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14852 struct IPerlDir* ipD, struct IPerlSock* ipS,
14853 struct IPerlProc* ipP)
14854{
14855 /* XXX many of the string copies here can be optimized if they're
14856 * constants; they need to be allocated as common memory and just
14857 * their pointers copied. */
14858
14859 IV i;
14860 CLONE_PARAMS clone_params;
14861 CLONE_PARAMS* const param = &clone_params;
14862
14863 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14864
14865 PERL_ARGS_ASSERT_PERL_CLONE_USING;
14866#else /* !PERL_IMPLICIT_SYS */
14867 IV i;
14868 CLONE_PARAMS clone_params;
14869 CLONE_PARAMS* param = &clone_params;
14870 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14871
14872 PERL_ARGS_ASSERT_PERL_CLONE;
14873#endif /* PERL_IMPLICIT_SYS */
14874
14875 /* for each stash, determine whether its objects should be cloned */
14876 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14877 PERL_SET_THX(my_perl);
14878
14879#ifdef DEBUGGING
14880 PoisonNew(my_perl, 1, PerlInterpreter);
14881 PL_op = NULL;
14882 PL_curcop = NULL;
14883 PL_defstash = NULL; /* may be used by perl malloc() */
14884 PL_markstack = 0;
14885 PL_scopestack = 0;
14886 PL_scopestack_name = 0;
14887 PL_savestack = 0;
14888 PL_savestack_ix = 0;
14889 PL_savestack_max = -1;
14890 PL_sig_pending = 0;
14891 PL_parser = NULL;
14892 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14893 Zero(&PL_padname_undef, 1, PADNAME);
14894 Zero(&PL_padname_const, 1, PADNAME);
14895# ifdef DEBUG_LEAKING_SCALARS
14896 PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14897# endif
14898# ifdef PERL_TRACE_OPS
14899 Zero(PL_op_exec_cnt, OP_max+2, UV);
14900# endif
14901#else /* !DEBUGGING */
14902 Zero(my_perl, 1, PerlInterpreter);
14903#endif /* DEBUGGING */
14904
14905#ifdef PERL_IMPLICIT_SYS
14906 /* host pointers */
14907 PL_Mem = ipM;
14908 PL_MemShared = ipMS;
14909 PL_MemParse = ipMP;
14910 PL_Env = ipE;
14911 PL_StdIO = ipStd;
14912 PL_LIO = ipLIO;
14913 PL_Dir = ipD;
14914 PL_Sock = ipS;
14915 PL_Proc = ipP;
14916#endif /* PERL_IMPLICIT_SYS */
14917
14918
14919 param->flags = flags;
14920 /* Nothing in the core code uses this, but we make it available to
14921 extensions (using mg_dup). */
14922 param->proto_perl = proto_perl;
14923 /* Likely nothing will use this, but it is initialised to be consistent
14924 with Perl_clone_params_new(). */
14925 param->new_perl = my_perl;
14926 param->unreferenced = NULL;
14927
14928
14929 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14930
14931 PL_body_arenas = NULL;
14932 Zero(&PL_body_roots, 1, PL_body_roots);
14933
14934 PL_sv_count = 0;
14935 PL_sv_root = NULL;
14936 PL_sv_arenaroot = NULL;
14937
14938 PL_debug = proto_perl->Idebug;
14939
14940 /* dbargs array probably holds garbage */
14941 PL_dbargs = NULL;
14942
14943 PL_compiling = proto_perl->Icompiling;
14944
14945 /* pseudo environmental stuff */
14946 PL_origargc = proto_perl->Iorigargc;
14947 PL_origargv = proto_perl->Iorigargv;
14948
14949#ifndef NO_TAINT_SUPPORT
14950 /* Set tainting stuff before PerlIO_debug can possibly get called */
14951 PL_tainting = proto_perl->Itainting;
14952 PL_taint_warn = proto_perl->Itaint_warn;
14953#else
14954 PL_tainting = FALSE;
14955 PL_taint_warn = FALSE;
14956#endif
14957
14958 PL_minus_c = proto_perl->Iminus_c;
14959
14960 PL_localpatches = proto_perl->Ilocalpatches;
14961 PL_splitstr = proto_perl->Isplitstr;
14962 PL_minus_n = proto_perl->Iminus_n;
14963 PL_minus_p = proto_perl->Iminus_p;
14964 PL_minus_l = proto_perl->Iminus_l;
14965 PL_minus_a = proto_perl->Iminus_a;
14966 PL_minus_E = proto_perl->Iminus_E;
14967 PL_minus_F = proto_perl->Iminus_F;
14968 PL_doswitches = proto_perl->Idoswitches;
14969 PL_dowarn = proto_perl->Idowarn;
14970#ifdef PERL_SAWAMPERSAND
14971 PL_sawampersand = proto_perl->Isawampersand;
14972#endif
14973 PL_unsafe = proto_perl->Iunsafe;
14974 PL_perldb = proto_perl->Iperldb;
14975 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14976 PL_exit_flags = proto_perl->Iexit_flags;
14977
14978 /* XXX time(&PL_basetime) when asked for? */
14979 PL_basetime = proto_perl->Ibasetime;
14980
14981 PL_maxsysfd = proto_perl->Imaxsysfd;
14982 PL_statusvalue = proto_perl->Istatusvalue;
14983#ifdef __VMS
14984 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
14985#else
14986 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14987#endif
14988
14989 /* RE engine related */
14990 PL_regmatch_slab = NULL;
14991 PL_reg_curpm = NULL;
14992
14993 PL_sub_generation = proto_perl->Isub_generation;
14994
14995 /* funky return mechanisms */
14996 PL_forkprocess = proto_perl->Iforkprocess;
14997
14998 /* internal state */
14999 PL_main_start = proto_perl->Imain_start;
15000 PL_eval_root = proto_perl->Ieval_root;
15001 PL_eval_start = proto_perl->Ieval_start;
15002
15003 PL_filemode = proto_perl->Ifilemode;
15004 PL_lastfd = proto_perl->Ilastfd;
15005 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
15006 PL_Argv = NULL;
15007 PL_Cmd = NULL;
15008 PL_gensym = proto_perl->Igensym;
15009
15010 PL_laststatval = proto_perl->Ilaststatval;
15011 PL_laststype = proto_perl->Ilaststype;
15012 PL_mess_sv = NULL;
15013
15014 PL_profiledata = NULL;
15015
15016 PL_generation = proto_perl->Igeneration;
15017
15018 PL_in_clean_objs = proto_perl->Iin_clean_objs;
15019 PL_in_clean_all = proto_perl->Iin_clean_all;
15020
15021 PL_delaymagic_uid = proto_perl->Idelaymagic_uid;
15022 PL_delaymagic_euid = proto_perl->Idelaymagic_euid;
15023 PL_delaymagic_gid = proto_perl->Idelaymagic_gid;
15024 PL_delaymagic_egid = proto_perl->Idelaymagic_egid;
15025 PL_nomemok = proto_perl->Inomemok;
15026 PL_an = proto_perl->Ian;
15027 PL_evalseq = proto_perl->Ievalseq;
15028 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
15029 PL_origalen = proto_perl->Iorigalen;
15030
15031 PL_sighandlerp = proto_perl->Isighandlerp;
15032
15033 PL_runops = proto_perl->Irunops;
15034
15035 PL_subline = proto_perl->Isubline;
15036
15037 PL_cv_has_eval = proto_perl->Icv_has_eval;
15038
15039#ifdef FCRYPT
15040 PL_cryptseen = proto_perl->Icryptseen;
15041#endif
15042
15043#ifdef USE_LOCALE_COLLATE
15044 PL_collation_ix = proto_perl->Icollation_ix;
15045 PL_collation_standard = proto_perl->Icollation_standard;
15046 PL_collxfrm_base = proto_perl->Icollxfrm_base;
15047 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
15048 PL_strxfrm_max_cp = proto_perl->Istrxfrm_max_cp;
15049#endif /* USE_LOCALE_COLLATE */
15050
15051#ifdef USE_LOCALE_NUMERIC
15052 PL_numeric_standard = proto_perl->Inumeric_standard;
15053 PL_numeric_local = proto_perl->Inumeric_local;
15054#endif /* !USE_LOCALE_NUMERIC */
15055
15056 /* Did the locale setup indicate UTF-8? */
15057 PL_utf8locale = proto_perl->Iutf8locale;
15058 PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15059 PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15060 /* Unicode features (see perlrun/-C) */
15061 PL_unicode = proto_perl->Iunicode;
15062
15063 /* Pre-5.8 signals control */
15064 PL_signals = proto_perl->Isignals;
15065
15066 /* times() ticks per second */
15067 PL_clocktick = proto_perl->Iclocktick;
15068
15069 /* Recursion stopper for PerlIO_find_layer */
15070 PL_in_load_module = proto_perl->Iin_load_module;
15071
15072 /* sort() routine */
15073 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
15074
15075 /* Not really needed/useful since the reenrant_retint is "volatile",
15076 * but do it for consistency's sake. */
15077 PL_reentrant_retint = proto_perl->Ireentrant_retint;
15078
15079 /* Hooks to shared SVs and locks. */
15080 PL_sharehook = proto_perl->Isharehook;
15081 PL_lockhook = proto_perl->Ilockhook;
15082 PL_unlockhook = proto_perl->Iunlockhook;
15083 PL_threadhook = proto_perl->Ithreadhook;
15084 PL_destroyhook = proto_perl->Idestroyhook;
15085 PL_signalhook = proto_perl->Isignalhook;
15086
15087 PL_globhook = proto_perl->Iglobhook;
15088
15089 /* swatch cache */
15090 PL_last_swash_hv = NULL; /* reinits on demand */
15091 PL_last_swash_klen = 0;
15092 PL_last_swash_key[0]= '\0';
15093 PL_last_swash_tmps = (U8*)NULL;
15094 PL_last_swash_slen = 0;
15095
15096 PL_srand_called = proto_perl->Isrand_called;
15097 Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15098
15099 if (flags & CLONEf_COPY_STACKS) {
15100 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15101 PL_tmps_ix = proto_perl->Itmps_ix;
15102 PL_tmps_max = proto_perl->Itmps_max;
15103 PL_tmps_floor = proto_perl->Itmps_floor;
15104
15105 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15106 * NOTE: unlike the others! */
15107 PL_scopestack_ix = proto_perl->Iscopestack_ix;
15108 PL_scopestack_max = proto_perl->Iscopestack_max;
15109
15110 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15111 * NOTE: unlike the others! */
15112 PL_savestack_ix = proto_perl->Isavestack_ix;
15113 PL_savestack_max = proto_perl->Isavestack_max;
15114 }
15115
15116 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
15117 PL_top_env = &PL_start_env;
15118
15119 PL_op = proto_perl->Iop;
15120
15121 PL_Sv = NULL;
15122 PL_Xpv = (XPV*)NULL;
15123 my_perl->Ina = proto_perl->Ina;
15124
15125 PL_statcache = proto_perl->Istatcache;
15126
15127#ifndef NO_TAINT_SUPPORT
15128 PL_tainted = proto_perl->Itainted;
15129#else
15130 PL_tainted = FALSE;
15131#endif
15132 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
15133
15134 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
15135
15136 PL_restartjmpenv = proto_perl->Irestartjmpenv;
15137 PL_restartop = proto_perl->Irestartop;
15138 PL_in_eval = proto_perl->Iin_eval;
15139 PL_delaymagic = proto_perl->Idelaymagic;
15140 PL_phase = proto_perl->Iphase;
15141 PL_localizing = proto_perl->Ilocalizing;
15142
15143 PL_hv_fetch_ent_mh = NULL;
15144 PL_modcount = proto_perl->Imodcount;
15145 PL_lastgotoprobe = NULL;
15146 PL_dumpindent = proto_perl->Idumpindent;
15147
15148 PL_efloatbuf = NULL; /* reinits on demand */
15149 PL_efloatsize = 0; /* reinits on demand */
15150
15151 /* regex stuff */
15152
15153 PL_colorset = 0; /* reinits PL_colors[] */
15154 /*PL_colors[6] = {0,0,0,0,0,0};*/
15155
15156 /* Pluggable optimizer */
15157 PL_peepp = proto_perl->Ipeepp;
15158 PL_rpeepp = proto_perl->Irpeepp;
15159 /* op_free() hook */
15160 PL_opfreehook = proto_perl->Iopfreehook;
15161
15162#ifdef USE_REENTRANT_API
15163 /* XXX: things like -Dm will segfault here in perlio, but doing
15164 * PERL_SET_CONTEXT(proto_perl);
15165 * breaks too many other things
15166 */
15167 Perl_reentrant_init(aTHX);
15168#endif
15169
15170 /* create SV map for pointer relocation */
15171 PL_ptr_table = ptr_table_new();
15172
15173 /* initialize these special pointers as early as possible */
15174 init_constants();
15175 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15176 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15177 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15178 ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15179 &PL_padname_const);
15180
15181 /* create (a non-shared!) shared string table */
15182 PL_strtab = newHV();
15183 HvSHAREKEYS_off(PL_strtab);
15184 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15185 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15186
15187 Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15188
15189 /* This PV will be free'd special way so must set it same way op.c does */
15190 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
15191 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15192
15193 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15194 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15195 CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15196 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15197
15198 param->stashes = newAV(); /* Setup array of objects to call clone on */
15199 /* This makes no difference to the implementation, as it always pushes
15200 and shifts pointers to other SVs without changing their reference
15201 count, with the array becoming empty before it is freed. However, it
15202 makes it conceptually clear what is going on, and will avoid some
15203 work inside av.c, filling slots between AvFILL() and AvMAX() with
15204 &PL_sv_undef, and SvREFCNT_dec()ing those. */
15205 AvREAL_off(param->stashes);
15206
15207 if (!(flags & CLONEf_COPY_STACKS)) {
15208 param->unreferenced = newAV();
15209 }
15210
15211#ifdef PERLIO_LAYERS
15212 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15213 PerlIO_clone(aTHX_ proto_perl, param);
15214#endif
15215
15216 PL_envgv = gv_dup_inc(proto_perl->Ienvgv, param);
15217 PL_incgv = gv_dup_inc(proto_perl->Iincgv, param);
15218 PL_hintgv = gv_dup_inc(proto_perl->Ihintgv, param);
15219 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
15220 PL_xsubfilename = proto_perl->Ixsubfilename;
15221 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
15222 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
15223
15224 /* switches */
15225 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
15226 PL_inplace = SAVEPV(proto_perl->Iinplace);
15227 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
15228
15229 /* magical thingies */
15230
15231 SvPVCLEAR(PERL_DEBUG_PAD(0)); /* For regex debugging. */
15232 SvPVCLEAR(PERL_DEBUG_PAD(1)); /* ext/re needs these */
15233 SvPVCLEAR(PERL_DEBUG_PAD(2)); /* even without DEBUGGING. */
15234
15235
15236 /* Clone the regex array */
15237 /* ORANGE FIXME for plugins, probably in the SV dup code.
15238 newSViv(PTR2IV(CALLREGDUPE(
15239 INT2PTR(REGEXP *, SvIVX(regex)), param))))
15240 */
15241 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15242 PL_regex_pad = AvARRAY(PL_regex_padav);
15243
15244 PL_stashpadmax = proto_perl->Istashpadmax;
15245 PL_stashpadix = proto_perl->Istashpadix ;
15246 Newx(PL_stashpad, PL_stashpadmax, HV *);
15247 {
15248 PADOFFSET o = 0;
15249 for (; o < PL_stashpadmax; ++o)
15250 PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15251 }
15252
15253 /* shortcuts to various I/O objects */
15254 PL_ofsgv = gv_dup_inc(proto_perl->Iofsgv, param);
15255 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
15256 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
15257 PL_defgv = gv_dup(proto_perl->Idefgv, param);
15258 PL_argvgv = gv_dup_inc(proto_perl->Iargvgv, param);
15259 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
15260 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
15261
15262 /* shortcuts to regexp stuff */
15263 PL_replgv = gv_dup_inc(proto_perl->Ireplgv, param);
15264
15265 /* shortcuts to misc objects */
15266 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
15267
15268 /* shortcuts to debugging objects */
15269 PL_DBgv = gv_dup_inc(proto_perl->IDBgv, param);
15270 PL_DBline = gv_dup_inc(proto_perl->IDBline, param);
15271 PL_DBsub = gv_dup_inc(proto_perl->IDBsub, param);
15272 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
15273 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
15274 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
15275 Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15276
15277 /* symbol tables */
15278 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
15279 PL_curstash = hv_dup_inc(proto_perl->Icurstash, param);
15280 PL_debstash = hv_dup(proto_perl->Idebstash, param);
15281 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
15282 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
15283
15284 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
15285 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
15286 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
15287 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
15288 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15289 PL_endav = av_dup_inc(proto_perl->Iendav, param);
15290 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
15291 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
15292 PL_savebegin = proto_perl->Isavebegin;
15293
15294 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
15295
15296 /* subprocess state */
15297 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
15298
15299 if (proto_perl->Iop_mask)
15300 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15301 else
15302 PL_op_mask = NULL;
15303 /* PL_asserting = proto_perl->Iasserting; */
15304
15305 /* current interpreter roots */
15306 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
15307 OP_REFCNT_LOCK;
15308 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
15309 OP_REFCNT_UNLOCK;
15310
15311 /* runtime control stuff */
15312 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15313
15314 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
15315
15316 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
15317
15318 /* interpreter atexit processing */
15319 PL_exitlistlen = proto_perl->Iexitlistlen;
15320 if (PL_exitlistlen) {
15321 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15322 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15323 }
15324 else
15325 PL_exitlist = (PerlExitListEntry*)NULL;
15326
15327 PL_my_cxt_size = proto_perl->Imy_cxt_size;
15328 if (PL_my_cxt_size) {
15329 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15330 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15331#ifdef PERL_GLOBAL_STRUCT_PRIVATE
15332 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15333 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15334#endif
15335 }
15336 else {
15337 PL_my_cxt_list = (void**)NULL;
15338#ifdef PERL_GLOBAL_STRUCT_PRIVATE
15339 PL_my_cxt_keys = (const char**)NULL;
15340#endif
15341 }
15342 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
15343 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
15344 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15345 PL_custom_ops = hv_dup_inc(proto_perl->Icustom_ops, param);
15346
15347 PL_compcv = cv_dup(proto_perl->Icompcv, param);
15348
15349 PAD_CLONE_VARS(proto_perl, param);
15350
15351#ifdef HAVE_INTERP_INTERN
15352 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15353#endif
15354
15355 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
15356
15357#ifdef PERL_USES_PL_PIDSTATUS
15358 PL_pidstatus = newHV(); /* XXX flag for cloning? */
15359#endif
15360 PL_osname = SAVEPV(proto_perl->Iosname);
15361 PL_parser = parser_dup(proto_perl->Iparser, param);
15362
15363 /* XXX this only works if the saved cop has already been cloned */
15364 if (proto_perl->Iparser) {
15365 PL_parser->saved_curcop = (COP*)any_dup(
15366 proto_perl->Iparser->saved_curcop,
15367 proto_perl);
15368 }
15369
15370 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
15371
15372#ifdef USE_LOCALE_CTYPE
15373 /* Should we warn if uses locale? */
15374 PL_warn_locale = sv_dup_inc(proto_perl->Iwarn_locale, param);
15375#endif
15376
15377#ifdef USE_LOCALE_COLLATE
15378 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
15379#endif /* USE_LOCALE_COLLATE */
15380
15381#ifdef USE_LOCALE_NUMERIC
15382 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
15383 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15384#endif /* !USE_LOCALE_NUMERIC */
15385
15386 /* Unicode inversion lists */
15387 PL_Latin1 = sv_dup_inc(proto_perl->ILatin1, param);
15388 PL_UpperLatin1 = sv_dup_inc(proto_perl->IUpperLatin1, param);
15389 PL_AboveLatin1 = sv_dup_inc(proto_perl->IAboveLatin1, param);
15390 PL_InBitmap = sv_dup_inc(proto_perl->IInBitmap, param);
15391
15392 PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15393 PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15394
15395 /* utf8 character class swashes */
15396 for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15397 PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15398 }
15399 for (i = 0; i < POSIX_CC_COUNT; i++) {
15400 PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15401 }
15402 PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15403 PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15404 PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15405 PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15406 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
15407 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15408 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15409 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15410 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15411 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15412 PL_utf8_xidstart = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15413 PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15414 PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15415 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15416 PL_utf8_xidcont = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15417 PL_utf8_foldable = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15418 PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15419 PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15420
15421 if (proto_perl->Ipsig_pend) {
15422 Newxz(PL_psig_pend, SIG_SIZE, int);
15423 }
15424 else {
15425 PL_psig_pend = (int*)NULL;
15426 }
15427
15428 if (proto_perl->Ipsig_name) {
15429 Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15430 sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15431 param);
15432 PL_psig_ptr = PL_psig_name + SIG_SIZE;
15433 }
15434 else {
15435 PL_psig_ptr = (SV**)NULL;
15436 PL_psig_name = (SV**)NULL;
15437 }
15438
15439 if (flags & CLONEf_COPY_STACKS) {
15440 Newx(PL_tmps_stack, PL_tmps_max, SV*);
15441 sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15442 PL_tmps_ix+1, param);
15443
15444 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15445 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15446 Newxz(PL_markstack, i, I32);
15447 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
15448 - proto_perl->Imarkstack);
15449 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
15450 - proto_perl->Imarkstack);
15451 Copy(proto_perl->Imarkstack, PL_markstack,
15452 PL_markstack_ptr - PL_markstack + 1, I32);
15453
15454 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15455 * NOTE: unlike the others! */
15456 Newxz(PL_scopestack, PL_scopestack_max, I32);
15457 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15458
15459#ifdef DEBUGGING
15460 Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15461 Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15462#endif
15463 /* reset stack AV to correct length before its duped via
15464 * PL_curstackinfo */
15465 AvFILLp(proto_perl->Icurstack) =
15466 proto_perl->Istack_sp - proto_perl->Istack_base;
15467
15468 /* NOTE: si_dup() looks at PL_markstack */
15469 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
15470
15471 /* PL_curstack = PL_curstackinfo->si_stack; */
15472 PL_curstack = av_dup(proto_perl->Icurstack, param);
15473 PL_mainstack = av_dup(proto_perl->Imainstack, param);
15474
15475 /* next PUSHs() etc. set *(PL_stack_sp+1) */
15476 PL_stack_base = AvARRAY(PL_curstack);
15477 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
15478 - proto_perl->Istack_base);
15479 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
15480
15481 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15482 PL_savestack = ss_dup(proto_perl, param);
15483 }
15484 else {
15485 init_stacks();
15486 ENTER; /* perl_destruct() wants to LEAVE; */
15487 }
15488
15489 PL_statgv = gv_dup(proto_perl->Istatgv, param);
15490 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
15491
15492 PL_rs = sv_dup_inc(proto_perl->Irs, param);
15493 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
15494 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
15495 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
15496 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
15497 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
15498
15499 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
15500
15501 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15502 PL_firstgv = gv_dup_inc(proto_perl->Ifirstgv, param);
15503 PL_secondgv = gv_dup_inc(proto_perl->Isecondgv, param);
15504
15505 PL_stashcache = newHV();
15506
15507 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
15508 proto_perl->Iwatchaddr);
15509 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
15510 if (PL_debug && PL_watchaddr) {
15511 PerlIO_printf(Perl_debug_log,
15512 "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15513 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15514 PTR2UV(PL_watchok));
15515 }
15516
15517 PL_registered_mros = hv_dup_inc(proto_perl->Iregistered_mros, param);
15518 PL_blockhooks = av_dup_inc(proto_perl->Iblockhooks, param);
15519 PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15520
15521 /* Call the ->CLONE method, if it exists, for each of the stashes
15522 identified by sv_dup() above.
15523 */
15524 while(av_tindex(param->stashes) != -1) {
15525 HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15526 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15527 if (cloner && GvCV(cloner)) {
15528 dSP;
15529 ENTER;
15530 SAVETMPS;
15531 PUSHMARK(SP);
15532 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15533 PUTBACK;
15534 call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15535 FREETMPS;
15536 LEAVE;
15537 }
15538 }
15539
15540 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15541 ptr_table_free(PL_ptr_table);
15542 PL_ptr_table = NULL;
15543 }
15544
15545 if (!(flags & CLONEf_COPY_STACKS)) {
15546 unreferenced_to_tmp_stack(param->unreferenced);
15547 }
15548
15549 SvREFCNT_dec(param->stashes);
15550
15551 /* orphaned? eg threads->new inside BEGIN or use */
15552 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15553 SvREFCNT_inc_simple_void(PL_compcv);
15554 SAVEFREESV(PL_compcv);
15555 }
15556
15557 return my_perl;
15558}
15559
15560static void
15561S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15562{
15563 PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15564
15565 if (AvFILLp(unreferenced) > -1) {
15566 SV **svp = AvARRAY(unreferenced);
15567 SV **const last = svp + AvFILLp(unreferenced);
15568 SSize_t count = 0;
15569
15570 do {
15571 if (SvREFCNT(*svp) == 1)
15572 ++count;
15573 } while (++svp <= last);
15574
15575 EXTEND_MORTAL(count);
15576 svp = AvARRAY(unreferenced);
15577
15578 do {
15579 if (SvREFCNT(*svp) == 1) {
15580 /* Our reference is the only one to this SV. This means that
15581 in this thread, the scalar effectively has a 0 reference.
15582 That doesn't work (cleanup never happens), so donate our
15583 reference to it onto the save stack. */
15584 PL_tmps_stack[++PL_tmps_ix] = *svp;
15585 } else {
15586 /* As an optimisation, because we are already walking the
15587 entire array, instead of above doing either
15588 SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15589 release our reference to the scalar, so that at the end of
15590 the array owns zero references to the scalars it happens to
15591 point to. We are effectively converting the array from
15592 AvREAL() on to AvREAL() off. This saves the av_clear()
15593 (triggered by the SvREFCNT_dec(unreferenced) below) from
15594 walking the array a second time. */
15595 SvREFCNT_dec(*svp);
15596 }
15597
15598 } while (++svp <= last);
15599 AvREAL_off(unreferenced);
15600 }
15601 SvREFCNT_dec_NN(unreferenced);
15602}
15603
15604void
15605Perl_clone_params_del(CLONE_PARAMS *param)
15606{
15607 /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15608 happy: */
15609 PerlInterpreter *const to = param->new_perl;
15610 dTHXa(to);
15611 PerlInterpreter *const was = PERL_GET_THX;
15612
15613 PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15614
15615 if (was != to) {
15616 PERL_SET_THX(to);
15617 }
15618
15619 SvREFCNT_dec(param->stashes);
15620 if (param->unreferenced)
15621 unreferenced_to_tmp_stack(param->unreferenced);
15622
15623 Safefree(param);
15624
15625 if (was != to) {
15626 PERL_SET_THX(was);
15627 }
15628}
15629
15630CLONE_PARAMS *
15631Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15632{
15633 dVAR;
15634 /* Need to play this game, as newAV() can call safesysmalloc(), and that
15635 does a dTHX; to get the context from thread local storage.
15636 FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15637 a version that passes in my_perl. */
15638 PerlInterpreter *const was = PERL_GET_THX;
15639 CLONE_PARAMS *param;
15640
15641 PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15642
15643 if (was != to) {
15644 PERL_SET_THX(to);
15645 }
15646
15647 /* Given that we've set the context, we can do this unshared. */
15648 Newx(param, 1, CLONE_PARAMS);
15649
15650 param->flags = 0;
15651 param->proto_perl = from;
15652 param->new_perl = to;
15653 param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15654 AvREAL_off(param->stashes);
15655 param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15656
15657 if (was != to) {
15658 PERL_SET_THX(was);
15659 }
15660 return param;
15661}
15662
15663#endif /* USE_ITHREADS */
15664
15665void
15666Perl_init_constants(pTHX)
15667{
15668 SvREFCNT(&PL_sv_undef) = SvREFCNT_IMMORTAL;
15669 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15670 SvANY(&PL_sv_undef) = NULL;
15671
15672 SvANY(&PL_sv_no) = new_XPVNV();
15673 SvREFCNT(&PL_sv_no) = SvREFCNT_IMMORTAL;
15674 SvFLAGS(&PL_sv_no) = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15675 |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15676 |SVp_POK|SVf_POK;
15677
15678 SvANY(&PL_sv_yes) = new_XPVNV();
15679 SvREFCNT(&PL_sv_yes) = SvREFCNT_IMMORTAL;
15680 SvFLAGS(&PL_sv_yes) = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15681 |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15682 |SVp_POK|SVf_POK;
15683
15684 SvPV_set(&PL_sv_no, (char*)PL_No);
15685 SvCUR_set(&PL_sv_no, 0);
15686 SvLEN_set(&PL_sv_no, 0);
15687 SvIV_set(&PL_sv_no, 0);
15688 SvNV_set(&PL_sv_no, 0);
15689
15690 SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15691 SvCUR_set(&PL_sv_yes, 1);
15692 SvLEN_set(&PL_sv_yes, 0);
15693 SvIV_set(&PL_sv_yes, 1);
15694 SvNV_set(&PL_sv_yes, 1);
15695
15696 PadnamePV(&PL_padname_const) = (char *)PL_No;
15697}
15698
15699/*
15700=head1 Unicode Support
15701
15702=for apidoc sv_recode_to_utf8
15703
15704C<encoding> is assumed to be an C<Encode> object, on entry the PV
15705of C<sv> is assumed to be octets in that encoding, and C<sv>
15706will be converted into Unicode (and UTF-8).
15707
15708If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15709is not a reference, nothing is done to C<sv>. If C<encoding> is not
15710an C<Encode::XS> Encoding object, bad things will happen.
15711(See F<cpan/Encode/encoding.pm> and L<Encode>.)
15712
15713The PV of C<sv> is returned.
15714
15715=cut */
15716
15717char *
15718Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15719{
15720 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15721
15722 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15723 SV *uni;
15724 STRLEN len;
15725 const char *s;
15726 dSP;
15727 SV *nsv = sv;
15728 ENTER;
15729 PUSHSTACK;
15730 SAVETMPS;
15731 if (SvPADTMP(nsv)) {
15732 nsv = sv_newmortal();
15733 SvSetSV_nosteal(nsv, sv);
15734 }
15735 save_re_context();
15736 PUSHMARK(sp);
15737 EXTEND(SP, 3);
15738 PUSHs(encoding);
15739 PUSHs(nsv);
15740/*
15741 NI-S 2002/07/09
15742 Passing sv_yes is wrong - it needs to be or'ed set of constants
15743 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15744 remove converted chars from source.
15745
15746 Both will default the value - let them.
15747
15748 XPUSHs(&PL_sv_yes);
15749*/
15750 PUTBACK;
15751 call_method("decode", G_SCALAR);
15752 SPAGAIN;
15753 uni = POPs;
15754 PUTBACK;
15755 s = SvPV_const(uni, len);
15756 if (s != SvPVX_const(sv)) {
15757 SvGROW(sv, len + 1);
15758 Move(s, SvPVX(sv), len + 1, char);
15759 SvCUR_set(sv, len);
15760 }
15761 FREETMPS;
15762 POPSTACK;
15763 LEAVE;
15764 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15765 /* clear pos and any utf8 cache */
15766 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15767 if (mg)
15768 mg->mg_len = -1;
15769 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15770 magic_setutf8(sv,mg); /* clear UTF8 cache */
15771 }
15772 SvUTF8_on(sv);
15773 return SvPVX(sv);
15774 }
15775 return SvPOKp(sv) ? SvPVX(sv) : NULL;
15776}
15777
15778/*
15779=for apidoc sv_cat_decode
15780
15781C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15782assumed to be octets in that encoding and decoding the input starts
15783from the position which S<C<(PV + *offset)>> pointed to. C<dsv> will be
15784concatenated with the decoded UTF-8 string from C<ssv>. Decoding will terminate
15785when the string C<tstr> appears in decoding output or the input ends on
15786the PV of C<ssv>. The value which C<offset> points will be modified
15787to the last input position on C<ssv>.
15788
15789Returns TRUE if the terminator was found, else returns FALSE.
15790
15791=cut */
15792
15793bool
15794Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15795 SV *ssv, int *offset, char *tstr, int tlen)
15796{
15797 bool ret = FALSE;
15798
15799 PERL_ARGS_ASSERT_SV_CAT_DECODE;
15800
15801 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15802 SV *offsv;
15803 dSP;
15804 ENTER;
15805 SAVETMPS;
15806 save_re_context();
15807 PUSHMARK(sp);
15808 EXTEND(SP, 6);
15809 PUSHs(encoding);
15810 PUSHs(dsv);
15811 PUSHs(ssv);
15812 offsv = newSViv(*offset);
15813 mPUSHs(offsv);
15814 mPUSHp(tstr, tlen);
15815 PUTBACK;
15816 call_method("cat_decode", G_SCALAR);
15817 SPAGAIN;
15818 ret = SvTRUE(TOPs);
15819 *offset = SvIV(offsv);
15820 PUTBACK;
15821 FREETMPS;
15822 LEAVE;
15823 }
15824 else
15825 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15826 return ret;
15827
15828}
15829
15830/* ---------------------------------------------------------------------
15831 *
15832 * support functions for report_uninit()
15833 */
15834
15835/* the maxiumum size of array or hash where we will scan looking
15836 * for the undefined element that triggered the warning */
15837
15838#define FUV_MAX_SEARCH_SIZE 1000
15839
15840/* Look for an entry in the hash whose value has the same SV as val;
15841 * If so, return a mortal copy of the key. */
15842
15843STATIC SV*
15844S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15845{
15846 dVAR;
15847 HE **array;
15848 I32 i;
15849
15850 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15851
15852 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15853 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15854 return NULL;
15855
15856 array = HvARRAY(hv);
15857
15858 for (i=HvMAX(hv); i>=0; i--) {
15859 HE *entry;
15860 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15861 if (HeVAL(entry) != val)
15862 continue;
15863 if ( HeVAL(entry) == &PL_sv_undef ||
15864 HeVAL(entry) == &PL_sv_placeholder)
15865 continue;
15866 if (!HeKEY(entry))
15867 return NULL;
15868 if (HeKLEN(entry) == HEf_SVKEY)
15869 return sv_mortalcopy(HeKEY_sv(entry));
15870 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15871 }
15872 }
15873 return NULL;
15874}
15875
15876/* Look for an entry in the array whose value has the same SV as val;
15877 * If so, return the index, otherwise return -1. */
15878
15879STATIC SSize_t
15880S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15881{
15882 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15883
15884 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15885 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15886 return -1;
15887
15888 if (val != &PL_sv_undef) {
15889 SV ** const svp = AvARRAY(av);
15890 SSize_t i;
15891
15892 for (i=AvFILLp(av); i>=0; i--)
15893 if (svp[i] == val)
15894 return i;
15895 }
15896 return -1;
15897}
15898
15899/* varname(): return the name of a variable, optionally with a subscript.
15900 * If gv is non-zero, use the name of that global, along with gvtype (one
15901 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15902 * targ. Depending on the value of the subscript_type flag, return:
15903 */
15904
15905#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
15906#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
15907#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
15908#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
15909
15910SV*
15911Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15912 const SV *const keyname, SSize_t aindex, int subscript_type)
15913{
15914
15915 SV * const name = sv_newmortal();
15916 if (gv && isGV(gv)) {
15917 char buffer[2];
15918 buffer[0] = gvtype;
15919 buffer[1] = 0;
15920
15921 /* as gv_fullname4(), but add literal '^' for $^FOO names */
15922
15923 gv_fullname4(name, gv, buffer, 0);
15924
15925 if ((unsigned int)SvPVX(name)[1] <= 26) {
15926 buffer[0] = '^';
15927 buffer[1] = SvPVX(name)[1] + 'A' - 1;
15928
15929 /* Swap the 1 unprintable control character for the 2 byte pretty
15930 version - ie substr($name, 1, 1) = $buffer; */
15931 sv_insert(name, 1, 1, buffer, 2);
15932 }
15933 }
15934 else {
15935 CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15936 PADNAME *sv;
15937
15938 assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15939
15940 if (!cv || !CvPADLIST(cv))
15941 return NULL;
15942 sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15943 sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15944 SvUTF8_on(name);
15945 }
15946
15947 if (subscript_type == FUV_SUBSCRIPT_HASH) {
15948 SV * const sv = newSV(0);
15949 STRLEN len;
15950 const char * const pv = SvPV_nomg_const((SV*)keyname, len);
15951
15952 *SvPVX(name) = '$';
15953 Perl_sv_catpvf(aTHX_ name, "{%s}",
15954 pv_pretty(sv, pv, len, 32, NULL, NULL,
15955 PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15956 SvREFCNT_dec_NN(sv);
15957 }
15958 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15959 *SvPVX(name) = '$';
15960 Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
15961 }
15962 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15963 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15964 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
15965 }
15966
15967 return name;
15968}
15969
15970
15971/*
15972=for apidoc find_uninit_var
15973
15974Find the name of the undefined variable (if any) that caused the operator
15975to issue a "Use of uninitialized value" warning.
15976If match is true, only return a name if its value matches C<uninit_sv>.
15977So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
15978warning, then following the direct child of the op may yield an
15979C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable. On the
15980other hand, with C<OP_ADD> there are two branches to follow, so we only print
15981the variable name if we get an exact match.
15982C<desc_p> points to a string pointer holding the description of the op.
15983This may be updated if needed.
15984
15985The name is returned as a mortal SV.
15986
15987Assumes that C<PL_op> is the OP that originally triggered the error, and that
15988C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
15989
15990=cut
15991*/
15992
15993STATIC SV *
15994S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15995 bool match, const char **desc_p)
15996{
15997 dVAR;
15998 SV *sv;
15999 const GV *gv;
16000 const OP *o, *o2, *kid;
16001
16002 PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16003
16004 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16005 uninit_sv == &PL_sv_placeholder)))
16006 return NULL;
16007
16008 switch (obase->op_type) {
16009
16010 case OP_UNDEF:
16011 /* undef should care if its args are undef - any warnings
16012 * will be from tied/magic vars */
16013 break;
16014
16015 case OP_RV2AV:
16016 case OP_RV2HV:
16017 case OP_PADAV:
16018 case OP_PADHV:
16019 {
16020 const bool pad = ( obase->op_type == OP_PADAV
16021 || obase->op_type == OP_PADHV
16022 || obase->op_type == OP_PADRANGE
16023 );
16024
16025 const bool hash = ( obase->op_type == OP_PADHV
16026 || obase->op_type == OP_RV2HV
16027 || (obase->op_type == OP_PADRANGE
16028 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16029 );
16030 SSize_t index = 0;
16031 SV *keysv = NULL;
16032 int subscript_type = FUV_SUBSCRIPT_WITHIN;
16033
16034 if (pad) { /* @lex, %lex */
16035 sv = PAD_SVl(obase->op_targ);
16036 gv = NULL;
16037 }
16038 else {
16039 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16040 /* @global, %global */
16041 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16042 if (!gv)
16043 break;
16044 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16045 }
16046 else if (obase == PL_op) /* @{expr}, %{expr} */
16047 return find_uninit_var(cUNOPx(obase)->op_first,
16048 uninit_sv, match, desc_p);
16049 else /* @{expr}, %{expr} as a sub-expression */
16050 return NULL;
16051 }
16052
16053 /* attempt to find a match within the aggregate */
16054 if (hash) {
16055 keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16056 if (keysv)
16057 subscript_type = FUV_SUBSCRIPT_HASH;
16058 }
16059 else {
16060 index = find_array_subscript((const AV *)sv, uninit_sv);
16061 if (index >= 0)
16062 subscript_type = FUV_SUBSCRIPT_ARRAY;
16063 }
16064
16065 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16066 break;
16067
16068 return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16069 keysv, index, subscript_type);
16070 }
16071
16072 case OP_RV2SV:
16073 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16074 /* $global */
16075 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16076 if (!gv || !GvSTASH(gv))
16077 break;
16078 if (match && (GvSV(gv) != uninit_sv))
16079 break;
16080 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16081 }
16082 /* ${expr} */
16083 return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16084
16085 case OP_PADSV:
16086 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16087 break;
16088 return varname(NULL, '$', obase->op_targ,
16089 NULL, 0, FUV_SUBSCRIPT_NONE);
16090
16091 case OP_GVSV:
16092 gv = cGVOPx_gv(obase);
16093 if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16094 break;
16095 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16096
16097 case OP_AELEMFAST_LEX:
16098 if (match) {
16099 SV **svp;
16100 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16101 if (!av || SvRMAGICAL(av))
16102 break;
16103 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16104 if (!svp || *svp != uninit_sv)
16105 break;
16106 }
16107 return varname(NULL, '$', obase->op_targ,
16108 NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16109 case OP_AELEMFAST:
16110 {
16111 gv = cGVOPx_gv(obase);
16112 if (!gv)
16113 break;
16114 if (match) {
16115 SV **svp;
16116 AV *const av = GvAV(gv);
16117 if (!av || SvRMAGICAL(av))
16118 break;
16119 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16120 if (!svp || *svp != uninit_sv)
16121 break;
16122 }
16123 return varname(gv, '$', 0,
16124 NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16125 }
16126 NOT_REACHED; /* NOTREACHED */
16127
16128 case OP_EXISTS:
16129 o = cUNOPx(obase)->op_first;
16130 if (!o || o->op_type != OP_NULL ||
16131 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16132 break;
16133 return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16134
16135 case OP_AELEM:
16136 case OP_HELEM:
16137 {
16138 bool negate = FALSE;
16139
16140 if (PL_op == obase)
16141 /* $a[uninit_expr] or $h{uninit_expr} */
16142 return find_uninit_var(cBINOPx(obase)->op_last,
16143 uninit_sv, match, desc_p);
16144
16145 gv = NULL;
16146 o = cBINOPx(obase)->op_first;
16147 kid = cBINOPx(obase)->op_last;
16148
16149 /* get the av or hv, and optionally the gv */
16150 sv = NULL;
16151 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16152 sv = PAD_SV(o->op_targ);
16153 }
16154 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16155 && cUNOPo->op_first->op_type == OP_GV)
16156 {
16157 gv = cGVOPx_gv(cUNOPo->op_first);
16158 if (!gv)
16159 break;
16160 sv = o->op_type
16161 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16162 }
16163 if (!sv)
16164 break;
16165
16166 if (kid && kid->op_type == OP_NEGATE) {
16167 negate = TRUE;
16168 kid = cUNOPx(kid)->op_first;
16169 }
16170
16171 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16172 /* index is constant */
16173 SV* kidsv;
16174 if (negate) {
16175 kidsv = newSVpvs_flags("-", SVs_TEMP);
16176 sv_catsv(kidsv, cSVOPx_sv(kid));
16177 }
16178 else
16179 kidsv = cSVOPx_sv(kid);
16180 if (match) {
16181 if (SvMAGICAL(sv))
16182 break;
16183 if (obase->op_type == OP_HELEM) {
16184 HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16185 if (!he || HeVAL(he) != uninit_sv)
16186 break;
16187 }
16188 else {
16189 SV * const opsv = cSVOPx_sv(kid);
16190 const IV opsviv = SvIV(opsv);
16191 SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16192 negate ? - opsviv : opsviv,
16193 FALSE);
16194 if (!svp || *svp != uninit_sv)
16195 break;
16196 }
16197 }
16198 if (obase->op_type == OP_HELEM)
16199 return varname(gv, '%', o->op_targ,
16200 kidsv, 0, FUV_SUBSCRIPT_HASH);
16201 else
16202 return varname(gv, '@', o->op_targ, NULL,
16203 negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16204 FUV_SUBSCRIPT_ARRAY);
16205 }
16206 else {
16207 /* index is an expression;
16208 * attempt to find a match within the aggregate */
16209 if (obase->op_type == OP_HELEM) {
16210 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16211 if (keysv)
16212 return varname(gv, '%', o->op_targ,
16213 keysv, 0, FUV_SUBSCRIPT_HASH);
16214 }
16215 else {
16216 const SSize_t index
16217 = find_array_subscript((const AV *)sv, uninit_sv);
16218 if (index >= 0)
16219 return varname(gv, '@', o->op_targ,
16220 NULL, index, FUV_SUBSCRIPT_ARRAY);
16221 }
16222 if (match)
16223 break;
16224 return varname(gv,
16225 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16226 ? '@' : '%'),
16227 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16228 }
16229 NOT_REACHED; /* NOTREACHED */
16230 }
16231
16232 case OP_MULTIDEREF: {
16233 /* If we were executing OP_MULTIDEREF when the undef warning
16234 * triggered, then it must be one of the index values within
16235 * that triggered it. If not, then the only possibility is that
16236 * the value retrieved by the last aggregate index might be the
16237 * culprit. For the former, we set PL_multideref_pc each time before
16238 * using an index, so work though the item list until we reach
16239 * that point. For the latter, just work through the entire item
16240 * list; the last aggregate retrieved will be the candidate.
16241 * There is a third rare possibility: something triggered
16242 * magic while fetching an array/hash element. Just display
16243 * nothing in this case.
16244 */
16245
16246 /* the named aggregate, if any */
16247 PADOFFSET agg_targ = 0;
16248 GV *agg_gv = NULL;
16249 /* the last-seen index */
16250 UV index_type;
16251 PADOFFSET index_targ;
16252 GV *index_gv;
16253 IV index_const_iv = 0; /* init for spurious compiler warn */
16254 SV *index_const_sv;
16255 int depth = 0; /* how many array/hash lookups we've done */
16256
16257 UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16258 UNOP_AUX_item *last = NULL;
16259 UV actions = items->uv;
16260 bool is_hv;
16261
16262 if (PL_op == obase) {
16263 last = PL_multideref_pc;
16264 assert(last >= items && last <= items + items[-1].uv);
16265 }
16266
16267 assert(actions);
16268
16269 while (1) {
16270 is_hv = FALSE;
16271 switch (actions & MDEREF_ACTION_MASK) {
16272
16273 case MDEREF_reload:
16274 actions = (++items)->uv;
16275 continue;
16276
16277 case MDEREF_HV_padhv_helem: /* $lex{...} */
16278 is_hv = TRUE;
16279 /* FALLTHROUGH */
16280 case MDEREF_AV_padav_aelem: /* $lex[...] */
16281 agg_targ = (++items)->pad_offset;
16282 agg_gv = NULL;
16283 break;
16284
16285 case MDEREF_HV_gvhv_helem: /* $pkg{...} */
16286 is_hv = TRUE;
16287 /* FALLTHROUGH */
16288 case MDEREF_AV_gvav_aelem: /* $pkg[...] */
16289 agg_targ = 0;
16290 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16291 assert(isGV_with_GP(agg_gv));
16292 break;
16293
16294 case MDEREF_HV_gvsv_vivify_rv2hv_helem: /* $pkg->{...} */
16295 case MDEREF_HV_padsv_vivify_rv2hv_helem: /* $lex->{...} */
16296 ++items;
16297 /* FALLTHROUGH */
16298 case MDEREF_HV_pop_rv2hv_helem: /* expr->{...} */
16299 case MDEREF_HV_vivify_rv2hv_helem: /* vivify, ->{...} */
16300 agg_targ = 0;
16301 agg_gv = NULL;
16302 is_hv = TRUE;
16303 break;
16304
16305 case MDEREF_AV_gvsv_vivify_rv2av_aelem: /* $pkg->[...] */
16306 case MDEREF_AV_padsv_vivify_rv2av_aelem: /* $lex->[...] */
16307 ++items;
16308 /* FALLTHROUGH */
16309 case MDEREF_AV_pop_rv2av_aelem: /* expr->[...] */
16310 case MDEREF_AV_vivify_rv2av_aelem: /* vivify, ->[...] */
16311 agg_targ = 0;
16312 agg_gv = NULL;
16313 } /* switch */
16314
16315 index_targ = 0;
16316 index_gv = NULL;
16317 index_const_sv = NULL;
16318
16319 index_type = (actions & MDEREF_INDEX_MASK);
16320 switch (index_type) {
16321 case MDEREF_INDEX_none:
16322 break;
16323 case MDEREF_INDEX_const:
16324 if (is_hv)
16325 index_const_sv = UNOP_AUX_item_sv(++items)
16326 else
16327 index_const_iv = (++items)->iv;
16328 break;
16329 case MDEREF_INDEX_padsv:
16330 index_targ = (++items)->pad_offset;
16331 break;
16332 case MDEREF_INDEX_gvsv:
16333 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16334 assert(isGV_with_GP(index_gv));
16335 break;
16336 }
16337
16338 if (index_type != MDEREF_INDEX_none)
16339 depth++;
16340
16341 if ( index_type == MDEREF_INDEX_none
16342 || (actions & MDEREF_FLAG_last)
16343 || (last && items >= last)
16344 )
16345 break;
16346
16347 actions >>= MDEREF_SHIFT;
16348 } /* while */
16349
16350 if (PL_op == obase) {
16351 /* most likely index was undef */
16352
16353 *desc_p = ( (actions & MDEREF_FLAG_last)
16354 && (obase->op_private
16355 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16356 ?
16357 (obase->op_private & OPpMULTIDEREF_EXISTS)
16358 ? "exists"
16359 : "delete"
16360 : is_hv ? "hash element" : "array element";
16361 assert(index_type != MDEREF_INDEX_none);
16362 if (index_gv) {
16363 if (GvSV(index_gv) == uninit_sv)
16364 return varname(index_gv, '$', 0, NULL, 0,
16365 FUV_SUBSCRIPT_NONE);
16366 else
16367 return NULL;
16368 }
16369 if (index_targ) {
16370 if (PL_curpad[index_targ] == uninit_sv)
16371 return varname(NULL, '$', index_targ,
16372 NULL, 0, FUV_SUBSCRIPT_NONE);
16373 else
16374 return NULL;
16375 }
16376 /* If we got to this point it was undef on a const subscript,
16377 * so magic probably involved, e.g. $ISA[0]. Give up. */
16378 return NULL;
16379 }
16380
16381 /* the SV returned by pp_multideref() was undef, if anything was */
16382
16383 if (depth != 1)
16384 break;
16385
16386 if (agg_targ)
16387 sv = PAD_SV(agg_targ);
16388 else if (agg_gv)
16389 sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16390 else
16391 break;
16392
16393 if (index_type == MDEREF_INDEX_const) {
16394 if (match) {
16395 if (SvMAGICAL(sv))
16396 break;
16397 if (is_hv) {
16398 HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16399 if (!he || HeVAL(he) != uninit_sv)
16400 break;
16401 }
16402 else {
16403 SV * const * const svp =
16404 av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16405 if (!svp || *svp != uninit_sv)
16406 break;
16407 }
16408 }
16409 return is_hv
16410 ? varname(agg_gv, '%', agg_targ,
16411 index_const_sv, 0, FUV_SUBSCRIPT_HASH)
16412 : varname(agg_gv, '@', agg_targ,
16413 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16414 }
16415 else {
16416 /* index is an var */
16417 if (is_hv) {
16418 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16419 if (keysv)
16420 return varname(agg_gv, '%', agg_targ,
16421 keysv, 0, FUV_SUBSCRIPT_HASH);
16422 }
16423 else {
16424 const SSize_t index
16425 = find_array_subscript((const AV *)sv, uninit_sv);
16426 if (index >= 0)
16427 return varname(agg_gv, '@', agg_targ,
16428 NULL, index, FUV_SUBSCRIPT_ARRAY);
16429 }
16430 if (match)
16431 break;
16432 return varname(agg_gv,
16433 is_hv ? '%' : '@',
16434 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16435 }
16436 NOT_REACHED; /* NOTREACHED */
16437 }
16438
16439 case OP_AASSIGN:
16440 /* only examine RHS */
16441 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16442 match, desc_p);
16443
16444 case OP_OPEN:
16445 o = cUNOPx(obase)->op_first;
16446 if ( o->op_type == OP_PUSHMARK
16447 || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16448 )
16449 o = OpSIBLING(o);
16450
16451 if (!OpHAS_SIBLING(o)) {
16452 /* one-arg version of open is highly magical */
16453
16454 if (o->op_type == OP_GV) { /* open FOO; */
16455 gv = cGVOPx_gv(o);
16456 if (match && GvSV(gv) != uninit_sv)
16457 break;
16458 return varname(gv, '$', 0,
16459 NULL, 0, FUV_SUBSCRIPT_NONE);
16460 }
16461 /* other possibilities not handled are:
16462 * open $x; or open my $x; should return '${*$x}'
16463 * open expr; should return '$'.expr ideally
16464 */
16465 break;
16466 }
16467 match = 1;
16468 goto do_op;
16469
16470 /* ops where $_ may be an implicit arg */
16471 case OP_TRANS:
16472 case OP_TRANSR:
16473 case OP_SUBST:
16474 case OP_MATCH:
16475 if ( !(obase->op_flags & OPf_STACKED)) {
16476 if (uninit_sv == DEFSV)
16477 return newSVpvs_flags("$_", SVs_TEMP);
16478 else if (obase->op_targ
16479 && uninit_sv == PAD_SVl(obase->op_targ))
16480 return varname(NULL, '$', obase->op_targ, NULL, 0,
16481 FUV_SUBSCRIPT_NONE);
16482 }
16483 goto do_op;
16484
16485 case OP_PRTF:
16486 case OP_PRINT:
16487 case OP_SAY:
16488 match = 1; /* print etc can return undef on defined args */
16489 /* skip filehandle as it can't produce 'undef' warning */
16490 o = cUNOPx(obase)->op_first;
16491 if ((obase->op_flags & OPf_STACKED)
16492 &&
16493 ( o->op_type == OP_PUSHMARK
16494 || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16495 o = OpSIBLING(OpSIBLING(o));
16496 goto do_op2;
16497
16498
16499 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16500 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16501
16502 /* the following ops are capable of returning PL_sv_undef even for
16503 * defined arg(s) */
16504
16505 case OP_BACKTICK:
16506 case OP_PIPE_OP:
16507 case OP_FILENO:
16508 case OP_BINMODE:
16509 case OP_TIED:
16510 case OP_GETC:
16511 case OP_SYSREAD:
16512 case OP_SEND:
16513 case OP_IOCTL:
16514 case OP_SOCKET:
16515 case OP_SOCKPAIR:
16516 case OP_BIND:
16517 case OP_CONNECT:
16518 case OP_LISTEN:
16519 case OP_ACCEPT:
16520 case OP_SHUTDOWN:
16521 case OP_SSOCKOPT:
16522 case OP_GETPEERNAME:
16523 case OP_FTRREAD:
16524 case OP_FTRWRITE:
16525 case OP_FTREXEC:
16526 case OP_FTROWNED:
16527 case OP_FTEREAD:
16528 case OP_FTEWRITE:
16529 case OP_FTEEXEC:
16530 case OP_FTEOWNED:
16531 case OP_FTIS:
16532 case OP_FTZERO:
16533 case OP_FTSIZE:
16534 case OP_FTFILE:
16535 case OP_FTDIR:
16536 case OP_FTLINK:
16537 case OP_FTPIPE:
16538 case OP_FTSOCK:
16539 case OP_FTBLK:
16540 case OP_FTCHR:
16541 case OP_FTTTY:
16542 case OP_FTSUID:
16543 case OP_FTSGID:
16544 case OP_FTSVTX:
16545 case OP_FTTEXT:
16546 case OP_FTBINARY:
16547 case OP_FTMTIME:
16548 case OP_FTATIME:
16549 case OP_FTCTIME:
16550 case OP_READLINK:
16551 case OP_OPEN_DIR:
16552 case OP_READDIR:
16553 case OP_TELLDIR:
16554 case OP_SEEKDIR:
16555 case OP_REWINDDIR:
16556 case OP_CLOSEDIR:
16557 case OP_GMTIME:
16558 case OP_ALARM:
16559 case OP_SEMGET:
16560 case OP_GETLOGIN:
16561 case OP_SUBSTR:
16562 case OP_AEACH:
16563 case OP_EACH:
16564 case OP_SORT:
16565 case OP_CALLER:
16566 case OP_DOFILE:
16567 case OP_PROTOTYPE:
16568 case OP_NCMP:
16569 case OP_SMARTMATCH:
16570 case OP_UNPACK:
16571 case OP_SYSOPEN:
16572 case OP_SYSSEEK:
16573 match = 1;
16574 goto do_op;
16575
16576 case OP_ENTERSUB:
16577 case OP_GOTO:
16578 /* XXX tmp hack: these two may call an XS sub, and currently
16579 XS subs don't have a SUB entry on the context stack, so CV and
16580 pad determination goes wrong, and BAD things happen. So, just
16581 don't try to determine the value under those circumstances.
16582 Need a better fix at dome point. DAPM 11/2007 */
16583 break;
16584
16585 case OP_FLIP:
16586 case OP_FLOP:
16587 {
16588 GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16589 if (gv && GvSV(gv) == uninit_sv)
16590 return newSVpvs_flags("$.", SVs_TEMP);
16591 goto do_op;
16592 }
16593
16594 case OP_POS:
16595 /* def-ness of rval pos() is independent of the def-ness of its arg */
16596 if ( !(obase->op_flags & OPf_MOD))
16597 break;
16598
16599 case OP_SCHOMP:
16600 case OP_CHOMP:
16601 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16602 return newSVpvs_flags("${$/}", SVs_TEMP);
16603 /* FALLTHROUGH */
16604
16605 default:
16606 do_op:
16607 if (!(obase->op_flags & OPf_KIDS))
16608 break;
16609 o = cUNOPx(obase)->op_first;
16610
16611 do_op2:
16612 if (!o)
16613 break;
16614
16615 /* This loop checks all the kid ops, skipping any that cannot pos-
16616 * sibly be responsible for the uninitialized value; i.e., defined
16617 * constants and ops that return nothing. If there is only one op
16618 * left that is not skipped, then we *know* it is responsible for
16619 * the uninitialized value. If there is more than one op left, we
16620 * have to look for an exact match in the while() loop below.
16621 * Note that we skip padrange, because the individual pad ops that
16622 * it replaced are still in the tree, so we work on them instead.
16623 */
16624 o2 = NULL;
16625 for (kid=o; kid; kid = OpSIBLING(kid)) {
16626 const OPCODE type = kid->op_type;
16627 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16628 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
16629 || (type == OP_PUSHMARK)
16630 || (type == OP_PADRANGE)
16631 )
16632 continue;
16633
16634 if (o2) { /* more than one found */
16635 o2 = NULL;
16636 break;
16637 }
16638 o2 = kid;
16639 }
16640 if (o2)
16641 return find_uninit_var(o2, uninit_sv, match, desc_p);
16642
16643 /* scan all args */
16644 while (o) {
16645 sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16646 if (sv)
16647 return sv;
16648 o = OpSIBLING(o);
16649 }
16650 break;
16651 }
16652 return NULL;
16653}
16654
16655
16656/*
16657=for apidoc report_uninit
16658
16659Print appropriate "Use of uninitialized variable" warning.
16660
16661=cut
16662*/
16663
16664void
16665Perl_report_uninit(pTHX_ const SV *uninit_sv)
16666{
16667 const char *desc = NULL;
16668 SV* varname = NULL;
16669
16670 if (PL_op) {
16671 desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16672 ? "join or string"
16673 : OP_DESC(PL_op);
16674 if (uninit_sv && PL_curpad) {
16675 varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16676 if (varname)
16677 sv_insert(varname, 0, 0, " ", 1);
16678 }
16679 }
16680 else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16681 /* we've reached the end of a sort block or sub,
16682 * and the uninit value is probably what that code returned */
16683 desc = "sort";
16684
16685 /* PL_warn_uninit_sv is constant */
16686 GCC_DIAG_IGNORE(-Wformat-nonliteral);
16687 if (desc)
16688 /* diag_listed_as: Use of uninitialized value%s */
16689 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16690 SVfARG(varname ? varname : &PL_sv_no),
16691 " in ", desc);
16692 else
16693 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16694 "", "", "");
16695 GCC_DIAG_RESTORE;
16696}
16697
16698/*
16699 * ex: set ts=8 sts=4 sw=4 et:
16700 */