This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
README.cygwin update
[perl5.git] / sv.c
... / ...
CommitLineData
1/* sv.c
2 *
3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
5 *
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8 *
9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
10 *
11 *
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
17 * in the pp*.c files.
18 */
19
20#include "EXTERN.h"
21#define PERL_IN_SV_C
22#include "perl.h"
23#include "regcomp.h"
24
25#define FCALL *f
26
27#ifdef __Lynx__
28/* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
30#endif
31
32#ifdef PERL_UTF8_CACHE_ASSERT
33/* if adding more checks watch out for the following tests:
34 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
35 * lib/utf8.t lib/Unicode/Collate/t/index.t
36 * --jhi
37 */
38# define ASSERT_UTF8_CACHE(cache) \
39 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
40 assert((cache)[2] <= (cache)[3]); \
41 assert((cache)[3] <= (cache)[1]);} \
42 } STMT_END
43#else
44# define ASSERT_UTF8_CACHE(cache) NOOP
45#endif
46
47#ifdef PERL_OLD_COPY_ON_WRITE
48#define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
49#define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
50/* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
51 on-write. */
52#endif
53
54/* ============================================================================
55
56=head1 Allocation and deallocation of SVs.
57
58An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
59sv, av, hv...) contains type and reference count information, and for
60many types, a pointer to the body (struct xrv, xpv, xpviv...), which
61contains fields specific to each type. Some types store all they need
62in the head, so don't have a body.
63
64In all but the most memory-paranoid configuations (ex: PURIFY), heads
65and bodies are allocated out of arenas, which by default are
66approximately 4K chunks of memory parcelled up into N heads or bodies.
67Sv-bodies are allocated by their sv-type, guaranteeing size
68consistency needed to allocate safely from arrays.
69
70For SV-heads, the first slot in each arena is reserved, and holds a
71link to the next arena, some flags, and a note of the number of slots.
72Snaked through each arena chain is a linked list of free items; when
73this becomes empty, an extra arena is allocated and divided up into N
74items which are threaded into the free list.
75
76SV-bodies are similar, but they use arena-sets by default, which
77separate the link and info from the arena itself, and reclaim the 1st
78slot in the arena. SV-bodies are further described later.
79
80The following global variables are associated with arenas:
81
82 PL_sv_arenaroot pointer to list of SV arenas
83 PL_sv_root pointer to list of free SV structures
84
85 PL_body_arenas head of linked-list of body arenas
86 PL_body_roots[] array of pointers to list of free bodies of svtype
87 arrays are indexed by the svtype needed
88
89A few special SV heads are not allocated from an arena, but are
90instead directly created in the interpreter structure, eg PL_sv_undef.
91The size of arenas can be changed from the default by setting
92PERL_ARENA_SIZE appropriately at compile time.
93
94The SV arena serves the secondary purpose of allowing still-live SVs
95to be located and destroyed during final cleanup.
96
97At the lowest level, the macros new_SV() and del_SV() grab and free
98an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
99to return the SV to the free list with error checking.) new_SV() calls
100more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
101SVs in the free list have their SvTYPE field set to all ones.
102
103At the time of very final cleanup, sv_free_arenas() is called from
104perl_destruct() to physically free all the arenas allocated since the
105start of the interpreter.
106
107The function visit() scans the SV arenas list, and calls a specified
108function for each SV it finds which is still live - ie which has an SvTYPE
109other than all 1's, and a non-zero SvREFCNT. visit() is used by the
110following functions (specified as [function that calls visit()] / [function
111called by visit() for each SV]):
112
113 sv_report_used() / do_report_used()
114 dump all remaining SVs (debugging aid)
115
116 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
117 Attempt to free all objects pointed to by RVs,
118 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
119 try to do the same for all objects indirectly
120 referenced by typeglobs too. Called once from
121 perl_destruct(), prior to calling sv_clean_all()
122 below.
123
124 sv_clean_all() / do_clean_all()
125 SvREFCNT_dec(sv) each remaining SV, possibly
126 triggering an sv_free(). It also sets the
127 SVf_BREAK flag on the SV to indicate that the
128 refcnt has been artificially lowered, and thus
129 stopping sv_free() from giving spurious warnings
130 about SVs which unexpectedly have a refcnt
131 of zero. called repeatedly from perl_destruct()
132 until there are no SVs left.
133
134=head2 Arena allocator API Summary
135
136Private API to rest of sv.c
137
138 new_SV(), del_SV(),
139
140 new_XIV(), del_XIV(),
141 new_XNV(), del_XNV(),
142 etc
143
144Public API:
145
146 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
147
148=cut
149
150============================================================================ */
151
152/*
153 * "A time to plant, and a time to uproot what was planted..."
154 */
155
156void
157Perl_offer_nice_chunk(pTHX_ void *chunk, U32 chunk_size)
158{
159 dVAR;
160 void *new_chunk;
161 U32 new_chunk_size;
162 new_chunk = (void *)(chunk);
163 new_chunk_size = (chunk_size);
164 if (new_chunk_size > PL_nice_chunk_size) {
165 Safefree(PL_nice_chunk);
166 PL_nice_chunk = (char *) new_chunk;
167 PL_nice_chunk_size = new_chunk_size;
168 } else {
169 Safefree(chunk);
170 }
171}
172
173#ifdef DEBUG_LEAKING_SCALARS
174# define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
175#else
176# define FREE_SV_DEBUG_FILE(sv)
177#endif
178
179#ifdef PERL_POISON
180# define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
181/* Whilst I'd love to do this, it seems that things like to check on
182 unreferenced scalars
183# define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
184*/
185# define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
186 PoisonNew(&SvREFCNT(sv), 1, U32)
187#else
188# define SvARENA_CHAIN(sv) SvANY(sv)
189# define POSION_SV_HEAD(sv)
190#endif
191
192#define plant_SV(p) \
193 STMT_START { \
194 FREE_SV_DEBUG_FILE(p); \
195 POSION_SV_HEAD(p); \
196 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
197 SvFLAGS(p) = SVTYPEMASK; \
198 PL_sv_root = (p); \
199 --PL_sv_count; \
200 } STMT_END
201
202#define uproot_SV(p) \
203 STMT_START { \
204 (p) = PL_sv_root; \
205 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
206 ++PL_sv_count; \
207 } STMT_END
208
209
210/* make some more SVs by adding another arena */
211
212STATIC SV*
213S_more_sv(pTHX)
214{
215 dVAR;
216 SV* sv;
217
218 if (PL_nice_chunk) {
219 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
220 PL_nice_chunk = NULL;
221 PL_nice_chunk_size = 0;
222 }
223 else {
224 char *chunk; /* must use New here to match call to */
225 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
226 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
227 }
228 uproot_SV(sv);
229 return sv;
230}
231
232/* new_SV(): return a new, empty SV head */
233
234#ifdef DEBUG_LEAKING_SCALARS
235/* provide a real function for a debugger to play with */
236STATIC SV*
237S_new_SV(pTHX)
238{
239 SV* sv;
240
241 if (PL_sv_root)
242 uproot_SV(sv);
243 else
244 sv = S_more_sv(aTHX);
245 SvANY(sv) = 0;
246 SvREFCNT(sv) = 1;
247 SvFLAGS(sv) = 0;
248 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
249 sv->sv_debug_line = (U16) (PL_parser
250 ? PL_parser->copline == NOLINE
251 ? PL_curcop
252 ? CopLINE(PL_curcop)
253 : 0
254 : PL_parser->copline
255 : 0);
256 sv->sv_debug_inpad = 0;
257 sv->sv_debug_cloned = 0;
258 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
259
260 return sv;
261}
262# define new_SV(p) (p)=S_new_SV(aTHX)
263
264#else
265# define new_SV(p) \
266 STMT_START { \
267 if (PL_sv_root) \
268 uproot_SV(p); \
269 else \
270 (p) = S_more_sv(aTHX); \
271 SvANY(p) = 0; \
272 SvREFCNT(p) = 1; \
273 SvFLAGS(p) = 0; \
274 } STMT_END
275#endif
276
277
278/* del_SV(): return an empty SV head to the free list */
279
280#ifdef DEBUGGING
281
282#define del_SV(p) \
283 STMT_START { \
284 if (DEBUG_D_TEST) \
285 del_sv(p); \
286 else \
287 plant_SV(p); \
288 } STMT_END
289
290STATIC void
291S_del_sv(pTHX_ SV *p)
292{
293 dVAR;
294 if (DEBUG_D_TEST) {
295 SV* sva;
296 bool ok = 0;
297 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
298 const SV * const sv = sva + 1;
299 const SV * const svend = &sva[SvREFCNT(sva)];
300 if (p >= sv && p < svend) {
301 ok = 1;
302 break;
303 }
304 }
305 if (!ok) {
306 if (ckWARN_d(WARN_INTERNAL))
307 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
308 "Attempt to free non-arena SV: 0x%"UVxf
309 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
310 return;
311 }
312 }
313 plant_SV(p);
314}
315
316#else /* ! DEBUGGING */
317
318#define del_SV(p) plant_SV(p)
319
320#endif /* DEBUGGING */
321
322
323/*
324=head1 SV Manipulation Functions
325
326=for apidoc sv_add_arena
327
328Given a chunk of memory, link it to the head of the list of arenas,
329and split it into a list of free SVs.
330
331=cut
332*/
333
334void
335Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
336{
337 dVAR;
338 SV* const sva = (SV*)ptr;
339 register SV* sv;
340 register SV* svend;
341
342 /* The first SV in an arena isn't an SV. */
343 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
344 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
345 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
346
347 PL_sv_arenaroot = sva;
348 PL_sv_root = sva + 1;
349
350 svend = &sva[SvREFCNT(sva) - 1];
351 sv = sva + 1;
352 while (sv < svend) {
353 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
354#ifdef DEBUGGING
355 SvREFCNT(sv) = 0;
356#endif
357 /* Must always set typemask because it's always checked in on cleanup
358 when the arenas are walked looking for objects. */
359 SvFLAGS(sv) = SVTYPEMASK;
360 sv++;
361 }
362 SvARENA_CHAIN(sv) = 0;
363#ifdef DEBUGGING
364 SvREFCNT(sv) = 0;
365#endif
366 SvFLAGS(sv) = SVTYPEMASK;
367}
368
369/* visit(): call the named function for each non-free SV in the arenas
370 * whose flags field matches the flags/mask args. */
371
372STATIC I32
373S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
374{
375 dVAR;
376 SV* sva;
377 I32 visited = 0;
378
379 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
380 register const SV * const svend = &sva[SvREFCNT(sva)];
381 register SV* sv;
382 for (sv = sva + 1; sv < svend; ++sv) {
383 if (SvTYPE(sv) != SVTYPEMASK
384 && (sv->sv_flags & mask) == flags
385 && SvREFCNT(sv))
386 {
387 (FCALL)(aTHX_ sv);
388 ++visited;
389 }
390 }
391 }
392 return visited;
393}
394
395#ifdef DEBUGGING
396
397/* called by sv_report_used() for each live SV */
398
399static void
400do_report_used(pTHX_ SV *sv)
401{
402 if (SvTYPE(sv) != SVTYPEMASK) {
403 PerlIO_printf(Perl_debug_log, "****\n");
404 sv_dump(sv);
405 }
406}
407#endif
408
409/*
410=for apidoc sv_report_used
411
412Dump the contents of all SVs not yet freed. (Debugging aid).
413
414=cut
415*/
416
417void
418Perl_sv_report_used(pTHX)
419{
420#ifdef DEBUGGING
421 visit(do_report_used, 0, 0);
422#else
423 PERL_UNUSED_CONTEXT;
424#endif
425}
426
427/* called by sv_clean_objs() for each live SV */
428
429static void
430do_clean_objs(pTHX_ SV *ref)
431{
432 dVAR;
433 assert (SvROK(ref));
434 {
435 SV * const target = SvRV(ref);
436 if (SvOBJECT(target)) {
437 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
438 if (SvWEAKREF(ref)) {
439 sv_del_backref(target, ref);
440 SvWEAKREF_off(ref);
441 SvRV_set(ref, NULL);
442 } else {
443 SvROK_off(ref);
444 SvRV_set(ref, NULL);
445 SvREFCNT_dec(target);
446 }
447 }
448 }
449
450 /* XXX Might want to check arrays, etc. */
451}
452
453/* called by sv_clean_objs() for each live SV */
454
455#ifndef DISABLE_DESTRUCTOR_KLUDGE
456static void
457do_clean_named_objs(pTHX_ SV *sv)
458{
459 dVAR;
460 assert(SvTYPE(sv) == SVt_PVGV);
461 assert(isGV_with_GP(sv));
462 if (GvGP(sv)) {
463 if ((
464#ifdef PERL_DONT_CREATE_GVSV
465 GvSV(sv) &&
466#endif
467 SvOBJECT(GvSV(sv))) ||
468 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
469 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
470 /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
471 (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
472 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
473 {
474 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
475 SvFLAGS(sv) |= SVf_BREAK;
476 SvREFCNT_dec(sv);
477 }
478 }
479}
480#endif
481
482/*
483=for apidoc sv_clean_objs
484
485Attempt to destroy all objects not yet freed
486
487=cut
488*/
489
490void
491Perl_sv_clean_objs(pTHX)
492{
493 dVAR;
494 PL_in_clean_objs = TRUE;
495 visit(do_clean_objs, SVf_ROK, SVf_ROK);
496#ifndef DISABLE_DESTRUCTOR_KLUDGE
497 /* some barnacles may yet remain, clinging to typeglobs */
498 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
499#endif
500 PL_in_clean_objs = FALSE;
501}
502
503/* called by sv_clean_all() for each live SV */
504
505static void
506do_clean_all(pTHX_ SV *sv)
507{
508 dVAR;
509 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
510 SvFLAGS(sv) |= SVf_BREAK;
511 SvREFCNT_dec(sv);
512}
513
514/*
515=for apidoc sv_clean_all
516
517Decrement the refcnt of each remaining SV, possibly triggering a
518cleanup. This function may have to be called multiple times to free
519SVs which are in complex self-referential hierarchies.
520
521=cut
522*/
523
524I32
525Perl_sv_clean_all(pTHX)
526{
527 dVAR;
528 I32 cleaned;
529 PL_in_clean_all = TRUE;
530 cleaned = visit(do_clean_all, 0,0);
531 PL_in_clean_all = FALSE;
532 return cleaned;
533}
534
535/*
536 ARENASETS: a meta-arena implementation which separates arena-info
537 into struct arena_set, which contains an array of struct
538 arena_descs, each holding info for a single arena. By separating
539 the meta-info from the arena, we recover the 1st slot, formerly
540 borrowed for list management. The arena_set is about the size of an
541 arena, avoiding the needless malloc overhead of a naive linked-list.
542
543 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
544 memory in the last arena-set (1/2 on average). In trade, we get
545 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
546 smaller types). The recovery of the wasted space allows use of
547 small arenas for large, rare body types,
548*/
549struct arena_desc {
550 char *arena; /* the raw storage, allocated aligned */
551 size_t size; /* its size ~4k typ */
552 U32 misc; /* type, and in future other things. */
553};
554
555struct arena_set;
556
557/* Get the maximum number of elements in set[] such that struct arena_set
558 will fit within PERL_ARENA_SIZE, which is probabably just under 4K, and
559 therefore likely to be 1 aligned memory page. */
560
561#define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
562 - 2 * sizeof(int)) / sizeof (struct arena_desc))
563
564struct arena_set {
565 struct arena_set* next;
566 unsigned int set_size; /* ie ARENAS_PER_SET */
567 unsigned int curr; /* index of next available arena-desc */
568 struct arena_desc set[ARENAS_PER_SET];
569};
570
571/*
572=for apidoc sv_free_arenas
573
574Deallocate the memory used by all arenas. Note that all the individual SV
575heads and bodies within the arenas must already have been freed.
576
577=cut
578*/
579void
580Perl_sv_free_arenas(pTHX)
581{
582 dVAR;
583 SV* sva;
584 SV* svanext;
585 unsigned int i;
586
587 /* Free arenas here, but be careful about fake ones. (We assume
588 contiguity of the fake ones with the corresponding real ones.) */
589
590 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
591 svanext = (SV*) SvANY(sva);
592 while (svanext && SvFAKE(svanext))
593 svanext = (SV*) SvANY(svanext);
594
595 if (!SvFAKE(sva))
596 Safefree(sva);
597 }
598
599 {
600 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
601
602 while (aroot) {
603 struct arena_set *current = aroot;
604 i = aroot->curr;
605 while (i--) {
606 assert(aroot->set[i].arena);
607 Safefree(aroot->set[i].arena);
608 }
609 aroot = aroot->next;
610 Safefree(current);
611 }
612 }
613 PL_body_arenas = 0;
614
615 i = PERL_ARENA_ROOTS_SIZE;
616 while (i--)
617 PL_body_roots[i] = 0;
618
619 Safefree(PL_nice_chunk);
620 PL_nice_chunk = NULL;
621 PL_nice_chunk_size = 0;
622 PL_sv_arenaroot = 0;
623 PL_sv_root = 0;
624}
625
626/*
627 Here are mid-level routines that manage the allocation of bodies out
628 of the various arenas. There are 5 kinds of arenas:
629
630 1. SV-head arenas, which are discussed and handled above
631 2. regular body arenas
632 3. arenas for reduced-size bodies
633 4. Hash-Entry arenas
634 5. pte arenas (thread related)
635
636 Arena types 2 & 3 are chained by body-type off an array of
637 arena-root pointers, which is indexed by svtype. Some of the
638 larger/less used body types are malloced singly, since a large
639 unused block of them is wasteful. Also, several svtypes dont have
640 bodies; the data fits into the sv-head itself. The arena-root
641 pointer thus has a few unused root-pointers (which may be hijacked
642 later for arena types 4,5)
643
644 3 differs from 2 as an optimization; some body types have several
645 unused fields in the front of the structure (which are kept in-place
646 for consistency). These bodies can be allocated in smaller chunks,
647 because the leading fields arent accessed. Pointers to such bodies
648 are decremented to point at the unused 'ghost' memory, knowing that
649 the pointers are used with offsets to the real memory.
650
651 HE, HEK arenas are managed separately, with separate code, but may
652 be merge-able later..
653
654 PTE arenas are not sv-bodies, but they share these mid-level
655 mechanics, so are considered here. The new mid-level mechanics rely
656 on the sv_type of the body being allocated, so we just reserve one
657 of the unused body-slots for PTEs, then use it in those (2) PTE
658 contexts below (line ~10k)
659*/
660
661/* get_arena(size): this creates custom-sized arenas
662 TBD: export properly for hv.c: S_more_he().
663*/
664void*
665Perl_get_arena(pTHX_ size_t arena_size, U32 misc)
666{
667 dVAR;
668 struct arena_desc* adesc;
669 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
670 unsigned int curr;
671
672 /* shouldnt need this
673 if (!arena_size) arena_size = PERL_ARENA_SIZE;
674 */
675
676 /* may need new arena-set to hold new arena */
677 if (!aroot || aroot->curr >= aroot->set_size) {
678 struct arena_set *newroot;
679 Newxz(newroot, 1, struct arena_set);
680 newroot->set_size = ARENAS_PER_SET;
681 newroot->next = aroot;
682 aroot = newroot;
683 PL_body_arenas = (void *) newroot;
684 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
685 }
686
687 /* ok, now have arena-set with at least 1 empty/available arena-desc */
688 curr = aroot->curr++;
689 adesc = &(aroot->set[curr]);
690 assert(!adesc->arena);
691
692 Newx(adesc->arena, arena_size, char);
693 adesc->size = arena_size;
694 adesc->misc = misc;
695 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
696 curr, (void*)adesc->arena, (UV)arena_size));
697
698 return adesc->arena;
699}
700
701
702/* return a thing to the free list */
703
704#define del_body(thing, root) \
705 STMT_START { \
706 void ** const thing_copy = (void **)thing;\
707 *thing_copy = *root; \
708 *root = (void*)thing_copy; \
709 } STMT_END
710
711/*
712
713=head1 SV-Body Allocation
714
715Allocation of SV-bodies is similar to SV-heads, differing as follows;
716the allocation mechanism is used for many body types, so is somewhat
717more complicated, it uses arena-sets, and has no need for still-live
718SV detection.
719
720At the outermost level, (new|del)_X*V macros return bodies of the
721appropriate type. These macros call either (new|del)_body_type or
722(new|del)_body_allocated macro pairs, depending on specifics of the
723type. Most body types use the former pair, the latter pair is used to
724allocate body types with "ghost fields".
725
726"ghost fields" are fields that are unused in certain types, and
727consequently dont need to actually exist. They are declared because
728they're part of a "base type", which allows use of functions as
729methods. The simplest examples are AVs and HVs, 2 aggregate types
730which don't use the fields which support SCALAR semantics.
731
732For these types, the arenas are carved up into *_allocated size
733chunks, we thus avoid wasted memory for those unaccessed members.
734When bodies are allocated, we adjust the pointer back in memory by the
735size of the bit not allocated, so it's as if we allocated the full
736structure. (But things will all go boom if you write to the part that
737is "not there", because you'll be overwriting the last members of the
738preceding structure in memory.)
739
740We calculate the correction using the STRUCT_OFFSET macro. For
741example, if xpv_allocated is the same structure as XPV then the two
742OFFSETs sum to zero, and the pointer is unchanged. If the allocated
743structure is smaller (no initial NV actually allocated) then the net
744effect is to subtract the size of the NV from the pointer, to return a
745new pointer as if an initial NV were actually allocated.
746
747This is the same trick as was used for NV and IV bodies. Ironically it
748doesn't need to be used for NV bodies any more, because NV is now at
749the start of the structure. IV bodies don't need it either, because
750they are no longer allocated.
751
752In turn, the new_body_* allocators call S_new_body(), which invokes
753new_body_inline macro, which takes a lock, and takes a body off the
754linked list at PL_body_roots[sv_type], calling S_more_bodies() if
755necessary to refresh an empty list. Then the lock is released, and
756the body is returned.
757
758S_more_bodies calls get_arena(), and carves it up into an array of N
759bodies, which it strings into a linked list. It looks up arena-size
760and body-size from the body_details table described below, thus
761supporting the multiple body-types.
762
763If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
764the (new|del)_X*V macros are mapped directly to malloc/free.
765
766*/
767
768/*
769
770For each sv-type, struct body_details bodies_by_type[] carries
771parameters which control these aspects of SV handling:
772
773Arena_size determines whether arenas are used for this body type, and if
774so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
775zero, forcing individual mallocs and frees.
776
777Body_size determines how big a body is, and therefore how many fit into
778each arena. Offset carries the body-pointer adjustment needed for
779*_allocated body types, and is used in *_allocated macros.
780
781But its main purpose is to parameterize info needed in
782Perl_sv_upgrade(). The info here dramatically simplifies the function
783vs the implementation in 5.8.7, making it table-driven. All fields
784are used for this, except for arena_size.
785
786For the sv-types that have no bodies, arenas are not used, so those
787PL_body_roots[sv_type] are unused, and can be overloaded. In
788something of a special case, SVt_NULL is borrowed for HE arenas;
789PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
790bodies_by_type[SVt_NULL] slot is not used, as the table is not
791available in hv.c.
792
793PTEs also use arenas, but are never seen in Perl_sv_upgrade. Nonetheless,
794they get their own slot in bodies_by_type[PTE_SVSLOT =SVt_IV], so they can
795just use the same allocation semantics. At first, PTEs were also
796overloaded to a non-body sv-type, but this yielded hard-to-find malloc
797bugs, so was simplified by claiming a new slot. This choice has no
798consequence at this time.
799
800*/
801
802struct body_details {
803 U8 body_size; /* Size to allocate */
804 U8 copy; /* Size of structure to copy (may be shorter) */
805 U8 offset;
806 unsigned int type : 4; /* We have space for a sanity check. */
807 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
808 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
809 unsigned int arena : 1; /* Allocated from an arena */
810 size_t arena_size; /* Size of arena to allocate */
811};
812
813#define HADNV FALSE
814#define NONV TRUE
815
816
817#ifdef PURIFY
818/* With -DPURFIY we allocate everything directly, and don't use arenas.
819 This seems a rather elegant way to simplify some of the code below. */
820#define HASARENA FALSE
821#else
822#define HASARENA TRUE
823#endif
824#define NOARENA FALSE
825
826/* Size the arenas to exactly fit a given number of bodies. A count
827 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
828 simplifying the default. If count > 0, the arena is sized to fit
829 only that many bodies, allowing arenas to be used for large, rare
830 bodies (XPVFM, XPVIO) without undue waste. The arena size is
831 limited by PERL_ARENA_SIZE, so we can safely oversize the
832 declarations.
833 */
834#define FIT_ARENA0(body_size) \
835 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
836#define FIT_ARENAn(count,body_size) \
837 ( count * body_size <= PERL_ARENA_SIZE) \
838 ? count * body_size \
839 : FIT_ARENA0 (body_size)
840#define FIT_ARENA(count,body_size) \
841 count \
842 ? FIT_ARENAn (count, body_size) \
843 : FIT_ARENA0 (body_size)
844
845/* A macro to work out the offset needed to subtract from a pointer to (say)
846
847typedef struct {
848 STRLEN xpv_cur;
849 STRLEN xpv_len;
850} xpv_allocated;
851
852to make its members accessible via a pointer to (say)
853
854struct xpv {
855 NV xnv_nv;
856 STRLEN xpv_cur;
857 STRLEN xpv_len;
858};
859
860*/
861
862#define relative_STRUCT_OFFSET(longer, shorter, member) \
863 (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
864
865/* Calculate the length to copy. Specifically work out the length less any
866 final padding the compiler needed to add. See the comment in sv_upgrade
867 for why copying the padding proved to be a bug. */
868
869#define copy_length(type, last_member) \
870 STRUCT_OFFSET(type, last_member) \
871 + sizeof (((type*)SvANY((SV*)0))->last_member)
872
873static const struct body_details bodies_by_type[] = {
874 { sizeof(HE), 0, 0, SVt_NULL,
875 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
876
877 /* The bind placeholder pretends to be an RV for now.
878 Also it's marked as "can't upgrade" to stop anyone using it before it's
879 implemented. */
880 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
881
882 /* IVs are in the head, so the allocation size is 0.
883 However, the slot is overloaded for PTEs. */
884 { sizeof(struct ptr_tbl_ent), /* This is used for PTEs. */
885 sizeof(IV), /* This is used to copy out the IV body. */
886 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
887 NOARENA /* IVS don't need an arena */,
888 /* But PTEs need to know the size of their arena */
889 FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
890 },
891
892 /* 8 bytes on most ILP32 with IEEE doubles */
893 { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
894 FIT_ARENA(0, sizeof(NV)) },
895
896 /* RVs are in the head now. */
897 { 0, 0, 0, SVt_RV, FALSE, NONV, NOARENA, 0 },
898
899 /* 8 bytes on most ILP32 with IEEE doubles */
900 { sizeof(xpv_allocated),
901 copy_length(XPV, xpv_len)
902 - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
903 + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
904 SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
905
906 /* 12 */
907 { sizeof(xpviv_allocated),
908 copy_length(XPVIV, xiv_u)
909 - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
910 + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
911 SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
912
913 /* 20 */
914 { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
915 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
916
917 /* 28 */
918 { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
919 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
920
921 /* 48 */
922 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
923 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
924
925 /* 64 */
926 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
927 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
928
929 { sizeof(xpvav_allocated),
930 copy_length(XPVAV, xmg_stash)
931 - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
932 + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
933 SVt_PVAV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
934
935 { sizeof(xpvhv_allocated),
936 copy_length(XPVHV, xmg_stash)
937 - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
938 + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
939 SVt_PVHV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
940
941 /* 56 */
942 { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
943 + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
944 SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
945
946 { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
947 + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
948 SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
949
950 /* XPVIO is 84 bytes, fits 48x */
951 { sizeof(XPVIO), sizeof(XPVIO), 0, SVt_PVIO, TRUE, HADNV,
952 HASARENA, FIT_ARENA(24, sizeof(XPVIO)) },
953};
954
955#define new_body_type(sv_type) \
956 (void *)((char *)S_new_body(aTHX_ sv_type))
957
958#define del_body_type(p, sv_type) \
959 del_body(p, &PL_body_roots[sv_type])
960
961
962#define new_body_allocated(sv_type) \
963 (void *)((char *)S_new_body(aTHX_ sv_type) \
964 - bodies_by_type[sv_type].offset)
965
966#define del_body_allocated(p, sv_type) \
967 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
968
969
970#define my_safemalloc(s) (void*)safemalloc(s)
971#define my_safecalloc(s) (void*)safecalloc(s, 1)
972#define my_safefree(p) safefree((char*)p)
973
974#ifdef PURIFY
975
976#define new_XNV() my_safemalloc(sizeof(XPVNV))
977#define del_XNV(p) my_safefree(p)
978
979#define new_XPVNV() my_safemalloc(sizeof(XPVNV))
980#define del_XPVNV(p) my_safefree(p)
981
982#define new_XPVAV() my_safemalloc(sizeof(XPVAV))
983#define del_XPVAV(p) my_safefree(p)
984
985#define new_XPVHV() my_safemalloc(sizeof(XPVHV))
986#define del_XPVHV(p) my_safefree(p)
987
988#define new_XPVMG() my_safemalloc(sizeof(XPVMG))
989#define del_XPVMG(p) my_safefree(p)
990
991#define new_XPVGV() my_safemalloc(sizeof(XPVGV))
992#define del_XPVGV(p) my_safefree(p)
993
994#else /* !PURIFY */
995
996#define new_XNV() new_body_type(SVt_NV)
997#define del_XNV(p) del_body_type(p, SVt_NV)
998
999#define new_XPVNV() new_body_type(SVt_PVNV)
1000#define del_XPVNV(p) del_body_type(p, SVt_PVNV)
1001
1002#define new_XPVAV() new_body_allocated(SVt_PVAV)
1003#define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
1004
1005#define new_XPVHV() new_body_allocated(SVt_PVHV)
1006#define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
1007
1008#define new_XPVMG() new_body_type(SVt_PVMG)
1009#define del_XPVMG(p) del_body_type(p, SVt_PVMG)
1010
1011#define new_XPVGV() new_body_type(SVt_PVGV)
1012#define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1013
1014#endif /* PURIFY */
1015
1016/* no arena for you! */
1017
1018#define new_NOARENA(details) \
1019 my_safemalloc((details)->body_size + (details)->offset)
1020#define new_NOARENAZ(details) \
1021 my_safecalloc((details)->body_size + (details)->offset)
1022
1023STATIC void *
1024S_more_bodies (pTHX_ svtype sv_type)
1025{
1026 dVAR;
1027 void ** const root = &PL_body_roots[sv_type];
1028 const struct body_details * const bdp = &bodies_by_type[sv_type];
1029 const size_t body_size = bdp->body_size;
1030 char *start;
1031 const char *end;
1032#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1033 static bool done_sanity_check;
1034
1035 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1036 * variables like done_sanity_check. */
1037 if (!done_sanity_check) {
1038 unsigned int i = SVt_LAST;
1039
1040 done_sanity_check = TRUE;
1041
1042 while (i--)
1043 assert (bodies_by_type[i].type == i);
1044 }
1045#endif
1046
1047 assert(bdp->arena_size);
1048
1049 start = (char*) Perl_get_arena(aTHX_ bdp->arena_size, sv_type);
1050
1051 end = start + bdp->arena_size - body_size;
1052
1053 /* computed count doesnt reflect the 1st slot reservation */
1054 DEBUG_m(PerlIO_printf(Perl_debug_log,
1055 "arena %p end %p arena-size %d type %d size %d ct %d\n",
1056 (void*)start, (void*)end,
1057 (int)bdp->arena_size, sv_type, (int)body_size,
1058 (int)bdp->arena_size / (int)body_size));
1059
1060 *root = (void *)start;
1061
1062 while (start < end) {
1063 char * const next = start + body_size;
1064 *(void**) start = (void *)next;
1065 start = next;
1066 }
1067 *(void **)start = 0;
1068
1069 return *root;
1070}
1071
1072/* grab a new thing from the free list, allocating more if necessary.
1073 The inline version is used for speed in hot routines, and the
1074 function using it serves the rest (unless PURIFY).
1075*/
1076#define new_body_inline(xpv, sv_type) \
1077 STMT_START { \
1078 void ** const r3wt = &PL_body_roots[sv_type]; \
1079 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1080 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
1081 *(r3wt) = *(void**)(xpv); \
1082 } STMT_END
1083
1084#ifndef PURIFY
1085
1086STATIC void *
1087S_new_body(pTHX_ svtype sv_type)
1088{
1089 dVAR;
1090 void *xpv;
1091 new_body_inline(xpv, sv_type);
1092 return xpv;
1093}
1094
1095#endif
1096
1097/*
1098=for apidoc sv_upgrade
1099
1100Upgrade an SV to a more complex form. Generally adds a new body type to the
1101SV, then copies across as much information as possible from the old body.
1102You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1103
1104=cut
1105*/
1106
1107void
1108Perl_sv_upgrade(pTHX_ register SV *sv, svtype new_type)
1109{
1110 dVAR;
1111 void* old_body;
1112 void* new_body;
1113 const svtype old_type = SvTYPE(sv);
1114 const struct body_details *new_type_details;
1115 const struct body_details *const old_type_details
1116 = bodies_by_type + old_type;
1117
1118 if (new_type != SVt_PV && SvIsCOW(sv)) {
1119 sv_force_normal_flags(sv, 0);
1120 }
1121
1122 if (old_type == new_type)
1123 return;
1124
1125 if (old_type > new_type)
1126 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1127 (int)old_type, (int)new_type);
1128
1129
1130 old_body = SvANY(sv);
1131
1132 /* Copying structures onto other structures that have been neatly zeroed
1133 has a subtle gotcha. Consider XPVMG
1134
1135 +------+------+------+------+------+-------+-------+
1136 | NV | CUR | LEN | IV | MAGIC | STASH |
1137 +------+------+------+------+------+-------+-------+
1138 0 4 8 12 16 20 24 28
1139
1140 where NVs are aligned to 8 bytes, so that sizeof that structure is
1141 actually 32 bytes long, with 4 bytes of padding at the end:
1142
1143 +------+------+------+------+------+-------+-------+------+
1144 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1145 +------+------+------+------+------+-------+-------+------+
1146 0 4 8 12 16 20 24 28 32
1147
1148 so what happens if you allocate memory for this structure:
1149
1150 +------+------+------+------+------+-------+-------+------+------+...
1151 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1152 +------+------+------+------+------+-------+-------+------+------+...
1153 0 4 8 12 16 20 24 28 32 36
1154
1155 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1156 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1157 started out as zero once, but it's quite possible that it isn't. So now,
1158 rather than a nicely zeroed GP, you have it pointing somewhere random.
1159 Bugs ensue.
1160
1161 (In fact, GP ends up pointing at a previous GP structure, because the
1162 principle cause of the padding in XPVMG getting garbage is a copy of
1163 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1164 this happens to be moot because XPVGV has been re-ordered, with GP
1165 no longer after STASH)
1166
1167 So we are careful and work out the size of used parts of all the
1168 structures. */
1169
1170 switch (old_type) {
1171 case SVt_NULL:
1172 break;
1173 case SVt_IV:
1174 if (new_type < SVt_PVIV) {
1175 new_type = (new_type == SVt_NV)
1176 ? SVt_PVNV : SVt_PVIV;
1177 }
1178 break;
1179 case SVt_NV:
1180 if (new_type < SVt_PVNV) {
1181 new_type = SVt_PVNV;
1182 }
1183 break;
1184 case SVt_RV:
1185 break;
1186 case SVt_PV:
1187 assert(new_type > SVt_PV);
1188 assert(SVt_IV < SVt_PV);
1189 assert(SVt_NV < SVt_PV);
1190 break;
1191 case SVt_PVIV:
1192 break;
1193 case SVt_PVNV:
1194 break;
1195 case SVt_PVMG:
1196 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1197 there's no way that it can be safely upgraded, because perl.c
1198 expects to Safefree(SvANY(PL_mess_sv)) */
1199 assert(sv != PL_mess_sv);
1200 /* This flag bit is used to mean other things in other scalar types.
1201 Given that it only has meaning inside the pad, it shouldn't be set
1202 on anything that can get upgraded. */
1203 assert(!SvPAD_TYPED(sv));
1204 break;
1205 default:
1206 if (old_type_details->cant_upgrade)
1207 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1208 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1209 }
1210 new_type_details = bodies_by_type + new_type;
1211
1212 SvFLAGS(sv) &= ~SVTYPEMASK;
1213 SvFLAGS(sv) |= new_type;
1214
1215 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1216 the return statements above will have triggered. */
1217 assert (new_type != SVt_NULL);
1218 switch (new_type) {
1219 case SVt_IV:
1220 assert(old_type == SVt_NULL);
1221 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1222 SvIV_set(sv, 0);
1223 return;
1224 case SVt_NV:
1225 assert(old_type == SVt_NULL);
1226 SvANY(sv) = new_XNV();
1227 SvNV_set(sv, 0);
1228 return;
1229 case SVt_RV:
1230 assert(old_type == SVt_NULL);
1231 SvANY(sv) = &sv->sv_u.svu_rv;
1232 SvRV_set(sv, 0);
1233 return;
1234 case SVt_PVHV:
1235 case SVt_PVAV:
1236 assert(new_type_details->body_size);
1237
1238#ifndef PURIFY
1239 assert(new_type_details->arena);
1240 assert(new_type_details->arena_size);
1241 /* This points to the start of the allocated area. */
1242 new_body_inline(new_body, new_type);
1243 Zero(new_body, new_type_details->body_size, char);
1244 new_body = ((char *)new_body) - new_type_details->offset;
1245#else
1246 /* We always allocated the full length item with PURIFY. To do this
1247 we fake things so that arena is false for all 16 types.. */
1248 new_body = new_NOARENAZ(new_type_details);
1249#endif
1250 SvANY(sv) = new_body;
1251 if (new_type == SVt_PVAV) {
1252 AvMAX(sv) = -1;
1253 AvFILLp(sv) = -1;
1254 AvREAL_only(sv);
1255 }
1256
1257 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1258 The target created by newSVrv also is, and it can have magic.
1259 However, it never has SvPVX set.
1260 */
1261 if (old_type >= SVt_RV) {
1262 assert(SvPVX_const(sv) == 0);
1263 }
1264
1265 if (old_type >= SVt_PVMG) {
1266 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1267 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1268 } else {
1269 sv->sv_u.svu_array = NULL; /* or svu_hash */
1270 }
1271 break;
1272
1273
1274 case SVt_PVIV:
1275 /* XXX Is this still needed? Was it ever needed? Surely as there is
1276 no route from NV to PVIV, NOK can never be true */
1277 assert(!SvNOKp(sv));
1278 assert(!SvNOK(sv));
1279 case SVt_PVIO:
1280 case SVt_PVFM:
1281 case SVt_PVGV:
1282 case SVt_PVCV:
1283 case SVt_PVLV:
1284 case SVt_PVMG:
1285 case SVt_PVNV:
1286 case SVt_PV:
1287
1288 assert(new_type_details->body_size);
1289 /* We always allocated the full length item with PURIFY. To do this
1290 we fake things so that arena is false for all 16 types.. */
1291 if(new_type_details->arena) {
1292 /* This points to the start of the allocated area. */
1293 new_body_inline(new_body, new_type);
1294 Zero(new_body, new_type_details->body_size, char);
1295 new_body = ((char *)new_body) - new_type_details->offset;
1296 } else {
1297 new_body = new_NOARENAZ(new_type_details);
1298 }
1299 SvANY(sv) = new_body;
1300
1301 if (old_type_details->copy) {
1302 /* There is now the potential for an upgrade from something without
1303 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1304 int offset = old_type_details->offset;
1305 int length = old_type_details->copy;
1306
1307 if (new_type_details->offset > old_type_details->offset) {
1308 const int difference
1309 = new_type_details->offset - old_type_details->offset;
1310 offset += difference;
1311 length -= difference;
1312 }
1313 assert (length >= 0);
1314
1315 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1316 char);
1317 }
1318
1319#ifndef NV_ZERO_IS_ALLBITS_ZERO
1320 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1321 * correct 0.0 for us. Otherwise, if the old body didn't have an
1322 * NV slot, but the new one does, then we need to initialise the
1323 * freshly created NV slot with whatever the correct bit pattern is
1324 * for 0.0 */
1325 if (old_type_details->zero_nv && !new_type_details->zero_nv
1326 && !isGV_with_GP(sv))
1327 SvNV_set(sv, 0);
1328#endif
1329
1330 if (new_type == SVt_PVIO)
1331 IoPAGE_LEN(sv) = 60;
1332 if (old_type < SVt_RV)
1333 SvPV_set(sv, NULL);
1334 break;
1335 default:
1336 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1337 (unsigned long)new_type);
1338 }
1339
1340 if (old_type_details->arena) {
1341 /* If there was an old body, then we need to free it.
1342 Note that there is an assumption that all bodies of types that
1343 can be upgraded came from arenas. Only the more complex non-
1344 upgradable types are allowed to be directly malloc()ed. */
1345#ifdef PURIFY
1346 my_safefree(old_body);
1347#else
1348 del_body((void*)((char*)old_body + old_type_details->offset),
1349 &PL_body_roots[old_type]);
1350#endif
1351 }
1352}
1353
1354/*
1355=for apidoc sv_backoff
1356
1357Remove any string offset. You should normally use the C<SvOOK_off> macro
1358wrapper instead.
1359
1360=cut
1361*/
1362
1363int
1364Perl_sv_backoff(pTHX_ register SV *sv)
1365{
1366 PERL_UNUSED_CONTEXT;
1367 assert(SvOOK(sv));
1368 assert(SvTYPE(sv) != SVt_PVHV);
1369 assert(SvTYPE(sv) != SVt_PVAV);
1370 if (SvIVX(sv)) {
1371 const char * const s = SvPVX_const(sv);
1372 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1373 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1374 SvIV_set(sv, 0);
1375 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1376 }
1377 SvFLAGS(sv) &= ~SVf_OOK;
1378 return 0;
1379}
1380
1381/*
1382=for apidoc sv_grow
1383
1384Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1385upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1386Use the C<SvGROW> wrapper instead.
1387
1388=cut
1389*/
1390
1391char *
1392Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1393{
1394 register char *s;
1395
1396 if (PL_madskills && newlen >= 0x100000) {
1397 PerlIO_printf(Perl_debug_log,
1398 "Allocation too large: %"UVxf"\n", (UV)newlen);
1399 }
1400#ifdef HAS_64K_LIMIT
1401 if (newlen >= 0x10000) {
1402 PerlIO_printf(Perl_debug_log,
1403 "Allocation too large: %"UVxf"\n", (UV)newlen);
1404 my_exit(1);
1405 }
1406#endif /* HAS_64K_LIMIT */
1407 if (SvROK(sv))
1408 sv_unref(sv);
1409 if (SvTYPE(sv) < SVt_PV) {
1410 sv_upgrade(sv, SVt_PV);
1411 s = SvPVX_mutable(sv);
1412 }
1413 else if (SvOOK(sv)) { /* pv is offset? */
1414 sv_backoff(sv);
1415 s = SvPVX_mutable(sv);
1416 if (newlen > SvLEN(sv))
1417 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1418#ifdef HAS_64K_LIMIT
1419 if (newlen >= 0x10000)
1420 newlen = 0xFFFF;
1421#endif
1422 }
1423 else
1424 s = SvPVX_mutable(sv);
1425
1426 if (newlen > SvLEN(sv)) { /* need more room? */
1427 newlen = PERL_STRLEN_ROUNDUP(newlen);
1428 if (SvLEN(sv) && s) {
1429#ifdef MYMALLOC
1430 const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1431 if (newlen <= l) {
1432 SvLEN_set(sv, l);
1433 return s;
1434 } else
1435#endif
1436 s = (char*)saferealloc(s, newlen);
1437 }
1438 else {
1439 s = (char*)safemalloc(newlen);
1440 if (SvPVX_const(sv) && SvCUR(sv)) {
1441 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1442 }
1443 }
1444 SvPV_set(sv, s);
1445 SvLEN_set(sv, newlen);
1446 }
1447 return s;
1448}
1449
1450/*
1451=for apidoc sv_setiv
1452
1453Copies an integer into the given SV, upgrading first if necessary.
1454Does not handle 'set' magic. See also C<sv_setiv_mg>.
1455
1456=cut
1457*/
1458
1459void
1460Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1461{
1462 dVAR;
1463 SV_CHECK_THINKFIRST_COW_DROP(sv);
1464 switch (SvTYPE(sv)) {
1465 case SVt_NULL:
1466 sv_upgrade(sv, SVt_IV);
1467 break;
1468 case SVt_NV:
1469 sv_upgrade(sv, SVt_PVNV);
1470 break;
1471 case SVt_RV:
1472 case SVt_PV:
1473 sv_upgrade(sv, SVt_PVIV);
1474 break;
1475
1476 case SVt_PVGV:
1477 case SVt_PVAV:
1478 case SVt_PVHV:
1479 case SVt_PVCV:
1480 case SVt_PVFM:
1481 case SVt_PVIO:
1482 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1483 OP_DESC(PL_op));
1484 default: NOOP;
1485 }
1486 (void)SvIOK_only(sv); /* validate number */
1487 SvIV_set(sv, i);
1488 SvTAINT(sv);
1489}
1490
1491/*
1492=for apidoc sv_setiv_mg
1493
1494Like C<sv_setiv>, but also handles 'set' magic.
1495
1496=cut
1497*/
1498
1499void
1500Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1501{
1502 sv_setiv(sv,i);
1503 SvSETMAGIC(sv);
1504}
1505
1506/*
1507=for apidoc sv_setuv
1508
1509Copies an unsigned integer into the given SV, upgrading first if necessary.
1510Does not handle 'set' magic. See also C<sv_setuv_mg>.
1511
1512=cut
1513*/
1514
1515void
1516Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1517{
1518 /* With these two if statements:
1519 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1520
1521 without
1522 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1523
1524 If you wish to remove them, please benchmark to see what the effect is
1525 */
1526 if (u <= (UV)IV_MAX) {
1527 sv_setiv(sv, (IV)u);
1528 return;
1529 }
1530 sv_setiv(sv, 0);
1531 SvIsUV_on(sv);
1532 SvUV_set(sv, u);
1533}
1534
1535/*
1536=for apidoc sv_setuv_mg
1537
1538Like C<sv_setuv>, but also handles 'set' magic.
1539
1540=cut
1541*/
1542
1543void
1544Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1545{
1546 sv_setuv(sv,u);
1547 SvSETMAGIC(sv);
1548}
1549
1550/*
1551=for apidoc sv_setnv
1552
1553Copies a double into the given SV, upgrading first if necessary.
1554Does not handle 'set' magic. See also C<sv_setnv_mg>.
1555
1556=cut
1557*/
1558
1559void
1560Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1561{
1562 dVAR;
1563 SV_CHECK_THINKFIRST_COW_DROP(sv);
1564 switch (SvTYPE(sv)) {
1565 case SVt_NULL:
1566 case SVt_IV:
1567 sv_upgrade(sv, SVt_NV);
1568 break;
1569 case SVt_RV:
1570 case SVt_PV:
1571 case SVt_PVIV:
1572 sv_upgrade(sv, SVt_PVNV);
1573 break;
1574
1575 case SVt_PVGV:
1576 case SVt_PVAV:
1577 case SVt_PVHV:
1578 case SVt_PVCV:
1579 case SVt_PVFM:
1580 case SVt_PVIO:
1581 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1582 OP_NAME(PL_op));
1583 default: NOOP;
1584 }
1585 SvNV_set(sv, num);
1586 (void)SvNOK_only(sv); /* validate number */
1587 SvTAINT(sv);
1588}
1589
1590/*
1591=for apidoc sv_setnv_mg
1592
1593Like C<sv_setnv>, but also handles 'set' magic.
1594
1595=cut
1596*/
1597
1598void
1599Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1600{
1601 sv_setnv(sv,num);
1602 SvSETMAGIC(sv);
1603}
1604
1605/* Print an "isn't numeric" warning, using a cleaned-up,
1606 * printable version of the offending string
1607 */
1608
1609STATIC void
1610S_not_a_number(pTHX_ SV *sv)
1611{
1612 dVAR;
1613 SV *dsv;
1614 char tmpbuf[64];
1615 const char *pv;
1616
1617 if (DO_UTF8(sv)) {
1618 dsv = sv_2mortal(newSVpvs(""));
1619 pv = sv_uni_display(dsv, sv, 10, 0);
1620 } else {
1621 char *d = tmpbuf;
1622 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1623 /* each *s can expand to 4 chars + "...\0",
1624 i.e. need room for 8 chars */
1625
1626 const char *s = SvPVX_const(sv);
1627 const char * const end = s + SvCUR(sv);
1628 for ( ; s < end && d < limit; s++ ) {
1629 int ch = *s & 0xFF;
1630 if (ch & 128 && !isPRINT_LC(ch)) {
1631 *d++ = 'M';
1632 *d++ = '-';
1633 ch &= 127;
1634 }
1635 if (ch == '\n') {
1636 *d++ = '\\';
1637 *d++ = 'n';
1638 }
1639 else if (ch == '\r') {
1640 *d++ = '\\';
1641 *d++ = 'r';
1642 }
1643 else if (ch == '\f') {
1644 *d++ = '\\';
1645 *d++ = 'f';
1646 }
1647 else if (ch == '\\') {
1648 *d++ = '\\';
1649 *d++ = '\\';
1650 }
1651 else if (ch == '\0') {
1652 *d++ = '\\';
1653 *d++ = '0';
1654 }
1655 else if (isPRINT_LC(ch))
1656 *d++ = ch;
1657 else {
1658 *d++ = '^';
1659 *d++ = toCTRL(ch);
1660 }
1661 }
1662 if (s < end) {
1663 *d++ = '.';
1664 *d++ = '.';
1665 *d++ = '.';
1666 }
1667 *d = '\0';
1668 pv = tmpbuf;
1669 }
1670
1671 if (PL_op)
1672 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1673 "Argument \"%s\" isn't numeric in %s", pv,
1674 OP_DESC(PL_op));
1675 else
1676 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1677 "Argument \"%s\" isn't numeric", pv);
1678}
1679
1680/*
1681=for apidoc looks_like_number
1682
1683Test if the content of an SV looks like a number (or is a number).
1684C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1685non-numeric warning), even if your atof() doesn't grok them.
1686
1687=cut
1688*/
1689
1690I32
1691Perl_looks_like_number(pTHX_ SV *sv)
1692{
1693 register const char *sbegin;
1694 STRLEN len;
1695
1696 if (SvPOK(sv)) {
1697 sbegin = SvPVX_const(sv);
1698 len = SvCUR(sv);
1699 }
1700 else if (SvPOKp(sv))
1701 sbegin = SvPV_const(sv, len);
1702 else
1703 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1704 return grok_number(sbegin, len, NULL);
1705}
1706
1707STATIC bool
1708S_glob_2number(pTHX_ GV * const gv)
1709{
1710 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1711 SV *const buffer = sv_newmortal();
1712
1713 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1714 is on. */
1715 SvFAKE_off(gv);
1716 gv_efullname3(buffer, gv, "*");
1717 SvFLAGS(gv) |= wasfake;
1718
1719 /* We know that all GVs stringify to something that is not-a-number,
1720 so no need to test that. */
1721 if (ckWARN(WARN_NUMERIC))
1722 not_a_number(buffer);
1723 /* We just want something true to return, so that S_sv_2iuv_common
1724 can tail call us and return true. */
1725 return TRUE;
1726}
1727
1728STATIC char *
1729S_glob_2pv(pTHX_ GV * const gv, STRLEN * const len)
1730{
1731 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1732 SV *const buffer = sv_newmortal();
1733
1734 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1735 is on. */
1736 SvFAKE_off(gv);
1737 gv_efullname3(buffer, gv, "*");
1738 SvFLAGS(gv) |= wasfake;
1739
1740 assert(SvPOK(buffer));
1741 if (len) {
1742 *len = SvCUR(buffer);
1743 }
1744 return SvPVX(buffer);
1745}
1746
1747/* Actually, ISO C leaves conversion of UV to IV undefined, but
1748 until proven guilty, assume that things are not that bad... */
1749
1750/*
1751 NV_PRESERVES_UV:
1752
1753 As 64 bit platforms often have an NV that doesn't preserve all bits of
1754 an IV (an assumption perl has been based on to date) it becomes necessary
1755 to remove the assumption that the NV always carries enough precision to
1756 recreate the IV whenever needed, and that the NV is the canonical form.
1757 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1758 precision as a side effect of conversion (which would lead to insanity
1759 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1760 1) to distinguish between IV/UV/NV slots that have cached a valid
1761 conversion where precision was lost and IV/UV/NV slots that have a
1762 valid conversion which has lost no precision
1763 2) to ensure that if a numeric conversion to one form is requested that
1764 would lose precision, the precise conversion (or differently
1765 imprecise conversion) is also performed and cached, to prevent
1766 requests for different numeric formats on the same SV causing
1767 lossy conversion chains. (lossless conversion chains are perfectly
1768 acceptable (still))
1769
1770
1771 flags are used:
1772 SvIOKp is true if the IV slot contains a valid value
1773 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1774 SvNOKp is true if the NV slot contains a valid value
1775 SvNOK is true only if the NV value is accurate
1776
1777 so
1778 while converting from PV to NV, check to see if converting that NV to an
1779 IV(or UV) would lose accuracy over a direct conversion from PV to
1780 IV(or UV). If it would, cache both conversions, return NV, but mark
1781 SV as IOK NOKp (ie not NOK).
1782
1783 While converting from PV to IV, check to see if converting that IV to an
1784 NV would lose accuracy over a direct conversion from PV to NV. If it
1785 would, cache both conversions, flag similarly.
1786
1787 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1788 correctly because if IV & NV were set NV *always* overruled.
1789 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1790 changes - now IV and NV together means that the two are interchangeable:
1791 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1792
1793 The benefit of this is that operations such as pp_add know that if
1794 SvIOK is true for both left and right operands, then integer addition
1795 can be used instead of floating point (for cases where the result won't
1796 overflow). Before, floating point was always used, which could lead to
1797 loss of precision compared with integer addition.
1798
1799 * making IV and NV equal status should make maths accurate on 64 bit
1800 platforms
1801 * may speed up maths somewhat if pp_add and friends start to use
1802 integers when possible instead of fp. (Hopefully the overhead in
1803 looking for SvIOK and checking for overflow will not outweigh the
1804 fp to integer speedup)
1805 * will slow down integer operations (callers of SvIV) on "inaccurate"
1806 values, as the change from SvIOK to SvIOKp will cause a call into
1807 sv_2iv each time rather than a macro access direct to the IV slot
1808 * should speed up number->string conversion on integers as IV is
1809 favoured when IV and NV are equally accurate
1810
1811 ####################################################################
1812 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1813 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1814 On the other hand, SvUOK is true iff UV.
1815 ####################################################################
1816
1817 Your mileage will vary depending your CPU's relative fp to integer
1818 performance ratio.
1819*/
1820
1821#ifndef NV_PRESERVES_UV
1822# define IS_NUMBER_UNDERFLOW_IV 1
1823# define IS_NUMBER_UNDERFLOW_UV 2
1824# define IS_NUMBER_IV_AND_UV 2
1825# define IS_NUMBER_OVERFLOW_IV 4
1826# define IS_NUMBER_OVERFLOW_UV 5
1827
1828/* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1829
1830/* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1831STATIC int
1832S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
1833{
1834 dVAR;
1835 PERL_UNUSED_ARG(numtype); /* Used only under DEBUGGING? */
1836 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1837 if (SvNVX(sv) < (NV)IV_MIN) {
1838 (void)SvIOKp_on(sv);
1839 (void)SvNOK_on(sv);
1840 SvIV_set(sv, IV_MIN);
1841 return IS_NUMBER_UNDERFLOW_IV;
1842 }
1843 if (SvNVX(sv) > (NV)UV_MAX) {
1844 (void)SvIOKp_on(sv);
1845 (void)SvNOK_on(sv);
1846 SvIsUV_on(sv);
1847 SvUV_set(sv, UV_MAX);
1848 return IS_NUMBER_OVERFLOW_UV;
1849 }
1850 (void)SvIOKp_on(sv);
1851 (void)SvNOK_on(sv);
1852 /* Can't use strtol etc to convert this string. (See truth table in
1853 sv_2iv */
1854 if (SvNVX(sv) <= (UV)IV_MAX) {
1855 SvIV_set(sv, I_V(SvNVX(sv)));
1856 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1857 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1858 } else {
1859 /* Integer is imprecise. NOK, IOKp */
1860 }
1861 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1862 }
1863 SvIsUV_on(sv);
1864 SvUV_set(sv, U_V(SvNVX(sv)));
1865 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1866 if (SvUVX(sv) == UV_MAX) {
1867 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1868 possibly be preserved by NV. Hence, it must be overflow.
1869 NOK, IOKp */
1870 return IS_NUMBER_OVERFLOW_UV;
1871 }
1872 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1873 } else {
1874 /* Integer is imprecise. NOK, IOKp */
1875 }
1876 return IS_NUMBER_OVERFLOW_IV;
1877}
1878#endif /* !NV_PRESERVES_UV*/
1879
1880STATIC bool
1881S_sv_2iuv_common(pTHX_ SV *sv) {
1882 dVAR;
1883 if (SvNOKp(sv)) {
1884 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1885 * without also getting a cached IV/UV from it at the same time
1886 * (ie PV->NV conversion should detect loss of accuracy and cache
1887 * IV or UV at same time to avoid this. */
1888 /* IV-over-UV optimisation - choose to cache IV if possible */
1889
1890 if (SvTYPE(sv) == SVt_NV)
1891 sv_upgrade(sv, SVt_PVNV);
1892
1893 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1894 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1895 certainly cast into the IV range at IV_MAX, whereas the correct
1896 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1897 cases go to UV */
1898#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1899 if (Perl_isnan(SvNVX(sv))) {
1900 SvUV_set(sv, 0);
1901 SvIsUV_on(sv);
1902 return FALSE;
1903 }
1904#endif
1905 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1906 SvIV_set(sv, I_V(SvNVX(sv)));
1907 if (SvNVX(sv) == (NV) SvIVX(sv)
1908#ifndef NV_PRESERVES_UV
1909 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1910 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1911 /* Don't flag it as "accurately an integer" if the number
1912 came from a (by definition imprecise) NV operation, and
1913 we're outside the range of NV integer precision */
1914#endif
1915 ) {
1916 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1917 DEBUG_c(PerlIO_printf(Perl_debug_log,
1918 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
1919 PTR2UV(sv),
1920 SvNVX(sv),
1921 SvIVX(sv)));
1922
1923 } else {
1924 /* IV not precise. No need to convert from PV, as NV
1925 conversion would already have cached IV if it detected
1926 that PV->IV would be better than PV->NV->IV
1927 flags already correct - don't set public IOK. */
1928 DEBUG_c(PerlIO_printf(Perl_debug_log,
1929 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
1930 PTR2UV(sv),
1931 SvNVX(sv),
1932 SvIVX(sv)));
1933 }
1934 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1935 but the cast (NV)IV_MIN rounds to a the value less (more
1936 negative) than IV_MIN which happens to be equal to SvNVX ??
1937 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1938 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1939 (NV)UVX == NVX are both true, but the values differ. :-(
1940 Hopefully for 2s complement IV_MIN is something like
1941 0x8000000000000000 which will be exact. NWC */
1942 }
1943 else {
1944 SvUV_set(sv, U_V(SvNVX(sv)));
1945 if (
1946 (SvNVX(sv) == (NV) SvUVX(sv))
1947#ifndef NV_PRESERVES_UV
1948 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1949 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1950 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1951 /* Don't flag it as "accurately an integer" if the number
1952 came from a (by definition imprecise) NV operation, and
1953 we're outside the range of NV integer precision */
1954#endif
1955 )
1956 SvIOK_on(sv);
1957 SvIsUV_on(sv);
1958 DEBUG_c(PerlIO_printf(Perl_debug_log,
1959 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1960 PTR2UV(sv),
1961 SvUVX(sv),
1962 SvUVX(sv)));
1963 }
1964 }
1965 else if (SvPOKp(sv) && SvLEN(sv)) {
1966 UV value;
1967 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
1968 /* We want to avoid a possible problem when we cache an IV/ a UV which
1969 may be later translated to an NV, and the resulting NV is not
1970 the same as the direct translation of the initial string
1971 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1972 be careful to ensure that the value with the .456 is around if the
1973 NV value is requested in the future).
1974
1975 This means that if we cache such an IV/a UV, we need to cache the
1976 NV as well. Moreover, we trade speed for space, and do not
1977 cache the NV if we are sure it's not needed.
1978 */
1979
1980 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
1981 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1982 == IS_NUMBER_IN_UV) {
1983 /* It's definitely an integer, only upgrade to PVIV */
1984 if (SvTYPE(sv) < SVt_PVIV)
1985 sv_upgrade(sv, SVt_PVIV);
1986 (void)SvIOK_on(sv);
1987 } else if (SvTYPE(sv) < SVt_PVNV)
1988 sv_upgrade(sv, SVt_PVNV);
1989
1990 /* If NVs preserve UVs then we only use the UV value if we know that
1991 we aren't going to call atof() below. If NVs don't preserve UVs
1992 then the value returned may have more precision than atof() will
1993 return, even though value isn't perfectly accurate. */
1994 if ((numtype & (IS_NUMBER_IN_UV
1995#ifdef NV_PRESERVES_UV
1996 | IS_NUMBER_NOT_INT
1997#endif
1998 )) == IS_NUMBER_IN_UV) {
1999 /* This won't turn off the public IOK flag if it was set above */
2000 (void)SvIOKp_on(sv);
2001
2002 if (!(numtype & IS_NUMBER_NEG)) {
2003 /* positive */;
2004 if (value <= (UV)IV_MAX) {
2005 SvIV_set(sv, (IV)value);
2006 } else {
2007 /* it didn't overflow, and it was positive. */
2008 SvUV_set(sv, value);
2009 SvIsUV_on(sv);
2010 }
2011 } else {
2012 /* 2s complement assumption */
2013 if (value <= (UV)IV_MIN) {
2014 SvIV_set(sv, -(IV)value);
2015 } else {
2016 /* Too negative for an IV. This is a double upgrade, but
2017 I'm assuming it will be rare. */
2018 if (SvTYPE(sv) < SVt_PVNV)
2019 sv_upgrade(sv, SVt_PVNV);
2020 SvNOK_on(sv);
2021 SvIOK_off(sv);
2022 SvIOKp_on(sv);
2023 SvNV_set(sv, -(NV)value);
2024 SvIV_set(sv, IV_MIN);
2025 }
2026 }
2027 }
2028 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2029 will be in the previous block to set the IV slot, and the next
2030 block to set the NV slot. So no else here. */
2031
2032 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2033 != IS_NUMBER_IN_UV) {
2034 /* It wasn't an (integer that doesn't overflow the UV). */
2035 SvNV_set(sv, Atof(SvPVX_const(sv)));
2036
2037 if (! numtype && ckWARN(WARN_NUMERIC))
2038 not_a_number(sv);
2039
2040#if defined(USE_LONG_DOUBLE)
2041 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2042 PTR2UV(sv), SvNVX(sv)));
2043#else
2044 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2045 PTR2UV(sv), SvNVX(sv)));
2046#endif
2047
2048#ifdef NV_PRESERVES_UV
2049 (void)SvIOKp_on(sv);
2050 (void)SvNOK_on(sv);
2051 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2052 SvIV_set(sv, I_V(SvNVX(sv)));
2053 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2054 SvIOK_on(sv);
2055 } else {
2056 NOOP; /* Integer is imprecise. NOK, IOKp */
2057 }
2058 /* UV will not work better than IV */
2059 } else {
2060 if (SvNVX(sv) > (NV)UV_MAX) {
2061 SvIsUV_on(sv);
2062 /* Integer is inaccurate. NOK, IOKp, is UV */
2063 SvUV_set(sv, UV_MAX);
2064 } else {
2065 SvUV_set(sv, U_V(SvNVX(sv)));
2066 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2067 NV preservse UV so can do correct comparison. */
2068 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2069 SvIOK_on(sv);
2070 } else {
2071 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
2072 }
2073 }
2074 SvIsUV_on(sv);
2075 }
2076#else /* NV_PRESERVES_UV */
2077 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2078 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2079 /* The IV/UV slot will have been set from value returned by
2080 grok_number above. The NV slot has just been set using
2081 Atof. */
2082 SvNOK_on(sv);
2083 assert (SvIOKp(sv));
2084 } else {
2085 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2086 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2087 /* Small enough to preserve all bits. */
2088 (void)SvIOKp_on(sv);
2089 SvNOK_on(sv);
2090 SvIV_set(sv, I_V(SvNVX(sv)));
2091 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2092 SvIOK_on(sv);
2093 /* Assumption: first non-preserved integer is < IV_MAX,
2094 this NV is in the preserved range, therefore: */
2095 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2096 < (UV)IV_MAX)) {
2097 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);
2098 }
2099 } else {
2100 /* IN_UV NOT_INT
2101 0 0 already failed to read UV.
2102 0 1 already failed to read UV.
2103 1 0 you won't get here in this case. IV/UV
2104 slot set, public IOK, Atof() unneeded.
2105 1 1 already read UV.
2106 so there's no point in sv_2iuv_non_preserve() attempting
2107 to use atol, strtol, strtoul etc. */
2108 sv_2iuv_non_preserve (sv, numtype);
2109 }
2110 }
2111#endif /* NV_PRESERVES_UV */
2112 }
2113 }
2114 else {
2115 if (isGV_with_GP(sv))
2116 return glob_2number((GV *)sv);
2117
2118 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2119 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2120 report_uninit(sv);
2121 }
2122 if (SvTYPE(sv) < SVt_IV)
2123 /* Typically the caller expects that sv_any is not NULL now. */
2124 sv_upgrade(sv, SVt_IV);
2125 /* Return 0 from the caller. */
2126 return TRUE;
2127 }
2128 return FALSE;
2129}
2130
2131/*
2132=for apidoc sv_2iv_flags
2133
2134Return the integer value of an SV, doing any necessary string
2135conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2136Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2137
2138=cut
2139*/
2140
2141IV
2142Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2143{
2144 dVAR;
2145 if (!sv)
2146 return 0;
2147 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2148 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2149 cache IVs just in case. In practice it seems that they never
2150 actually anywhere accessible by user Perl code, let alone get used
2151 in anything other than a string context. */
2152 if (flags & SV_GMAGIC)
2153 mg_get(sv);
2154 if (SvIOKp(sv))
2155 return SvIVX(sv);
2156 if (SvNOKp(sv)) {
2157 return I_V(SvNVX(sv));
2158 }
2159 if (SvPOKp(sv) && SvLEN(sv)) {
2160 UV value;
2161 const int numtype
2162 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2163
2164 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2165 == IS_NUMBER_IN_UV) {
2166 /* It's definitely an integer */
2167 if (numtype & IS_NUMBER_NEG) {
2168 if (value < (UV)IV_MIN)
2169 return -(IV)value;
2170 } else {
2171 if (value < (UV)IV_MAX)
2172 return (IV)value;
2173 }
2174 }
2175 if (!numtype) {
2176 if (ckWARN(WARN_NUMERIC))
2177 not_a_number(sv);
2178 }
2179 return I_V(Atof(SvPVX_const(sv)));
2180 }
2181 if (SvROK(sv)) {
2182 goto return_rok;
2183 }
2184 assert(SvTYPE(sv) >= SVt_PVMG);
2185 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2186 } else if (SvTHINKFIRST(sv)) {
2187 if (SvROK(sv)) {
2188 return_rok:
2189 if (SvAMAGIC(sv)) {
2190 SV * const tmpstr=AMG_CALLun(sv,numer);
2191 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2192 return SvIV(tmpstr);
2193 }
2194 }
2195 return PTR2IV(SvRV(sv));
2196 }
2197 if (SvIsCOW(sv)) {
2198 sv_force_normal_flags(sv, 0);
2199 }
2200 if (SvREADONLY(sv) && !SvOK(sv)) {
2201 if (ckWARN(WARN_UNINITIALIZED))
2202 report_uninit(sv);
2203 return 0;
2204 }
2205 }
2206 if (!SvIOKp(sv)) {
2207 if (S_sv_2iuv_common(aTHX_ sv))
2208 return 0;
2209 }
2210 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2211 PTR2UV(sv),SvIVX(sv)));
2212 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2213}
2214
2215/*
2216=for apidoc sv_2uv_flags
2217
2218Return the unsigned integer value of an SV, doing any necessary string
2219conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2220Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2221
2222=cut
2223*/
2224
2225UV
2226Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2227{
2228 dVAR;
2229 if (!sv)
2230 return 0;
2231 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2232 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2233 cache IVs just in case. */
2234 if (flags & SV_GMAGIC)
2235 mg_get(sv);
2236 if (SvIOKp(sv))
2237 return SvUVX(sv);
2238 if (SvNOKp(sv))
2239 return U_V(SvNVX(sv));
2240 if (SvPOKp(sv) && SvLEN(sv)) {
2241 UV value;
2242 const int numtype
2243 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2244
2245 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2246 == IS_NUMBER_IN_UV) {
2247 /* It's definitely an integer */
2248 if (!(numtype & IS_NUMBER_NEG))
2249 return value;
2250 }
2251 if (!numtype) {
2252 if (ckWARN(WARN_NUMERIC))
2253 not_a_number(sv);
2254 }
2255 return U_V(Atof(SvPVX_const(sv)));
2256 }
2257 if (SvROK(sv)) {
2258 goto return_rok;
2259 }
2260 assert(SvTYPE(sv) >= SVt_PVMG);
2261 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2262 } else if (SvTHINKFIRST(sv)) {
2263 if (SvROK(sv)) {
2264 return_rok:
2265 if (SvAMAGIC(sv)) {
2266 SV *const tmpstr = AMG_CALLun(sv,numer);
2267 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2268 return SvUV(tmpstr);
2269 }
2270 }
2271 return PTR2UV(SvRV(sv));
2272 }
2273 if (SvIsCOW(sv)) {
2274 sv_force_normal_flags(sv, 0);
2275 }
2276 if (SvREADONLY(sv) && !SvOK(sv)) {
2277 if (ckWARN(WARN_UNINITIALIZED))
2278 report_uninit(sv);
2279 return 0;
2280 }
2281 }
2282 if (!SvIOKp(sv)) {
2283 if (S_sv_2iuv_common(aTHX_ sv))
2284 return 0;
2285 }
2286
2287 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2288 PTR2UV(sv),SvUVX(sv)));
2289 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2290}
2291
2292/*
2293=for apidoc sv_2nv
2294
2295Return the num value of an SV, doing any necessary string or integer
2296conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2297macros.
2298
2299=cut
2300*/
2301
2302NV
2303Perl_sv_2nv(pTHX_ register SV *sv)
2304{
2305 dVAR;
2306 if (!sv)
2307 return 0.0;
2308 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2309 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2310 cache IVs just in case. */
2311 mg_get(sv);
2312 if (SvNOKp(sv))
2313 return SvNVX(sv);
2314 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2315 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2316 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2317 not_a_number(sv);
2318 return Atof(SvPVX_const(sv));
2319 }
2320 if (SvIOKp(sv)) {
2321 if (SvIsUV(sv))
2322 return (NV)SvUVX(sv);
2323 else
2324 return (NV)SvIVX(sv);
2325 }
2326 if (SvROK(sv)) {
2327 goto return_rok;
2328 }
2329 assert(SvTYPE(sv) >= SVt_PVMG);
2330 /* This falls through to the report_uninit near the end of the
2331 function. */
2332 } else if (SvTHINKFIRST(sv)) {
2333 if (SvROK(sv)) {
2334 return_rok:
2335 if (SvAMAGIC(sv)) {
2336 SV *const tmpstr = AMG_CALLun(sv,numer);
2337 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2338 return SvNV(tmpstr);
2339 }
2340 }
2341 return PTR2NV(SvRV(sv));
2342 }
2343 if (SvIsCOW(sv)) {
2344 sv_force_normal_flags(sv, 0);
2345 }
2346 if (SvREADONLY(sv) && !SvOK(sv)) {
2347 if (ckWARN(WARN_UNINITIALIZED))
2348 report_uninit(sv);
2349 return 0.0;
2350 }
2351 }
2352 if (SvTYPE(sv) < SVt_NV) {
2353 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2354 sv_upgrade(sv, SVt_NV);
2355#ifdef USE_LONG_DOUBLE
2356 DEBUG_c({
2357 STORE_NUMERIC_LOCAL_SET_STANDARD();
2358 PerlIO_printf(Perl_debug_log,
2359 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2360 PTR2UV(sv), SvNVX(sv));
2361 RESTORE_NUMERIC_LOCAL();
2362 });
2363#else
2364 DEBUG_c({
2365 STORE_NUMERIC_LOCAL_SET_STANDARD();
2366 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2367 PTR2UV(sv), SvNVX(sv));
2368 RESTORE_NUMERIC_LOCAL();
2369 });
2370#endif
2371 }
2372 else if (SvTYPE(sv) < SVt_PVNV)
2373 sv_upgrade(sv, SVt_PVNV);
2374 if (SvNOKp(sv)) {
2375 return SvNVX(sv);
2376 }
2377 if (SvIOKp(sv)) {
2378 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2379#ifdef NV_PRESERVES_UV
2380 SvNOK_on(sv);
2381#else
2382 /* Only set the public NV OK flag if this NV preserves the IV */
2383 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2384 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2385 : (SvIVX(sv) == I_V(SvNVX(sv))))
2386 SvNOK_on(sv);
2387 else
2388 SvNOKp_on(sv);
2389#endif
2390 }
2391 else if (SvPOKp(sv) && SvLEN(sv)) {
2392 UV value;
2393 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2394 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2395 not_a_number(sv);
2396#ifdef NV_PRESERVES_UV
2397 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2398 == IS_NUMBER_IN_UV) {
2399 /* It's definitely an integer */
2400 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2401 } else
2402 SvNV_set(sv, Atof(SvPVX_const(sv)));
2403 SvNOK_on(sv);
2404#else
2405 SvNV_set(sv, Atof(SvPVX_const(sv)));
2406 /* Only set the public NV OK flag if this NV preserves the value in
2407 the PV at least as well as an IV/UV would.
2408 Not sure how to do this 100% reliably. */
2409 /* if that shift count is out of range then Configure's test is
2410 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2411 UV_BITS */
2412 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2413 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2414 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2415 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2416 /* Can't use strtol etc to convert this string, so don't try.
2417 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2418 SvNOK_on(sv);
2419 } else {
2420 /* value has been set. It may not be precise. */
2421 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2422 /* 2s complement assumption for (UV)IV_MIN */
2423 SvNOK_on(sv); /* Integer is too negative. */
2424 } else {
2425 SvNOKp_on(sv);
2426 SvIOKp_on(sv);
2427
2428 if (numtype & IS_NUMBER_NEG) {
2429 SvIV_set(sv, -(IV)value);
2430 } else if (value <= (UV)IV_MAX) {
2431 SvIV_set(sv, (IV)value);
2432 } else {
2433 SvUV_set(sv, value);
2434 SvIsUV_on(sv);
2435 }
2436
2437 if (numtype & IS_NUMBER_NOT_INT) {
2438 /* I believe that even if the original PV had decimals,
2439 they are lost beyond the limit of the FP precision.
2440 However, neither is canonical, so both only get p
2441 flags. NWC, 2000/11/25 */
2442 /* Both already have p flags, so do nothing */
2443 } else {
2444 const NV nv = SvNVX(sv);
2445 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2446 if (SvIVX(sv) == I_V(nv)) {
2447 SvNOK_on(sv);
2448 } else {
2449 /* It had no "." so it must be integer. */
2450 }
2451 SvIOK_on(sv);
2452 } else {
2453 /* between IV_MAX and NV(UV_MAX).
2454 Could be slightly > UV_MAX */
2455
2456 if (numtype & IS_NUMBER_NOT_INT) {
2457 /* UV and NV both imprecise. */
2458 } else {
2459 const UV nv_as_uv = U_V(nv);
2460
2461 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2462 SvNOK_on(sv);
2463 }
2464 SvIOK_on(sv);
2465 }
2466 }
2467 }
2468 }
2469 }
2470#endif /* NV_PRESERVES_UV */
2471 }
2472 else {
2473 if (isGV_with_GP(sv)) {
2474 glob_2number((GV *)sv);
2475 return 0.0;
2476 }
2477
2478 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2479 report_uninit(sv);
2480 assert (SvTYPE(sv) >= SVt_NV);
2481 /* Typically the caller expects that sv_any is not NULL now. */
2482 /* XXX Ilya implies that this is a bug in callers that assume this
2483 and ideally should be fixed. */
2484 return 0.0;
2485 }
2486#if defined(USE_LONG_DOUBLE)
2487 DEBUG_c({
2488 STORE_NUMERIC_LOCAL_SET_STANDARD();
2489 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2490 PTR2UV(sv), SvNVX(sv));
2491 RESTORE_NUMERIC_LOCAL();
2492 });
2493#else
2494 DEBUG_c({
2495 STORE_NUMERIC_LOCAL_SET_STANDARD();
2496 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2497 PTR2UV(sv), SvNVX(sv));
2498 RESTORE_NUMERIC_LOCAL();
2499 });
2500#endif
2501 return SvNVX(sv);
2502}
2503
2504/* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2505 * UV as a string towards the end of buf, and return pointers to start and
2506 * end of it.
2507 *
2508 * We assume that buf is at least TYPE_CHARS(UV) long.
2509 */
2510
2511static char *
2512S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2513{
2514 char *ptr = buf + TYPE_CHARS(UV);
2515 char * const ebuf = ptr;
2516 int sign;
2517
2518 if (is_uv)
2519 sign = 0;
2520 else if (iv >= 0) {
2521 uv = iv;
2522 sign = 0;
2523 } else {
2524 uv = -iv;
2525 sign = 1;
2526 }
2527 do {
2528 *--ptr = '0' + (char)(uv % 10);
2529 } while (uv /= 10);
2530 if (sign)
2531 *--ptr = '-';
2532 *peob = ebuf;
2533 return ptr;
2534}
2535
2536/*
2537=for apidoc sv_2pv_flags
2538
2539Returns a pointer to the string value of an SV, and sets *lp to its length.
2540If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2541if necessary.
2542Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2543usually end up here too.
2544
2545=cut
2546*/
2547
2548char *
2549Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2550{
2551 dVAR;
2552 register char *s;
2553
2554 if (!sv) {
2555 if (lp)
2556 *lp = 0;
2557 return (char *)"";
2558 }
2559 if (SvGMAGICAL(sv)) {
2560 if (flags & SV_GMAGIC)
2561 mg_get(sv);
2562 if (SvPOKp(sv)) {
2563 if (lp)
2564 *lp = SvCUR(sv);
2565 if (flags & SV_MUTABLE_RETURN)
2566 return SvPVX_mutable(sv);
2567 if (flags & SV_CONST_RETURN)
2568 return (char *)SvPVX_const(sv);
2569 return SvPVX(sv);
2570 }
2571 if (SvIOKp(sv) || SvNOKp(sv)) {
2572 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2573 STRLEN len;
2574
2575 if (SvIOKp(sv)) {
2576 len = SvIsUV(sv)
2577 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2578 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2579 } else {
2580 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2581 len = strlen(tbuf);
2582 }
2583 assert(!SvROK(sv));
2584 {
2585 dVAR;
2586
2587#ifdef FIXNEGATIVEZERO
2588 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2589 tbuf[0] = '0';
2590 tbuf[1] = 0;
2591 len = 1;
2592 }
2593#endif
2594 SvUPGRADE(sv, SVt_PV);
2595 if (lp)
2596 *lp = len;
2597 s = SvGROW_mutable(sv, len + 1);
2598 SvCUR_set(sv, len);
2599 SvPOKp_on(sv);
2600 return (char*)memcpy(s, tbuf, len + 1);
2601 }
2602 }
2603 if (SvROK(sv)) {
2604 goto return_rok;
2605 }
2606 assert(SvTYPE(sv) >= SVt_PVMG);
2607 /* This falls through to the report_uninit near the end of the
2608 function. */
2609 } else if (SvTHINKFIRST(sv)) {
2610 if (SvROK(sv)) {
2611 return_rok:
2612 if (SvAMAGIC(sv)) {
2613 SV *const tmpstr = AMG_CALLun(sv,string);
2614 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2615 /* Unwrap this: */
2616 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2617 */
2618
2619 char *pv;
2620 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2621 if (flags & SV_CONST_RETURN) {
2622 pv = (char *) SvPVX_const(tmpstr);
2623 } else {
2624 pv = (flags & SV_MUTABLE_RETURN)
2625 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2626 }
2627 if (lp)
2628 *lp = SvCUR(tmpstr);
2629 } else {
2630 pv = sv_2pv_flags(tmpstr, lp, flags);
2631 }
2632 if (SvUTF8(tmpstr))
2633 SvUTF8_on(sv);
2634 else
2635 SvUTF8_off(sv);
2636 return pv;
2637 }
2638 }
2639 {
2640 STRLEN len;
2641 char *retval;
2642 char *buffer;
2643 MAGIC *mg;
2644 const SV *const referent = (SV*)SvRV(sv);
2645
2646 if (!referent) {
2647 len = 7;
2648 retval = buffer = savepvn("NULLREF", len);
2649 } else if (SvTYPE(referent) == SVt_PVMG
2650 && ((SvFLAGS(referent) &
2651 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2652 == (SVs_OBJECT|SVs_SMG))
2653 && (mg = mg_find(referent, PERL_MAGIC_qr)))
2654 {
2655 char *str = NULL;
2656 I32 haseval = 0;
2657 U32 flags = 0;
2658 (str) = CALLREG_AS_STR(mg,lp,&flags,&haseval);
2659 if (flags & 1)
2660 SvUTF8_on(sv);
2661 else
2662 SvUTF8_off(sv);
2663 PL_reginterp_cnt += haseval;
2664 return str;
2665 } else {
2666 const char *const typestr = sv_reftype(referent, 0);
2667 const STRLEN typelen = strlen(typestr);
2668 UV addr = PTR2UV(referent);
2669 const char *stashname = NULL;
2670 STRLEN stashnamelen = 0; /* hush, gcc */
2671 const char *buffer_end;
2672
2673 if (SvOBJECT(referent)) {
2674 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2675
2676 if (name) {
2677 stashname = HEK_KEY(name);
2678 stashnamelen = HEK_LEN(name);
2679
2680 if (HEK_UTF8(name)) {
2681 SvUTF8_on(sv);
2682 } else {
2683 SvUTF8_off(sv);
2684 }
2685 } else {
2686 stashname = "__ANON__";
2687 stashnamelen = 8;
2688 }
2689 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2690 + 2 * sizeof(UV) + 2 /* )\0 */;
2691 } else {
2692 len = typelen + 3 /* (0x */
2693 + 2 * sizeof(UV) + 2 /* )\0 */;
2694 }
2695
2696 Newx(buffer, len, char);
2697 buffer_end = retval = buffer + len;
2698
2699 /* Working backwards */
2700 *--retval = '\0';
2701 *--retval = ')';
2702 do {
2703 *--retval = PL_hexdigit[addr & 15];
2704 } while (addr >>= 4);
2705 *--retval = 'x';
2706 *--retval = '0';
2707 *--retval = '(';
2708
2709 retval -= typelen;
2710 memcpy(retval, typestr, typelen);
2711
2712 if (stashname) {
2713 *--retval = '=';
2714 retval -= stashnamelen;
2715 memcpy(retval, stashname, stashnamelen);
2716 }
2717 /* retval may not neccesarily have reached the start of the
2718 buffer here. */
2719 assert (retval >= buffer);
2720
2721 len = buffer_end - retval - 1; /* -1 for that \0 */
2722 }
2723 if (lp)
2724 *lp = len;
2725 SAVEFREEPV(buffer);
2726 return retval;
2727 }
2728 }
2729 if (SvREADONLY(sv) && !SvOK(sv)) {
2730 if (ckWARN(WARN_UNINITIALIZED))
2731 report_uninit(sv);
2732 if (lp)
2733 *lp = 0;
2734 return (char *)"";
2735 }
2736 }
2737 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2738 /* I'm assuming that if both IV and NV are equally valid then
2739 converting the IV is going to be more efficient */
2740 const U32 isUIOK = SvIsUV(sv);
2741 char buf[TYPE_CHARS(UV)];
2742 char *ebuf, *ptr;
2743 STRLEN len;
2744
2745 if (SvTYPE(sv) < SVt_PVIV)
2746 sv_upgrade(sv, SVt_PVIV);
2747 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2748 len = ebuf - ptr;
2749 /* inlined from sv_setpvn */
2750 s = SvGROW_mutable(sv, len + 1);
2751 Move(ptr, s, len, char);
2752 s += len;
2753 *s = '\0';
2754 }
2755 else if (SvNOKp(sv)) {
2756 const int olderrno = errno;
2757 if (SvTYPE(sv) < SVt_PVNV)
2758 sv_upgrade(sv, SVt_PVNV);
2759 /* The +20 is pure guesswork. Configure test needed. --jhi */
2760 s = SvGROW_mutable(sv, NV_DIG + 20);
2761 /* some Xenix systems wipe out errno here */
2762#ifdef apollo
2763 if (SvNVX(sv) == 0.0)
2764 my_strlcpy(s, "0", SvLEN(sv));
2765 else
2766#endif /*apollo*/
2767 {
2768 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2769 }
2770 errno = olderrno;
2771#ifdef FIXNEGATIVEZERO
2772 if (*s == '-' && s[1] == '0' && !s[2])
2773 my_strlcpy(s, "0", SvLEN(s));
2774#endif
2775 while (*s) s++;
2776#ifdef hcx
2777 if (s[-1] == '.')
2778 *--s = '\0';
2779#endif
2780 }
2781 else {
2782 if (isGV_with_GP(sv))
2783 return glob_2pv((GV *)sv, lp);
2784
2785 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2786 report_uninit(sv);
2787 if (lp)
2788 *lp = 0;
2789 if (SvTYPE(sv) < SVt_PV)
2790 /* Typically the caller expects that sv_any is not NULL now. */
2791 sv_upgrade(sv, SVt_PV);
2792 return (char *)"";
2793 }
2794 {
2795 const STRLEN len = s - SvPVX_const(sv);
2796 if (lp)
2797 *lp = len;
2798 SvCUR_set(sv, len);
2799 }
2800 SvPOK_on(sv);
2801 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2802 PTR2UV(sv),SvPVX_const(sv)));
2803 if (flags & SV_CONST_RETURN)
2804 return (char *)SvPVX_const(sv);
2805 if (flags & SV_MUTABLE_RETURN)
2806 return SvPVX_mutable(sv);
2807 return SvPVX(sv);
2808}
2809
2810/*
2811=for apidoc sv_copypv
2812
2813Copies a stringified representation of the source SV into the
2814destination SV. Automatically performs any necessary mg_get and
2815coercion of numeric values into strings. Guaranteed to preserve
2816UTF8 flag even from overloaded objects. Similar in nature to
2817sv_2pv[_flags] but operates directly on an SV instead of just the
2818string. Mostly uses sv_2pv_flags to do its work, except when that
2819would lose the UTF-8'ness of the PV.
2820
2821=cut
2822*/
2823
2824void
2825Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
2826{
2827 STRLEN len;
2828 const char * const s = SvPV_const(ssv,len);
2829 sv_setpvn(dsv,s,len);
2830 if (SvUTF8(ssv))
2831 SvUTF8_on(dsv);
2832 else
2833 SvUTF8_off(dsv);
2834}
2835
2836/*
2837=for apidoc sv_2pvbyte
2838
2839Return a pointer to the byte-encoded representation of the SV, and set *lp
2840to its length. May cause the SV to be downgraded from UTF-8 as a
2841side-effect.
2842
2843Usually accessed via the C<SvPVbyte> macro.
2844
2845=cut
2846*/
2847
2848char *
2849Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2850{
2851 sv_utf8_downgrade(sv,0);
2852 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2853}
2854
2855/*
2856=for apidoc sv_2pvutf8
2857
2858Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
2859to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
2860
2861Usually accessed via the C<SvPVutf8> macro.
2862
2863=cut
2864*/
2865
2866char *
2867Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2868{
2869 sv_utf8_upgrade(sv);
2870 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2871}
2872
2873
2874/*
2875=for apidoc sv_2bool
2876
2877This function is only called on magical items, and is only used by
2878sv_true() or its macro equivalent.
2879
2880=cut
2881*/
2882
2883bool
2884Perl_sv_2bool(pTHX_ register SV *sv)
2885{
2886 dVAR;
2887 SvGETMAGIC(sv);
2888
2889 if (!SvOK(sv))
2890 return 0;
2891 if (SvROK(sv)) {
2892 if (SvAMAGIC(sv)) {
2893 SV * const tmpsv = AMG_CALLun(sv,bool_);
2894 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2895 return (bool)SvTRUE(tmpsv);
2896 }
2897 return SvRV(sv) != 0;
2898 }
2899 if (SvPOKp(sv)) {
2900 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
2901 if (Xpvtmp &&
2902 (*sv->sv_u.svu_pv > '0' ||
2903 Xpvtmp->xpv_cur > 1 ||
2904 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
2905 return 1;
2906 else
2907 return 0;
2908 }
2909 else {
2910 if (SvIOKp(sv))
2911 return SvIVX(sv) != 0;
2912 else {
2913 if (SvNOKp(sv))
2914 return SvNVX(sv) != 0.0;
2915 else {
2916 if (isGV_with_GP(sv))
2917 return TRUE;
2918 else
2919 return FALSE;
2920 }
2921 }
2922 }
2923}
2924
2925/*
2926=for apidoc sv_utf8_upgrade
2927
2928Converts the PV of an SV to its UTF-8-encoded form.
2929Forces the SV to string form if it is not already.
2930Always sets the SvUTF8 flag to avoid future validity checks even
2931if all the bytes have hibit clear.
2932
2933This is not as a general purpose byte encoding to Unicode interface:
2934use the Encode extension for that.
2935
2936=for apidoc sv_utf8_upgrade_flags
2937
2938Converts the PV of an SV to its UTF-8-encoded form.
2939Forces the SV to string form if it is not already.
2940Always sets the SvUTF8 flag to avoid future validity checks even
2941if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2942will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2943C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
2944
2945This is not as a general purpose byte encoding to Unicode interface:
2946use the Encode extension for that.
2947
2948=cut
2949*/
2950
2951STRLEN
2952Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
2953{
2954 dVAR;
2955 if (sv == &PL_sv_undef)
2956 return 0;
2957 if (!SvPOK(sv)) {
2958 STRLEN len = 0;
2959 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
2960 (void) sv_2pv_flags(sv,&len, flags);
2961 if (SvUTF8(sv))
2962 return len;
2963 } else {
2964 (void) SvPV_force(sv,len);
2965 }
2966 }
2967
2968 if (SvUTF8(sv)) {
2969 return SvCUR(sv);
2970 }
2971
2972 if (SvIsCOW(sv)) {
2973 sv_force_normal_flags(sv, 0);
2974 }
2975
2976 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
2977 sv_recode_to_utf8(sv, PL_encoding);
2978 else { /* Assume Latin-1/EBCDIC */
2979 /* This function could be much more efficient if we
2980 * had a FLAG in SVs to signal if there are any hibit
2981 * chars in the PV. Given that there isn't such a flag
2982 * make the loop as fast as possible. */
2983 const U8 * const s = (U8 *) SvPVX_const(sv);
2984 const U8 * const e = (U8 *) SvEND(sv);
2985 const U8 *t = s;
2986
2987 while (t < e) {
2988 const U8 ch = *t++;
2989 /* Check for hi bit */
2990 if (!NATIVE_IS_INVARIANT(ch)) {
2991 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
2992 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
2993
2994 SvPV_free(sv); /* No longer using what was there before. */
2995 SvPV_set(sv, (char*)recoded);
2996 SvCUR_set(sv, len - 1);
2997 SvLEN_set(sv, len); /* No longer know the real size. */
2998 break;
2999 }
3000 }
3001 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3002 SvUTF8_on(sv);
3003 }
3004 return SvCUR(sv);
3005}
3006
3007/*
3008=for apidoc sv_utf8_downgrade
3009
3010Attempts to convert the PV of an SV from characters to bytes.
3011If the PV contains a character beyond byte, this conversion will fail;
3012in this case, either returns false or, if C<fail_ok> is not
3013true, croaks.
3014
3015This is not as a general purpose Unicode to byte encoding interface:
3016use the Encode extension for that.
3017
3018=cut
3019*/
3020
3021bool
3022Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3023{
3024 dVAR;
3025 if (SvPOKp(sv) && SvUTF8(sv)) {
3026 if (SvCUR(sv)) {
3027 U8 *s;
3028 STRLEN len;
3029
3030 if (SvIsCOW(sv)) {
3031 sv_force_normal_flags(sv, 0);
3032 }
3033 s = (U8 *) SvPV(sv, len);
3034 if (!utf8_to_bytes(s, &len)) {
3035 if (fail_ok)
3036 return FALSE;
3037 else {
3038 if (PL_op)
3039 Perl_croak(aTHX_ "Wide character in %s",
3040 OP_DESC(PL_op));
3041 else
3042 Perl_croak(aTHX_ "Wide character");
3043 }
3044 }
3045 SvCUR_set(sv, len);
3046 }
3047 }
3048 SvUTF8_off(sv);
3049 return TRUE;
3050}
3051
3052/*
3053=for apidoc sv_utf8_encode
3054
3055Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3056flag off so that it looks like octets again.
3057
3058=cut
3059*/
3060
3061void
3062Perl_sv_utf8_encode(pTHX_ register SV *sv)
3063{
3064 if (SvIsCOW(sv)) {
3065 sv_force_normal_flags(sv, 0);
3066 }
3067 if (SvREADONLY(sv)) {
3068 Perl_croak(aTHX_ PL_no_modify);
3069 }
3070 (void) sv_utf8_upgrade(sv);
3071 SvUTF8_off(sv);
3072}
3073
3074/*
3075=for apidoc sv_utf8_decode
3076
3077If the PV of the SV is an octet sequence in UTF-8
3078and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3079so that it looks like a character. If the PV contains only single-byte
3080characters, the C<SvUTF8> flag stays being off.
3081Scans PV for validity and returns false if the PV is invalid UTF-8.
3082
3083=cut
3084*/
3085
3086bool
3087Perl_sv_utf8_decode(pTHX_ register SV *sv)
3088{
3089 if (SvPOKp(sv)) {
3090 const U8 *c;
3091 const U8 *e;
3092
3093 /* The octets may have got themselves encoded - get them back as
3094 * bytes
3095 */
3096 if (!sv_utf8_downgrade(sv, TRUE))
3097 return FALSE;
3098
3099 /* it is actually just a matter of turning the utf8 flag on, but
3100 * we want to make sure everything inside is valid utf8 first.
3101 */
3102 c = (const U8 *) SvPVX_const(sv);
3103 if (!is_utf8_string(c, SvCUR(sv)+1))
3104 return FALSE;
3105 e = (const U8 *) SvEND(sv);
3106 while (c < e) {
3107 const U8 ch = *c++;
3108 if (!UTF8_IS_INVARIANT(ch)) {
3109 SvUTF8_on(sv);
3110 break;
3111 }
3112 }
3113 }
3114 return TRUE;
3115}
3116
3117/*
3118=for apidoc sv_setsv
3119
3120Copies the contents of the source SV C<ssv> into the destination SV
3121C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3122function if the source SV needs to be reused. Does not handle 'set' magic.
3123Loosely speaking, it performs a copy-by-value, obliterating any previous
3124content of the destination.
3125
3126You probably want to use one of the assortment of wrappers, such as
3127C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3128C<SvSetMagicSV_nosteal>.
3129
3130=for apidoc sv_setsv_flags
3131
3132Copies the contents of the source SV C<ssv> into the destination SV
3133C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3134function if the source SV needs to be reused. Does not handle 'set' magic.
3135Loosely speaking, it performs a copy-by-value, obliterating any previous
3136content of the destination.
3137If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3138C<ssv> if appropriate, else not. If the C<flags> parameter has the
3139C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3140and C<sv_setsv_nomg> are implemented in terms of this function.
3141
3142You probably want to use one of the assortment of wrappers, such as
3143C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3144C<SvSetMagicSV_nosteal>.
3145
3146This is the primary function for copying scalars, and most other
3147copy-ish functions and macros use this underneath.
3148
3149=cut
3150*/
3151
3152static void
3153S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
3154{
3155 I32 mro_changes = 0; /* 1 = method, 2 = isa */
3156
3157 if (dtype != SVt_PVGV) {
3158 const char * const name = GvNAME(sstr);
3159 const STRLEN len = GvNAMELEN(sstr);
3160 {
3161 if (dtype >= SVt_PV) {
3162 SvPV_free(dstr);
3163 SvPV_set(dstr, 0);
3164 SvLEN_set(dstr, 0);
3165 SvCUR_set(dstr, 0);
3166 }
3167 SvUPGRADE(dstr, SVt_PVGV);
3168 (void)SvOK_off(dstr);
3169 /* FIXME - why are we doing this, then turning it off and on again
3170 below? */
3171 isGV_with_GP_on(dstr);
3172 }
3173 GvSTASH(dstr) = GvSTASH(sstr);
3174 if (GvSTASH(dstr))
3175 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
3176 gv_name_set((GV *)dstr, name, len, GV_ADD);
3177 SvFAKE_on(dstr); /* can coerce to non-glob */
3178 }
3179
3180#ifdef GV_UNIQUE_CHECK
3181 if (GvUNIQUE((GV*)dstr)) {
3182 Perl_croak(aTHX_ PL_no_modify);
3183 }
3184#endif
3185
3186 if(GvGP((GV*)sstr)) {
3187 /* If source has method cache entry, clear it */
3188 if(GvCVGEN(sstr)) {
3189 SvREFCNT_dec(GvCV(sstr));
3190 GvCV(sstr) = NULL;
3191 GvCVGEN(sstr) = 0;
3192 }
3193 /* If source has a real method, then a method is
3194 going to change */
3195 else if(GvCV((GV*)sstr)) {
3196 mro_changes = 1;
3197 }
3198 }
3199
3200 /* If dest already had a real method, that's a change as well */
3201 if(!mro_changes && GvGP((GV*)dstr) && GvCVu((GV*)dstr)) {
3202 mro_changes = 1;
3203 }
3204
3205 if(strEQ(GvNAME((GV*)dstr),"ISA"))
3206 mro_changes = 2;
3207
3208 gp_free((GV*)dstr);
3209 isGV_with_GP_off(dstr);
3210 (void)SvOK_off(dstr);
3211 isGV_with_GP_on(dstr);
3212 GvINTRO_off(dstr); /* one-shot flag */
3213 GvGP(dstr) = gp_ref(GvGP(sstr));
3214 if (SvTAINTED(sstr))
3215 SvTAINT(dstr);
3216 if (GvIMPORTED(dstr) != GVf_IMPORTED
3217 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3218 {
3219 GvIMPORTED_on(dstr);
3220 }
3221 GvMULTI_on(dstr);
3222 if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3223 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3224 return;
3225}
3226
3227static void
3228S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr) {
3229 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3230 SV *dref = NULL;
3231 const int intro = GvINTRO(dstr);
3232 SV **location;
3233 U8 import_flag = 0;
3234 const U32 stype = SvTYPE(sref);
3235
3236
3237#ifdef GV_UNIQUE_CHECK
3238 if (GvUNIQUE((GV*)dstr)) {
3239 Perl_croak(aTHX_ PL_no_modify);
3240 }
3241#endif
3242
3243 if (intro) {
3244 GvINTRO_off(dstr); /* one-shot flag */
3245 GvLINE(dstr) = CopLINE(PL_curcop);
3246 GvEGV(dstr) = (GV*)dstr;
3247 }
3248 GvMULTI_on(dstr);
3249 switch (stype) {
3250 case SVt_PVCV:
3251 location = (SV **) &GvCV(dstr);
3252 import_flag = GVf_IMPORTED_CV;
3253 goto common;
3254 case SVt_PVHV:
3255 location = (SV **) &GvHV(dstr);
3256 import_flag = GVf_IMPORTED_HV;
3257 goto common;
3258 case SVt_PVAV:
3259 location = (SV **) &GvAV(dstr);
3260 import_flag = GVf_IMPORTED_AV;
3261 goto common;
3262 case SVt_PVIO:
3263 location = (SV **) &GvIOp(dstr);
3264 goto common;
3265 case SVt_PVFM:
3266 location = (SV **) &GvFORM(dstr);
3267 default:
3268 location = &GvSV(dstr);
3269 import_flag = GVf_IMPORTED_SV;
3270 common:
3271 if (intro) {
3272 if (stype == SVt_PVCV) {
3273 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (CV*)sref || GvCVGEN(dstr))) {*/
3274 if (GvCVGEN(dstr)) {
3275 SvREFCNT_dec(GvCV(dstr));
3276 GvCV(dstr) = NULL;
3277 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3278 }
3279 }
3280 SAVEGENERICSV(*location);
3281 }
3282 else
3283 dref = *location;
3284 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3285 CV* const cv = (CV*)*location;
3286 if (cv) {
3287 if (!GvCVGEN((GV*)dstr) &&
3288 (CvROOT(cv) || CvXSUB(cv)))
3289 {
3290 /* Redefining a sub - warning is mandatory if
3291 it was a const and its value changed. */
3292 if (CvCONST(cv) && CvCONST((CV*)sref)
3293 && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
3294 NOOP;
3295 /* They are 2 constant subroutines generated from
3296 the same constant. This probably means that
3297 they are really the "same" proxy subroutine
3298 instantiated in 2 places. Most likely this is
3299 when a constant is exported twice. Don't warn.
3300 */
3301 }
3302 else if (ckWARN(WARN_REDEFINE)
3303 || (CvCONST(cv)
3304 && (!CvCONST((CV*)sref)
3305 || sv_cmp(cv_const_sv(cv),
3306 cv_const_sv((CV*)sref))))) {
3307 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3308 (const char *)
3309 (CvCONST(cv)
3310 ? "Constant subroutine %s::%s redefined"
3311 : "Subroutine %s::%s redefined"),
3312 HvNAME_get(GvSTASH((GV*)dstr)),
3313 GvENAME((GV*)dstr));
3314 }
3315 }
3316 if (!intro)
3317 cv_ckproto_len(cv, (GV*)dstr,
3318 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3319 SvPOK(sref) ? SvCUR(sref) : 0);
3320 }
3321 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3322 GvASSUMECV_on(dstr);
3323 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3324 }
3325 *location = sref;
3326 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3327 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3328 GvFLAGS(dstr) |= import_flag;
3329 }
3330 break;
3331 }
3332 SvREFCNT_dec(dref);
3333 if (SvTAINTED(sstr))
3334 SvTAINT(dstr);
3335 return;
3336}
3337
3338void
3339Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3340{
3341 dVAR;
3342 register U32 sflags;
3343 register int dtype;
3344 register svtype stype;
3345
3346 if (sstr == dstr)
3347 return;
3348
3349 if (SvIS_FREED(dstr)) {
3350 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3351 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3352 }
3353 SV_CHECK_THINKFIRST_COW_DROP(dstr);
3354 if (!sstr)
3355 sstr = &PL_sv_undef;
3356 if (SvIS_FREED(sstr)) {
3357 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3358 (void*)sstr, (void*)dstr);
3359 }
3360 stype = SvTYPE(sstr);
3361 dtype = SvTYPE(dstr);
3362
3363 (void)SvAMAGIC_off(dstr);
3364 if ( SvVOK(dstr) )
3365 {
3366 /* need to nuke the magic */
3367 mg_free(dstr);
3368 SvRMAGICAL_off(dstr);
3369 }
3370
3371 /* There's a lot of redundancy below but we're going for speed here */
3372
3373 switch (stype) {
3374 case SVt_NULL:
3375 undef_sstr:
3376 if (dtype != SVt_PVGV) {
3377 (void)SvOK_off(dstr);
3378 return;
3379 }
3380 break;
3381 case SVt_IV:
3382 if (SvIOK(sstr)) {
3383 switch (dtype) {
3384 case SVt_NULL:
3385 sv_upgrade(dstr, SVt_IV);
3386 break;
3387 case SVt_NV:
3388 case SVt_RV:
3389 case SVt_PV:
3390 sv_upgrade(dstr, SVt_PVIV);
3391 break;
3392 case SVt_PVGV:
3393 goto end_of_first_switch;
3394 }
3395 (void)SvIOK_only(dstr);
3396 SvIV_set(dstr, SvIVX(sstr));
3397 if (SvIsUV(sstr))
3398 SvIsUV_on(dstr);
3399 /* SvTAINTED can only be true if the SV has taint magic, which in
3400 turn means that the SV type is PVMG (or greater). This is the
3401 case statement for SVt_IV, so this cannot be true (whatever gcov
3402 may say). */
3403 assert(!SvTAINTED(sstr));
3404 return;
3405 }
3406 goto undef_sstr;
3407
3408 case SVt_NV:
3409 if (SvNOK(sstr)) {
3410 switch (dtype) {
3411 case SVt_NULL:
3412 case SVt_IV:
3413 sv_upgrade(dstr, SVt_NV);
3414 break;
3415 case SVt_RV:
3416 case SVt_PV:
3417 case SVt_PVIV:
3418 sv_upgrade(dstr, SVt_PVNV);
3419 break;
3420 case SVt_PVGV:
3421 goto end_of_first_switch;
3422 }
3423 SvNV_set(dstr, SvNVX(sstr));
3424 (void)SvNOK_only(dstr);
3425 /* SvTAINTED can only be true if the SV has taint magic, which in
3426 turn means that the SV type is PVMG (or greater). This is the
3427 case statement for SVt_NV, so this cannot be true (whatever gcov
3428 may say). */
3429 assert(!SvTAINTED(sstr));
3430 return;
3431 }
3432 goto undef_sstr;
3433
3434 case SVt_RV:
3435 if (dtype < SVt_RV)
3436 sv_upgrade(dstr, SVt_RV);
3437 break;
3438 case SVt_PVFM:
3439#ifdef PERL_OLD_COPY_ON_WRITE
3440 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3441 if (dtype < SVt_PVIV)
3442 sv_upgrade(dstr, SVt_PVIV);
3443 break;
3444 }
3445 /* Fall through */
3446#endif
3447 case SVt_PV:
3448 if (dtype < SVt_PV)
3449 sv_upgrade(dstr, SVt_PV);
3450 break;
3451 case SVt_PVIV:
3452 if (dtype < SVt_PVIV)
3453 sv_upgrade(dstr, SVt_PVIV);
3454 break;
3455 case SVt_PVNV:
3456 if (dtype < SVt_PVNV)
3457 sv_upgrade(dstr, SVt_PVNV);
3458 break;
3459 default:
3460 {
3461 const char * const type = sv_reftype(sstr,0);
3462 if (PL_op)
3463 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3464 else
3465 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3466 }
3467 break;
3468
3469 /* case SVt_BIND: */
3470 case SVt_PVLV:
3471 case SVt_PVGV:
3472 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
3473 glob_assign_glob(dstr, sstr, dtype);
3474 return;
3475 }
3476 /* SvVALID means that this PVGV is playing at being an FBM. */
3477 /*FALLTHROUGH*/
3478
3479 case SVt_PVMG:
3480 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3481 mg_get(sstr);
3482 if (SvTYPE(sstr) != stype) {
3483 stype = SvTYPE(sstr);
3484 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
3485 glob_assign_glob(dstr, sstr, dtype);
3486 return;
3487 }
3488 }
3489 }
3490 if (stype == SVt_PVLV)
3491 SvUPGRADE(dstr, SVt_PVNV);
3492 else
3493 SvUPGRADE(dstr, (svtype)stype);
3494 }
3495 end_of_first_switch:
3496
3497 /* dstr may have been upgraded. */
3498 dtype = SvTYPE(dstr);
3499 sflags = SvFLAGS(sstr);
3500
3501 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
3502 /* Assigning to a subroutine sets the prototype. */
3503 if (SvOK(sstr)) {
3504 STRLEN len;
3505 const char *const ptr = SvPV_const(sstr, len);
3506
3507 SvGROW(dstr, len + 1);
3508 Copy(ptr, SvPVX(dstr), len + 1, char);
3509 SvCUR_set(dstr, len);
3510 SvPOK_only(dstr);
3511 SvFLAGS(dstr) |= sflags & SVf_UTF8;
3512 } else {
3513 SvOK_off(dstr);
3514 }
3515 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3516 const char * const type = sv_reftype(dstr,0);
3517 if (PL_op)
3518 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_NAME(PL_op));
3519 else
3520 Perl_croak(aTHX_ "Cannot copy to %s", type);
3521 } else if (sflags & SVf_ROK) {
3522 if (isGV_with_GP(dstr) && dtype == SVt_PVGV
3523 && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3524 sstr = SvRV(sstr);
3525 if (sstr == dstr) {
3526 if (GvIMPORTED(dstr) != GVf_IMPORTED
3527 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3528 {
3529 GvIMPORTED_on(dstr);
3530 }
3531 GvMULTI_on(dstr);
3532 return;
3533 }
3534 glob_assign_glob(dstr, sstr, dtype);
3535 return;
3536 }
3537
3538 if (dtype >= SVt_PV) {
3539 if (dtype == SVt_PVGV) {
3540 glob_assign_ref(dstr, sstr);
3541 return;
3542 }
3543 if (SvPVX_const(dstr)) {
3544 SvPV_free(dstr);
3545 SvLEN_set(dstr, 0);
3546 SvCUR_set(dstr, 0);
3547 }
3548 }
3549 (void)SvOK_off(dstr);
3550 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3551 SvFLAGS(dstr) |= sflags & SVf_ROK;
3552 assert(!(sflags & SVp_NOK));
3553 assert(!(sflags & SVp_IOK));
3554 assert(!(sflags & SVf_NOK));
3555 assert(!(sflags & SVf_IOK));
3556 }
3557 else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
3558 if (!(sflags & SVf_OK)) {
3559 if (ckWARN(WARN_MISC))
3560 Perl_warner(aTHX_ packWARN(WARN_MISC),
3561 "Undefined value assigned to typeglob");
3562 }
3563 else {
3564 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3565 if (dstr != (SV*)gv) {
3566 if (GvGP(dstr))
3567 gp_free((GV*)dstr);
3568 GvGP(dstr) = gp_ref(GvGP(gv));
3569 }
3570 }
3571 }
3572 else if (sflags & SVp_POK) {
3573 bool isSwipe = 0;
3574
3575 /*
3576 * Check to see if we can just swipe the string. If so, it's a
3577 * possible small lose on short strings, but a big win on long ones.
3578 * It might even be a win on short strings if SvPVX_const(dstr)
3579 * has to be allocated and SvPVX_const(sstr) has to be freed.
3580 * Likewise if we can set up COW rather than doing an actual copy, we
3581 * drop to the else clause, as the swipe code and the COW setup code
3582 * have much in common.
3583 */
3584
3585 /* Whichever path we take through the next code, we want this true,
3586 and doing it now facilitates the COW check. */
3587 (void)SvPOK_only(dstr);
3588
3589 if (
3590 /* If we're already COW then this clause is not true, and if COW
3591 is allowed then we drop down to the else and make dest COW
3592 with us. If caller hasn't said that we're allowed to COW
3593 shared hash keys then we don't do the COW setup, even if the
3594 source scalar is a shared hash key scalar. */
3595 (((flags & SV_COW_SHARED_HASH_KEYS)
3596 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
3597 : 1 /* If making a COW copy is forbidden then the behaviour we
3598 desire is as if the source SV isn't actually already
3599 COW, even if it is. So we act as if the source flags
3600 are not COW, rather than actually testing them. */
3601 )
3602#ifndef PERL_OLD_COPY_ON_WRITE
3603 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
3604 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
3605 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
3606 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
3607 but in turn, it's somewhat dead code, never expected to go
3608 live, but more kept as a placeholder on how to do it better
3609 in a newer implementation. */
3610 /* If we are COW and dstr is a suitable target then we drop down
3611 into the else and make dest a COW of us. */
3612 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3613#endif
3614 )
3615 &&
3616 !(isSwipe =
3617 (sflags & SVs_TEMP) && /* slated for free anyway? */
3618 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3619 (!(flags & SV_NOSTEAL)) &&
3620 /* and we're allowed to steal temps */
3621 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3622 SvLEN(sstr) && /* and really is a string */
3623 /* and won't be needed again, potentially */
3624 !(PL_op && PL_op->op_type == OP_AASSIGN))
3625#ifdef PERL_OLD_COPY_ON_WRITE
3626 && ((flags & SV_COW_SHARED_HASH_KEYS)
3627 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3628 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
3629 && SvTYPE(sstr) >= SVt_PVIV))
3630 : 1)
3631#endif
3632 ) {
3633 /* Failed the swipe test, and it's not a shared hash key either.
3634 Have to copy the string. */
3635 STRLEN len = SvCUR(sstr);
3636 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3637 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
3638 SvCUR_set(dstr, len);
3639 *SvEND(dstr) = '\0';
3640 } else {
3641 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
3642 be true in here. */
3643 /* Either it's a shared hash key, or it's suitable for
3644 copy-on-write or we can swipe the string. */
3645 if (DEBUG_C_TEST) {
3646 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
3647 sv_dump(sstr);
3648 sv_dump(dstr);
3649 }
3650#ifdef PERL_OLD_COPY_ON_WRITE
3651 if (!isSwipe) {
3652 /* I believe I should acquire a global SV mutex if
3653 it's a COW sv (not a shared hash key) to stop
3654 it going un copy-on-write.
3655 If the source SV has gone un copy on write between up there
3656 and down here, then (assert() that) it is of the correct
3657 form to make it copy on write again */
3658 if ((sflags & (SVf_FAKE | SVf_READONLY))
3659 != (SVf_FAKE | SVf_READONLY)) {
3660 SvREADONLY_on(sstr);
3661 SvFAKE_on(sstr);
3662 /* Make the source SV into a loop of 1.
3663 (about to become 2) */
3664 SV_COW_NEXT_SV_SET(sstr, sstr);
3665 }
3666 }
3667#endif
3668 /* Initial code is common. */
3669 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
3670 SvPV_free(dstr);
3671 }
3672
3673 if (!isSwipe) {
3674 /* making another shared SV. */
3675 STRLEN cur = SvCUR(sstr);
3676 STRLEN len = SvLEN(sstr);
3677#ifdef PERL_OLD_COPY_ON_WRITE
3678 if (len) {
3679 assert (SvTYPE(dstr) >= SVt_PVIV);
3680 /* SvIsCOW_normal */
3681 /* splice us in between source and next-after-source. */
3682 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3683 SV_COW_NEXT_SV_SET(sstr, dstr);
3684 SvPV_set(dstr, SvPVX_mutable(sstr));
3685 } else
3686#endif
3687 {
3688 /* SvIsCOW_shared_hash */
3689 DEBUG_C(PerlIO_printf(Perl_debug_log,
3690 "Copy on write: Sharing hash\n"));
3691
3692 assert (SvTYPE(dstr) >= SVt_PV);
3693 SvPV_set(dstr,
3694 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
3695 }
3696 SvLEN_set(dstr, len);
3697 SvCUR_set(dstr, cur);
3698 SvREADONLY_on(dstr);
3699 SvFAKE_on(dstr);
3700 /* Relesase a global SV mutex. */
3701 }
3702 else
3703 { /* Passes the swipe test. */
3704 SvPV_set(dstr, SvPVX_mutable(sstr));
3705 SvLEN_set(dstr, SvLEN(sstr));
3706 SvCUR_set(dstr, SvCUR(sstr));
3707
3708 SvTEMP_off(dstr);
3709 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3710 SvPV_set(sstr, NULL);
3711 SvLEN_set(sstr, 0);
3712 SvCUR_set(sstr, 0);
3713 SvTEMP_off(sstr);
3714 }
3715 }
3716 if (sflags & SVp_NOK) {
3717 SvNV_set(dstr, SvNVX(sstr));
3718 }
3719 if (sflags & SVp_IOK) {
3720 SvOOK_off(dstr);
3721 SvIV_set(dstr, SvIVX(sstr));
3722 /* Must do this otherwise some other overloaded use of 0x80000000
3723 gets confused. I guess SVpbm_VALID */
3724 if (sflags & SVf_IVisUV)
3725 SvIsUV_on(dstr);
3726 }
3727 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
3728 {
3729 const MAGIC * const smg = SvVSTRING_mg(sstr);
3730 if (smg) {
3731 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3732 smg->mg_ptr, smg->mg_len);
3733 SvRMAGICAL_on(dstr);
3734 }
3735 }
3736 }
3737 else if (sflags & (SVp_IOK|SVp_NOK)) {
3738 (void)SvOK_off(dstr);
3739 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
3740 if (sflags & SVp_IOK) {
3741 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3742 SvIV_set(dstr, SvIVX(sstr));
3743 }
3744 if (sflags & SVp_NOK) {
3745 SvNV_set(dstr, SvNVX(sstr));
3746 }
3747 }
3748 else {
3749 if (isGV_with_GP(sstr)) {
3750 /* This stringification rule for globs is spread in 3 places.
3751 This feels bad. FIXME. */
3752 const U32 wasfake = sflags & SVf_FAKE;
3753
3754 /* FAKE globs can get coerced, so need to turn this off
3755 temporarily if it is on. */
3756 SvFAKE_off(sstr);
3757 gv_efullname3(dstr, (GV *)sstr, "*");
3758 SvFLAGS(sstr) |= wasfake;
3759 }
3760 else
3761 (void)SvOK_off(dstr);
3762 }
3763 if (SvTAINTED(sstr))
3764 SvTAINT(dstr);
3765}
3766
3767/*
3768=for apidoc sv_setsv_mg
3769
3770Like C<sv_setsv>, but also handles 'set' magic.
3771
3772=cut
3773*/
3774
3775void
3776Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3777{
3778 sv_setsv(dstr,sstr);
3779 SvSETMAGIC(dstr);
3780}
3781
3782#ifdef PERL_OLD_COPY_ON_WRITE
3783SV *
3784Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3785{
3786 STRLEN cur = SvCUR(sstr);
3787 STRLEN len = SvLEN(sstr);
3788 register char *new_pv;
3789
3790 if (DEBUG_C_TEST) {
3791 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
3792 (void*)sstr, (void*)dstr);
3793 sv_dump(sstr);
3794 if (dstr)
3795 sv_dump(dstr);
3796 }
3797
3798 if (dstr) {
3799 if (SvTHINKFIRST(dstr))
3800 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3801 else if (SvPVX_const(dstr))
3802 Safefree(SvPVX_const(dstr));
3803 }
3804 else
3805 new_SV(dstr);
3806 SvUPGRADE(dstr, SVt_PVIV);
3807
3808 assert (SvPOK(sstr));
3809 assert (SvPOKp(sstr));
3810 assert (!SvIOK(sstr));
3811 assert (!SvIOKp(sstr));
3812 assert (!SvNOK(sstr));
3813 assert (!SvNOKp(sstr));
3814
3815 if (SvIsCOW(sstr)) {
3816
3817 if (SvLEN(sstr) == 0) {
3818 /* source is a COW shared hash key. */
3819 DEBUG_C(PerlIO_printf(Perl_debug_log,
3820 "Fast copy on write: Sharing hash\n"));
3821 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
3822 goto common_exit;
3823 }
3824 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3825 } else {
3826 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
3827 SvUPGRADE(sstr, SVt_PVIV);
3828 SvREADONLY_on(sstr);
3829 SvFAKE_on(sstr);
3830 DEBUG_C(PerlIO_printf(Perl_debug_log,
3831 "Fast copy on write: Converting sstr to COW\n"));
3832 SV_COW_NEXT_SV_SET(dstr, sstr);
3833 }
3834 SV_COW_NEXT_SV_SET(sstr, dstr);
3835 new_pv = SvPVX_mutable(sstr);
3836
3837 common_exit:
3838 SvPV_set(dstr, new_pv);
3839 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
3840 if (SvUTF8(sstr))
3841 SvUTF8_on(dstr);
3842 SvLEN_set(dstr, len);
3843 SvCUR_set(dstr, cur);
3844 if (DEBUG_C_TEST) {
3845 sv_dump(dstr);
3846 }
3847 return dstr;
3848}
3849#endif
3850
3851/*
3852=for apidoc sv_setpvn
3853
3854Copies a string into an SV. The C<len> parameter indicates the number of
3855bytes to be copied. If the C<ptr> argument is NULL the SV will become
3856undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3857
3858=cut
3859*/
3860
3861void
3862Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3863{
3864 dVAR;
3865 register char *dptr;
3866
3867 SV_CHECK_THINKFIRST_COW_DROP(sv);
3868 if (!ptr) {
3869 (void)SvOK_off(sv);
3870 return;
3871 }
3872 else {
3873 /* len is STRLEN which is unsigned, need to copy to signed */
3874 const IV iv = len;
3875 if (iv < 0)
3876 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
3877 }
3878 SvUPGRADE(sv, SVt_PV);
3879
3880 dptr = SvGROW(sv, len + 1);
3881 Move(ptr,dptr,len,char);
3882 dptr[len] = '\0';
3883 SvCUR_set(sv, len);
3884 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3885 SvTAINT(sv);
3886}
3887
3888/*
3889=for apidoc sv_setpvn_mg
3890
3891Like C<sv_setpvn>, but also handles 'set' magic.
3892
3893=cut
3894*/
3895
3896void
3897Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3898{
3899 sv_setpvn(sv,ptr,len);
3900 SvSETMAGIC(sv);
3901}
3902
3903/*
3904=for apidoc sv_setpv
3905
3906Copies a string into an SV. The string must be null-terminated. Does not
3907handle 'set' magic. See C<sv_setpv_mg>.
3908
3909=cut
3910*/
3911
3912void
3913Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3914{
3915 dVAR;
3916 register STRLEN len;
3917
3918 SV_CHECK_THINKFIRST_COW_DROP(sv);
3919 if (!ptr) {
3920 (void)SvOK_off(sv);
3921 return;
3922 }
3923 len = strlen(ptr);
3924 SvUPGRADE(sv, SVt_PV);
3925
3926 SvGROW(sv, len + 1);
3927 Move(ptr,SvPVX(sv),len+1,char);
3928 SvCUR_set(sv, len);
3929 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3930 SvTAINT(sv);
3931}
3932
3933/*
3934=for apidoc sv_setpv_mg
3935
3936Like C<sv_setpv>, but also handles 'set' magic.
3937
3938=cut
3939*/
3940
3941void
3942Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3943{
3944 sv_setpv(sv,ptr);
3945 SvSETMAGIC(sv);
3946}
3947
3948/*
3949=for apidoc sv_usepvn_flags
3950
3951Tells an SV to use C<ptr> to find its string value. Normally the
3952string is stored inside the SV but sv_usepvn allows the SV to use an
3953outside string. The C<ptr> should point to memory that was allocated
3954by C<malloc>. The string length, C<len>, must be supplied. By default
3955this function will realloc (i.e. move) the memory pointed to by C<ptr>,
3956so that pointer should not be freed or used by the programmer after
3957giving it to sv_usepvn, and neither should any pointers from "behind"
3958that pointer (e.g. ptr + 1) be used.
3959
3960If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
3961SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
3962will be skipped. (i.e. the buffer is actually at least 1 byte longer than
3963C<len>, and already meets the requirements for storing in C<SvPVX>)
3964
3965=cut
3966*/
3967
3968void
3969Perl_sv_usepvn_flags(pTHX_ SV *sv, char *ptr, STRLEN len, U32 flags)
3970{
3971 dVAR;
3972 STRLEN allocate;
3973 SV_CHECK_THINKFIRST_COW_DROP(sv);
3974 SvUPGRADE(sv, SVt_PV);
3975 if (!ptr) {
3976 (void)SvOK_off(sv);
3977 if (flags & SV_SMAGIC)
3978 SvSETMAGIC(sv);
3979 return;
3980 }
3981 if (SvPVX_const(sv))
3982 SvPV_free(sv);
3983
3984#ifdef DEBUGGING
3985 if (flags & SV_HAS_TRAILING_NUL)
3986 assert(ptr[len] == '\0');
3987#endif
3988
3989 allocate = (flags & SV_HAS_TRAILING_NUL)
3990 ? len + 1: PERL_STRLEN_ROUNDUP(len + 1);
3991 if (flags & SV_HAS_TRAILING_NUL) {
3992 /* It's long enough - do nothing.
3993 Specfically Perl_newCONSTSUB is relying on this. */
3994 } else {
3995#ifdef DEBUGGING
3996 /* Force a move to shake out bugs in callers. */
3997 char *new_ptr = (char*)safemalloc(allocate);
3998 Copy(ptr, new_ptr, len, char);
3999 PoisonFree(ptr,len,char);
4000 Safefree(ptr);
4001 ptr = new_ptr;
4002#else
4003 ptr = (char*) saferealloc (ptr, allocate);
4004#endif
4005 }
4006 SvPV_set(sv, ptr);
4007 SvCUR_set(sv, len);
4008 SvLEN_set(sv, allocate);
4009 if (!(flags & SV_HAS_TRAILING_NUL)) {
4010 ptr[len] = '\0';
4011 }
4012 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4013 SvTAINT(sv);
4014 if (flags & SV_SMAGIC)
4015 SvSETMAGIC(sv);
4016}
4017
4018#ifdef PERL_OLD_COPY_ON_WRITE
4019/* Need to do this *after* making the SV normal, as we need the buffer
4020 pointer to remain valid until after we've copied it. If we let go too early,
4021 another thread could invalidate it by unsharing last of the same hash key
4022 (which it can do by means other than releasing copy-on-write Svs)
4023 or by changing the other copy-on-write SVs in the loop. */
4024STATIC void
4025S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4026{
4027 { /* this SV was SvIsCOW_normal(sv) */
4028 /* we need to find the SV pointing to us. */
4029 SV *current = SV_COW_NEXT_SV(after);
4030
4031 if (current == sv) {
4032 /* The SV we point to points back to us (there were only two of us
4033 in the loop.)
4034 Hence other SV is no longer copy on write either. */
4035 SvFAKE_off(after);
4036 SvREADONLY_off(after);
4037 } else {
4038 /* We need to follow the pointers around the loop. */
4039 SV *next;
4040 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4041 assert (next);
4042 current = next;
4043 /* don't loop forever if the structure is bust, and we have
4044 a pointer into a closed loop. */
4045 assert (current != after);
4046 assert (SvPVX_const(current) == pvx);
4047 }
4048 /* Make the SV before us point to the SV after us. */
4049 SV_COW_NEXT_SV_SET(current, after);
4050 }
4051 }
4052}
4053#endif
4054/*
4055=for apidoc sv_force_normal_flags
4056
4057Undo various types of fakery on an SV: if the PV is a shared string, make
4058a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4059an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4060we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4061then a copy-on-write scalar drops its PV buffer (if any) and becomes
4062SvPOK_off rather than making a copy. (Used where this scalar is about to be
4063set to some other value.) In addition, the C<flags> parameter gets passed to
4064C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4065with flags set to 0.
4066
4067=cut
4068*/
4069
4070void
4071Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4072{
4073 dVAR;
4074#ifdef PERL_OLD_COPY_ON_WRITE
4075 if (SvREADONLY(sv)) {
4076 /* At this point I believe I should acquire a global SV mutex. */
4077 if (SvFAKE(sv)) {
4078 const char * const pvx = SvPVX_const(sv);
4079 const STRLEN len = SvLEN(sv);
4080 const STRLEN cur = SvCUR(sv);
4081 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4082 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4083 we'll fail an assertion. */
4084 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4085
4086 if (DEBUG_C_TEST) {
4087 PerlIO_printf(Perl_debug_log,
4088 "Copy on write: Force normal %ld\n",
4089 (long) flags);
4090 sv_dump(sv);
4091 }
4092 SvFAKE_off(sv);
4093 SvREADONLY_off(sv);
4094 /* This SV doesn't own the buffer, so need to Newx() a new one: */
4095 SvPV_set(sv, NULL);
4096 SvLEN_set(sv, 0);
4097 if (flags & SV_COW_DROP_PV) {
4098 /* OK, so we don't need to copy our buffer. */
4099 SvPOK_off(sv);
4100 } else {
4101 SvGROW(sv, cur + 1);
4102 Move(pvx,SvPVX(sv),cur,char);
4103 SvCUR_set(sv, cur);
4104 *SvEND(sv) = '\0';
4105 }
4106 if (len) {
4107 sv_release_COW(sv, pvx, next);
4108 } else {
4109 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4110 }
4111 if (DEBUG_C_TEST) {
4112 sv_dump(sv);
4113 }
4114 }
4115 else if (IN_PERL_RUNTIME)
4116 Perl_croak(aTHX_ PL_no_modify);
4117 /* At this point I believe that I can drop the global SV mutex. */
4118 }
4119#else
4120 if (SvREADONLY(sv)) {
4121 if (SvFAKE(sv)) {
4122 const char * const pvx = SvPVX_const(sv);
4123 const STRLEN len = SvCUR(sv);
4124 SvFAKE_off(sv);
4125 SvREADONLY_off(sv);
4126 SvPV_set(sv, NULL);
4127 SvLEN_set(sv, 0);
4128 SvGROW(sv, len + 1);
4129 Move(pvx,SvPVX(sv),len,char);
4130 *SvEND(sv) = '\0';
4131 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4132 }
4133 else if (IN_PERL_RUNTIME)
4134 Perl_croak(aTHX_ PL_no_modify);
4135 }
4136#endif
4137 if (SvROK(sv))
4138 sv_unref_flags(sv, flags);
4139 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4140 sv_unglob(sv);
4141}
4142
4143/*
4144=for apidoc sv_chop
4145
4146Efficient removal of characters from the beginning of the string buffer.
4147SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4148the string buffer. The C<ptr> becomes the first character of the adjusted
4149string. Uses the "OOK hack".
4150Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4151refer to the same chunk of data.
4152
4153=cut
4154*/
4155
4156void
4157Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
4158{
4159 register STRLEN delta;
4160 if (!ptr || !SvPOKp(sv))
4161 return;
4162 delta = ptr - SvPVX_const(sv);
4163 SV_CHECK_THINKFIRST(sv);
4164 if (SvTYPE(sv) < SVt_PVIV)
4165 sv_upgrade(sv,SVt_PVIV);
4166
4167 if (!SvOOK(sv)) {
4168 if (!SvLEN(sv)) { /* make copy of shared string */
4169 const char *pvx = SvPVX_const(sv);
4170 const STRLEN len = SvCUR(sv);
4171 SvGROW(sv, len + 1);
4172 Move(pvx,SvPVX(sv),len,char);
4173 *SvEND(sv) = '\0';
4174 }
4175 SvIV_set(sv, 0);
4176 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4177 and we do that anyway inside the SvNIOK_off
4178 */
4179 SvFLAGS(sv) |= SVf_OOK;
4180 }
4181 SvNIOK_off(sv);
4182 SvLEN_set(sv, SvLEN(sv) - delta);
4183 SvCUR_set(sv, SvCUR(sv) - delta);
4184 SvPV_set(sv, SvPVX(sv) + delta);
4185 SvIV_set(sv, SvIVX(sv) + delta);
4186}
4187
4188/*
4189=for apidoc sv_catpvn
4190
4191Concatenates the string onto the end of the string which is in the SV. The
4192C<len> indicates number of bytes to copy. If the SV has the UTF-8
4193status set, then the bytes appended should be valid UTF-8.
4194Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4195
4196=for apidoc sv_catpvn_flags
4197
4198Concatenates the string onto the end of the string which is in the SV. The
4199C<len> indicates number of bytes to copy. If the SV has the UTF-8
4200status set, then the bytes appended should be valid UTF-8.
4201If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4202appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4203in terms of this function.
4204
4205=cut
4206*/
4207
4208void
4209Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4210{
4211 dVAR;
4212 STRLEN dlen;
4213 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4214
4215 SvGROW(dsv, dlen + slen + 1);
4216 if (sstr == dstr)
4217 sstr = SvPVX_const(dsv);
4218 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4219 SvCUR_set(dsv, SvCUR(dsv) + slen);
4220 *SvEND(dsv) = '\0';
4221 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4222 SvTAINT(dsv);
4223 if (flags & SV_SMAGIC)
4224 SvSETMAGIC(dsv);
4225}
4226
4227/*
4228=for apidoc sv_catsv
4229
4230Concatenates the string from SV C<ssv> onto the end of the string in
4231SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4232not 'set' magic. See C<sv_catsv_mg>.
4233
4234=for apidoc sv_catsv_flags
4235
4236Concatenates the string from SV C<ssv> onto the end of the string in
4237SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4238bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4239and C<sv_catsv_nomg> are implemented in terms of this function.
4240
4241=cut */
4242
4243void
4244Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4245{
4246 dVAR;
4247 if (ssv) {
4248 STRLEN slen;
4249 const char *spv = SvPV_const(ssv, slen);
4250 if (spv) {
4251 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4252 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4253 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4254 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4255 dsv->sv_flags doesn't have that bit set.
4256 Andy Dougherty 12 Oct 2001
4257 */
4258 const I32 sutf8 = DO_UTF8(ssv);
4259 I32 dutf8;
4260
4261 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4262 mg_get(dsv);
4263 dutf8 = DO_UTF8(dsv);
4264
4265 if (dutf8 != sutf8) {
4266 if (dutf8) {
4267 /* Not modifying source SV, so taking a temporary copy. */
4268 SV* const csv = sv_2mortal(newSVpvn(spv, slen));
4269
4270 sv_utf8_upgrade(csv);
4271 spv = SvPV_const(csv, slen);
4272 }
4273 else
4274 sv_utf8_upgrade_nomg(dsv);
4275 }
4276 sv_catpvn_nomg(dsv, spv, slen);
4277 }
4278 }
4279 if (flags & SV_SMAGIC)
4280 SvSETMAGIC(dsv);
4281}
4282
4283/*
4284=for apidoc sv_catpv
4285
4286Concatenates the string onto the end of the string which is in the SV.
4287If the SV has the UTF-8 status set, then the bytes appended should be
4288valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4289
4290=cut */
4291
4292void
4293Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4294{
4295 dVAR;
4296 register STRLEN len;
4297 STRLEN tlen;
4298 char *junk;
4299
4300 if (!ptr)
4301 return;
4302 junk = SvPV_force(sv, tlen);
4303 len = strlen(ptr);
4304 SvGROW(sv, tlen + len + 1);
4305 if (ptr == junk)
4306 ptr = SvPVX_const(sv);
4307 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4308 SvCUR_set(sv, SvCUR(sv) + len);
4309 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4310 SvTAINT(sv);
4311}
4312
4313/*
4314=for apidoc sv_catpv_mg
4315
4316Like C<sv_catpv>, but also handles 'set' magic.
4317
4318=cut
4319*/
4320
4321void
4322Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4323{
4324 sv_catpv(sv,ptr);
4325 SvSETMAGIC(sv);
4326}
4327
4328/*
4329=for apidoc newSV
4330
4331Creates a new SV. A non-zero C<len> parameter indicates the number of
4332bytes of preallocated string space the SV should have. An extra byte for a
4333trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4334space is allocated.) The reference count for the new SV is set to 1.
4335
4336In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4337parameter, I<x>, a debug aid which allowed callers to identify themselves.
4338This aid has been superseded by a new build option, PERL_MEM_LOG (see
4339L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4340modules supporting older perls.
4341
4342=cut
4343*/
4344
4345SV *
4346Perl_newSV(pTHX_ STRLEN len)
4347{
4348 dVAR;
4349 register SV *sv;
4350
4351 new_SV(sv);
4352 if (len) {
4353 sv_upgrade(sv, SVt_PV);
4354 SvGROW(sv, len + 1);
4355 }
4356 return sv;
4357}
4358/*
4359=for apidoc sv_magicext
4360
4361Adds magic to an SV, upgrading it if necessary. Applies the
4362supplied vtable and returns a pointer to the magic added.
4363
4364Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4365In particular, you can add magic to SvREADONLY SVs, and add more than
4366one instance of the same 'how'.
4367
4368If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4369stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4370special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4371to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4372
4373(This is now used as a subroutine by C<sv_magic>.)
4374
4375=cut
4376*/
4377MAGIC *
4378Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, const MGVTBL *vtable,
4379 const char* name, I32 namlen)
4380{
4381 dVAR;
4382 MAGIC* mg;
4383
4384 SvUPGRADE(sv, SVt_PVMG);
4385 Newxz(mg, 1, MAGIC);
4386 mg->mg_moremagic = SvMAGIC(sv);
4387 SvMAGIC_set(sv, mg);
4388
4389 /* Sometimes a magic contains a reference loop, where the sv and
4390 object refer to each other. To prevent a reference loop that
4391 would prevent such objects being freed, we look for such loops
4392 and if we find one we avoid incrementing the object refcount.
4393
4394 Note we cannot do this to avoid self-tie loops as intervening RV must
4395 have its REFCNT incremented to keep it in existence.
4396
4397 */
4398 if (!obj || obj == sv ||
4399 how == PERL_MAGIC_arylen ||
4400 how == PERL_MAGIC_qr ||
4401 how == PERL_MAGIC_symtab ||
4402 (SvTYPE(obj) == SVt_PVGV &&
4403 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4404 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4405 GvFORM(obj) == (CV*)sv)))
4406 {
4407 mg->mg_obj = obj;
4408 }
4409 else {
4410 mg->mg_obj = SvREFCNT_inc_simple(obj);
4411 mg->mg_flags |= MGf_REFCOUNTED;
4412 }
4413
4414 /* Normal self-ties simply pass a null object, and instead of
4415 using mg_obj directly, use the SvTIED_obj macro to produce a
4416 new RV as needed. For glob "self-ties", we are tieing the PVIO
4417 with an RV obj pointing to the glob containing the PVIO. In
4418 this case, to avoid a reference loop, we need to weaken the
4419 reference.
4420 */
4421
4422 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4423 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4424 {
4425 sv_rvweaken(obj);
4426 }
4427
4428 mg->mg_type = how;
4429 mg->mg_len = namlen;
4430 if (name) {
4431 if (namlen > 0)
4432 mg->mg_ptr = savepvn(name, namlen);
4433 else if (namlen == HEf_SVKEY)
4434 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV*)name);
4435 else
4436 mg->mg_ptr = (char *) name;
4437 }
4438 mg->mg_virtual = (MGVTBL *) vtable;
4439
4440 mg_magical(sv);
4441 if (SvGMAGICAL(sv))
4442 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4443 return mg;
4444}
4445
4446/*
4447=for apidoc sv_magic
4448
4449Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4450then adds a new magic item of type C<how> to the head of the magic list.
4451
4452See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4453handling of the C<name> and C<namlen> arguments.
4454
4455You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4456to add more than one instance of the same 'how'.
4457
4458=cut
4459*/
4460
4461void
4462Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4463{
4464 dVAR;
4465 const MGVTBL *vtable;
4466 MAGIC* mg;
4467
4468#ifdef PERL_OLD_COPY_ON_WRITE
4469 if (SvIsCOW(sv))
4470 sv_force_normal_flags(sv, 0);
4471#endif
4472 if (SvREADONLY(sv)) {
4473 if (
4474 /* its okay to attach magic to shared strings; the subsequent
4475 * upgrade to PVMG will unshare the string */
4476 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4477
4478 && IN_PERL_RUNTIME
4479 && how != PERL_MAGIC_regex_global
4480 && how != PERL_MAGIC_bm
4481 && how != PERL_MAGIC_fm
4482 && how != PERL_MAGIC_sv
4483 && how != PERL_MAGIC_backref
4484 )
4485 {
4486 Perl_croak(aTHX_ PL_no_modify);
4487 }
4488 }
4489 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4490 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4491 /* sv_magic() refuses to add a magic of the same 'how' as an
4492 existing one
4493 */
4494 if (how == PERL_MAGIC_taint) {
4495 mg->mg_len |= 1;
4496 /* Any scalar which already had taint magic on which someone
4497 (erroneously?) did SvIOK_on() or similar will now be
4498 incorrectly sporting public "OK" flags. */
4499 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4500 }
4501 return;
4502 }
4503 }
4504
4505 switch (how) {
4506 case PERL_MAGIC_sv:
4507 vtable = &PL_vtbl_sv;
4508 break;
4509 case PERL_MAGIC_overload:
4510 vtable = &PL_vtbl_amagic;
4511 break;
4512 case PERL_MAGIC_overload_elem:
4513 vtable = &PL_vtbl_amagicelem;
4514 break;
4515 case PERL_MAGIC_overload_table:
4516 vtable = &PL_vtbl_ovrld;
4517 break;
4518 case PERL_MAGIC_bm:
4519 vtable = &PL_vtbl_bm;
4520 break;
4521 case PERL_MAGIC_regdata:
4522 vtable = &PL_vtbl_regdata;
4523 break;
4524 case PERL_MAGIC_regdatum:
4525 vtable = &PL_vtbl_regdatum;
4526 break;
4527 case PERL_MAGIC_env:
4528 vtable = &PL_vtbl_env;
4529 break;
4530 case PERL_MAGIC_fm:
4531 vtable = &PL_vtbl_fm;
4532 break;
4533 case PERL_MAGIC_envelem:
4534 vtable = &PL_vtbl_envelem;
4535 break;
4536 case PERL_MAGIC_regex_global:
4537 vtable = &PL_vtbl_mglob;
4538 break;
4539 case PERL_MAGIC_isa:
4540 vtable = &PL_vtbl_isa;
4541 break;
4542 case PERL_MAGIC_isaelem:
4543 vtable = &PL_vtbl_isaelem;
4544 break;
4545 case PERL_MAGIC_nkeys:
4546 vtable = &PL_vtbl_nkeys;
4547 break;
4548 case PERL_MAGIC_dbfile:
4549 vtable = NULL;
4550 break;
4551 case PERL_MAGIC_dbline:
4552 vtable = &PL_vtbl_dbline;
4553 break;
4554#ifdef USE_LOCALE_COLLATE
4555 case PERL_MAGIC_collxfrm:
4556 vtable = &PL_vtbl_collxfrm;
4557 break;
4558#endif /* USE_LOCALE_COLLATE */
4559 case PERL_MAGIC_tied:
4560 vtable = &PL_vtbl_pack;
4561 break;
4562 case PERL_MAGIC_tiedelem:
4563 case PERL_MAGIC_tiedscalar:
4564 vtable = &PL_vtbl_packelem;
4565 break;
4566 case PERL_MAGIC_qr:
4567 vtable = &PL_vtbl_regexp;
4568 break;
4569 case PERL_MAGIC_hints:
4570 /* As this vtable is all NULL, we can reuse it. */
4571 case PERL_MAGIC_sig:
4572 vtable = &PL_vtbl_sig;
4573 break;
4574 case PERL_MAGIC_sigelem:
4575 vtable = &PL_vtbl_sigelem;
4576 break;
4577 case PERL_MAGIC_taint:
4578 vtable = &PL_vtbl_taint;
4579 break;
4580 case PERL_MAGIC_uvar:
4581 vtable = &PL_vtbl_uvar;
4582 break;
4583 case PERL_MAGIC_vec:
4584 vtable = &PL_vtbl_vec;
4585 break;
4586 case PERL_MAGIC_arylen_p:
4587 case PERL_MAGIC_rhash:
4588 case PERL_MAGIC_symtab:
4589 case PERL_MAGIC_vstring:
4590 vtable = NULL;
4591 break;
4592 case PERL_MAGIC_utf8:
4593 vtable = &PL_vtbl_utf8;
4594 break;
4595 case PERL_MAGIC_substr:
4596 vtable = &PL_vtbl_substr;
4597 break;
4598 case PERL_MAGIC_defelem:
4599 vtable = &PL_vtbl_defelem;
4600 break;
4601 case PERL_MAGIC_arylen:
4602 vtable = &PL_vtbl_arylen;
4603 break;
4604 case PERL_MAGIC_pos:
4605 vtable = &PL_vtbl_pos;
4606 break;
4607 case PERL_MAGIC_backref:
4608 vtable = &PL_vtbl_backref;
4609 break;
4610 case PERL_MAGIC_hintselem:
4611 vtable = &PL_vtbl_hintselem;
4612 break;
4613 case PERL_MAGIC_ext:
4614 /* Reserved for use by extensions not perl internals. */
4615 /* Useful for attaching extension internal data to perl vars. */
4616 /* Note that multiple extensions may clash if magical scalars */
4617 /* etc holding private data from one are passed to another. */
4618 vtable = NULL;
4619 break;
4620 default:
4621 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4622 }
4623
4624 /* Rest of work is done else where */
4625 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4626
4627 switch (how) {
4628 case PERL_MAGIC_taint:
4629 mg->mg_len = 1;
4630 break;
4631 case PERL_MAGIC_ext:
4632 case PERL_MAGIC_dbfile:
4633 SvRMAGICAL_on(sv);
4634 break;
4635 }
4636}
4637
4638/*
4639=for apidoc sv_unmagic
4640
4641Removes all magic of type C<type> from an SV.
4642
4643=cut
4644*/
4645
4646int
4647Perl_sv_unmagic(pTHX_ SV *sv, int type)
4648{
4649 MAGIC* mg;
4650 MAGIC** mgp;
4651 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4652 return 0;
4653 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
4654 for (mg = *mgp; mg; mg = *mgp) {
4655 if (mg->mg_type == type) {
4656 const MGVTBL* const vtbl = mg->mg_virtual;
4657 *mgp = mg->mg_moremagic;
4658 if (vtbl && vtbl->svt_free)
4659 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4660 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4661 if (mg->mg_len > 0)
4662 Safefree(mg->mg_ptr);
4663 else if (mg->mg_len == HEf_SVKEY)
4664 SvREFCNT_dec((SV*)mg->mg_ptr);
4665 else if (mg->mg_type == PERL_MAGIC_utf8)
4666 Safefree(mg->mg_ptr);
4667 }
4668 if (mg->mg_flags & MGf_REFCOUNTED)
4669 SvREFCNT_dec(mg->mg_obj);
4670 Safefree(mg);
4671 }
4672 else
4673 mgp = &mg->mg_moremagic;
4674 }
4675 if (!SvMAGIC(sv)) {
4676 SvMAGICAL_off(sv);
4677 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4678 SvMAGIC_set(sv, NULL);
4679 }
4680
4681 return 0;
4682}
4683
4684/*
4685=for apidoc sv_rvweaken
4686
4687Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4688referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4689push a back-reference to this RV onto the array of backreferences
4690associated with that magic. If the RV is magical, set magic will be
4691called after the RV is cleared.
4692
4693=cut
4694*/
4695
4696SV *
4697Perl_sv_rvweaken(pTHX_ SV *sv)
4698{
4699 SV *tsv;
4700 if (!SvOK(sv)) /* let undefs pass */
4701 return sv;
4702 if (!SvROK(sv))
4703 Perl_croak(aTHX_ "Can't weaken a nonreference");
4704 else if (SvWEAKREF(sv)) {
4705 if (ckWARN(WARN_MISC))
4706 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4707 return sv;
4708 }
4709 tsv = SvRV(sv);
4710 Perl_sv_add_backref(aTHX_ tsv, sv);
4711 SvWEAKREF_on(sv);
4712 SvREFCNT_dec(tsv);
4713 return sv;
4714}
4715
4716/* Give tsv backref magic if it hasn't already got it, then push a
4717 * back-reference to sv onto the array associated with the backref magic.
4718 */
4719
4720void
4721Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4722{
4723 dVAR;
4724 AV *av;
4725
4726 if (SvTYPE(tsv) == SVt_PVHV) {
4727 AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4728
4729 av = *avp;
4730 if (!av) {
4731 /* There is no AV in the offical place - try a fixup. */
4732 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4733
4734 if (mg) {
4735 /* Aha. They've got it stowed in magic. Bring it back. */
4736 av = (AV*)mg->mg_obj;
4737 /* Stop mg_free decreasing the refernce count. */
4738 mg->mg_obj = NULL;
4739 /* Stop mg_free even calling the destructor, given that
4740 there's no AV to free up. */
4741 mg->mg_virtual = 0;
4742 sv_unmagic(tsv, PERL_MAGIC_backref);
4743 } else {
4744 av = newAV();
4745 AvREAL_off(av);
4746 SvREFCNT_inc_simple_void(av);
4747 }
4748 *avp = av;
4749 }
4750 } else {
4751 const MAGIC *const mg
4752 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4753 if (mg)
4754 av = (AV*)mg->mg_obj;
4755 else {
4756 av = newAV();
4757 AvREAL_off(av);
4758 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4759 /* av now has a refcnt of 2, which avoids it getting freed
4760 * before us during global cleanup. The extra ref is removed
4761 * by magic_killbackrefs() when tsv is being freed */
4762 }
4763 }
4764 if (AvFILLp(av) >= AvMAX(av)) {
4765 av_extend(av, AvFILLp(av)+1);
4766 }
4767 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
4768}
4769
4770/* delete a back-reference to ourselves from the backref magic associated
4771 * with the SV we point to.
4772 */
4773
4774STATIC void
4775S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
4776{
4777 dVAR;
4778 AV *av = NULL;
4779 SV **svp;
4780 I32 i;
4781
4782 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
4783 av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4784 /* We mustn't attempt to "fix up" the hash here by moving the
4785 backreference array back to the hv_aux structure, as that is stored
4786 in the main HvARRAY(), and hfreentries assumes that no-one
4787 reallocates HvARRAY() while it is running. */
4788 }
4789 if (!av) {
4790 const MAGIC *const mg
4791 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4792 if (mg)
4793 av = (AV *)mg->mg_obj;
4794 }
4795 if (!av) {
4796 if (PL_in_clean_all)
4797 return;
4798 Perl_croak(aTHX_ "panic: del_backref");
4799 }
4800
4801 if (SvIS_FREED(av))
4802 return;
4803
4804 svp = AvARRAY(av);
4805 /* We shouldn't be in here more than once, but for paranoia reasons lets
4806 not assume this. */
4807 for (i = AvFILLp(av); i >= 0; i--) {
4808 if (svp[i] == sv) {
4809 const SSize_t fill = AvFILLp(av);
4810 if (i != fill) {
4811 /* We weren't the last entry.
4812 An unordered list has this property that you can take the
4813 last element off the end to fill the hole, and it's still
4814 an unordered list :-)
4815 */
4816 svp[i] = svp[fill];
4817 }
4818 svp[fill] = NULL;
4819 AvFILLp(av) = fill - 1;
4820 }
4821 }
4822}
4823
4824int
4825Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
4826{
4827 SV **svp = AvARRAY(av);
4828
4829 PERL_UNUSED_ARG(sv);
4830
4831 /* Not sure why the av can get freed ahead of its sv, but somehow it does
4832 in ext/B/t/bytecode.t test 15 (involving print <DATA>) */
4833 if (svp && !SvIS_FREED(av)) {
4834 SV *const *const last = svp + AvFILLp(av);
4835
4836 while (svp <= last) {
4837 if (*svp) {
4838 SV *const referrer = *svp;
4839 if (SvWEAKREF(referrer)) {
4840 /* XXX Should we check that it hasn't changed? */
4841 SvRV_set(referrer, 0);
4842 SvOK_off(referrer);
4843 SvWEAKREF_off(referrer);
4844 SvSETMAGIC(referrer);
4845 } else if (SvTYPE(referrer) == SVt_PVGV ||
4846 SvTYPE(referrer) == SVt_PVLV) {
4847 /* You lookin' at me? */
4848 assert(GvSTASH(referrer));
4849 assert(GvSTASH(referrer) == (HV*)sv);
4850 GvSTASH(referrer) = 0;
4851 } else {
4852 Perl_croak(aTHX_
4853 "panic: magic_killbackrefs (flags=%"UVxf")",
4854 (UV)SvFLAGS(referrer));
4855 }
4856
4857 *svp = NULL;
4858 }
4859 svp++;
4860 }
4861 }
4862 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
4863 return 0;
4864}
4865
4866/*
4867=for apidoc sv_insert
4868
4869Inserts a string at the specified offset/length within the SV. Similar to
4870the Perl substr() function.
4871
4872=cut
4873*/
4874
4875void
4876Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
4877{
4878 dVAR;
4879 register char *big;
4880 register char *mid;
4881 register char *midend;
4882 register char *bigend;
4883 register I32 i;
4884 STRLEN curlen;
4885
4886
4887 if (!bigstr)
4888 Perl_croak(aTHX_ "Can't modify non-existent substring");
4889 SvPV_force(bigstr, curlen);
4890 (void)SvPOK_only_UTF8(bigstr);
4891 if (offset + len > curlen) {
4892 SvGROW(bigstr, offset+len+1);
4893 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4894 SvCUR_set(bigstr, offset+len);
4895 }
4896
4897 SvTAINT(bigstr);
4898 i = littlelen - len;
4899 if (i > 0) { /* string might grow */
4900 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4901 mid = big + offset + len;
4902 midend = bigend = big + SvCUR(bigstr);
4903 bigend += i;
4904 *bigend = '\0';
4905 while (midend > mid) /* shove everything down */
4906 *--bigend = *--midend;
4907 Move(little,big+offset,littlelen,char);
4908 SvCUR_set(bigstr, SvCUR(bigstr) + i);
4909 SvSETMAGIC(bigstr);
4910 return;
4911 }
4912 else if (i == 0) {
4913 Move(little,SvPVX(bigstr)+offset,len,char);
4914 SvSETMAGIC(bigstr);
4915 return;
4916 }
4917
4918 big = SvPVX(bigstr);
4919 mid = big + offset;
4920 midend = mid + len;
4921 bigend = big + SvCUR(bigstr);
4922
4923 if (midend > bigend)
4924 Perl_croak(aTHX_ "panic: sv_insert");
4925
4926 if (mid - big > bigend - midend) { /* faster to shorten from end */
4927 if (littlelen) {
4928 Move(little, mid, littlelen,char);
4929 mid += littlelen;
4930 }
4931 i = bigend - midend;
4932 if (i > 0) {
4933 Move(midend, mid, i,char);
4934 mid += i;
4935 }
4936 *mid = '\0';
4937 SvCUR_set(bigstr, mid - big);
4938 }
4939 else if ((i = mid - big)) { /* faster from front */
4940 midend -= littlelen;
4941 mid = midend;
4942 sv_chop(bigstr,midend-i);
4943 big += i;
4944 while (i--)
4945 *--midend = *--big;
4946 if (littlelen)
4947 Move(little, mid, littlelen,char);
4948 }
4949 else if (littlelen) {
4950 midend -= littlelen;
4951 sv_chop(bigstr,midend);
4952 Move(little,midend,littlelen,char);
4953 }
4954 else {
4955 sv_chop(bigstr,midend);
4956 }
4957 SvSETMAGIC(bigstr);
4958}
4959
4960/*
4961=for apidoc sv_replace
4962
4963Make the first argument a copy of the second, then delete the original.
4964The target SV physically takes over ownership of the body of the source SV
4965and inherits its flags; however, the target keeps any magic it owns,
4966and any magic in the source is discarded.
4967Note that this is a rather specialist SV copying operation; most of the
4968time you'll want to use C<sv_setsv> or one of its many macro front-ends.
4969
4970=cut
4971*/
4972
4973void
4974Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4975{
4976 dVAR;
4977 const U32 refcnt = SvREFCNT(sv);
4978 SV_CHECK_THINKFIRST_COW_DROP(sv);
4979 if (SvREFCNT(nsv) != 1) {
4980 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
4981 UVuf " != 1)", (UV) SvREFCNT(nsv));
4982 }
4983 if (SvMAGICAL(sv)) {
4984 if (SvMAGICAL(nsv))
4985 mg_free(nsv);
4986 else
4987 sv_upgrade(nsv, SVt_PVMG);
4988 SvMAGIC_set(nsv, SvMAGIC(sv));
4989 SvFLAGS(nsv) |= SvMAGICAL(sv);
4990 SvMAGICAL_off(sv);
4991 SvMAGIC_set(sv, NULL);
4992 }
4993 SvREFCNT(sv) = 0;
4994 sv_clear(sv);
4995 assert(!SvREFCNT(sv));
4996#ifdef DEBUG_LEAKING_SCALARS
4997 sv->sv_flags = nsv->sv_flags;
4998 sv->sv_any = nsv->sv_any;
4999 sv->sv_refcnt = nsv->sv_refcnt;
5000 sv->sv_u = nsv->sv_u;
5001#else
5002 StructCopy(nsv,sv,SV);
5003#endif
5004 /* Currently could join these into one piece of pointer arithmetic, but
5005 it would be unclear. */
5006 if(SvTYPE(sv) == SVt_IV)
5007 SvANY(sv)
5008 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5009 else if (SvTYPE(sv) == SVt_RV) {
5010 SvANY(sv) = &sv->sv_u.svu_rv;
5011 }
5012
5013
5014#ifdef PERL_OLD_COPY_ON_WRITE
5015 if (SvIsCOW_normal(nsv)) {
5016 /* We need to follow the pointers around the loop to make the
5017 previous SV point to sv, rather than nsv. */
5018 SV *next;
5019 SV *current = nsv;
5020 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5021 assert(next);
5022 current = next;
5023 assert(SvPVX_const(current) == SvPVX_const(nsv));
5024 }
5025 /* Make the SV before us point to the SV after us. */
5026 if (DEBUG_C_TEST) {
5027 PerlIO_printf(Perl_debug_log, "previous is\n");
5028 sv_dump(current);
5029 PerlIO_printf(Perl_debug_log,
5030 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5031 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5032 }
5033 SV_COW_NEXT_SV_SET(current, sv);
5034 }
5035#endif
5036 SvREFCNT(sv) = refcnt;
5037 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5038 SvREFCNT(nsv) = 0;
5039 del_SV(nsv);
5040}
5041
5042/*
5043=for apidoc sv_clear
5044
5045Clear an SV: call any destructors, free up any memory used by the body,
5046and free the body itself. The SV's head is I<not> freed, although
5047its type is set to all 1's so that it won't inadvertently be assumed
5048to be live during global destruction etc.
5049This function should only be called when REFCNT is zero. Most of the time
5050you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5051instead.
5052
5053=cut
5054*/
5055
5056void
5057Perl_sv_clear(pTHX_ register SV *sv)
5058{
5059 dVAR;
5060 const U32 type = SvTYPE(sv);
5061 const struct body_details *const sv_type_details
5062 = bodies_by_type + type;
5063 HV *stash;
5064
5065 assert(sv);
5066 assert(SvREFCNT(sv) == 0);
5067
5068 if (type <= SVt_IV) {
5069 /* See the comment in sv.h about the collusion between this early
5070 return and the overloading of the NULL and IV slots in the size
5071 table. */
5072 return;
5073 }
5074
5075 if (SvOBJECT(sv)) {
5076 if (PL_defstash) { /* Still have a symbol table? */
5077 dSP;
5078 HV* stash;
5079 do {
5080 CV* destructor;
5081 stash = SvSTASH(sv);
5082 destructor = StashHANDLER(stash,DESTROY);
5083 if (destructor) {
5084 SV* const tmpref = newRV(sv);
5085 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5086 ENTER;
5087 PUSHSTACKi(PERLSI_DESTROY);
5088 EXTEND(SP, 2);
5089 PUSHMARK(SP);
5090 PUSHs(tmpref);
5091 PUTBACK;
5092 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5093
5094
5095 POPSTACK;
5096 SPAGAIN;
5097 LEAVE;
5098 if(SvREFCNT(tmpref) < 2) {
5099 /* tmpref is not kept alive! */
5100 SvREFCNT(sv)--;
5101 SvRV_set(tmpref, NULL);
5102 SvROK_off(tmpref);
5103 }
5104 SvREFCNT_dec(tmpref);
5105 }
5106 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5107
5108
5109 if (SvREFCNT(sv)) {
5110 if (PL_in_clean_objs)
5111 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5112 HvNAME_get(stash));
5113 /* DESTROY gave object new lease on life */
5114 return;
5115 }
5116 }
5117
5118 if (SvOBJECT(sv)) {
5119 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5120 SvOBJECT_off(sv); /* Curse the object. */
5121 if (type != SVt_PVIO)
5122 --PL_sv_objcount; /* XXX Might want something more general */
5123 }
5124 }
5125 if (type >= SVt_PVMG) {
5126 if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5127 SvREFCNT_dec(SvOURSTASH(sv));
5128 } else if (SvMAGIC(sv))
5129 mg_free(sv);
5130 if (type == SVt_PVMG && SvPAD_TYPED(sv))
5131 SvREFCNT_dec(SvSTASH(sv));
5132 }
5133 switch (type) {
5134 /* case SVt_BIND: */
5135 case SVt_PVIO:
5136 if (IoIFP(sv) &&
5137 IoIFP(sv) != PerlIO_stdin() &&
5138 IoIFP(sv) != PerlIO_stdout() &&
5139 IoIFP(sv) != PerlIO_stderr())
5140 {
5141 io_close((IO*)sv, FALSE);
5142 }
5143 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5144 PerlDir_close(IoDIRP(sv));
5145 IoDIRP(sv) = (DIR*)NULL;
5146 Safefree(IoTOP_NAME(sv));
5147 Safefree(IoFMT_NAME(sv));
5148 Safefree(IoBOTTOM_NAME(sv));
5149 goto freescalar;
5150 case SVt_PVCV:
5151 case SVt_PVFM:
5152 cv_undef((CV*)sv);
5153 goto freescalar;
5154 case SVt_PVHV:
5155 Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
5156 hv_undef((HV*)sv);
5157 break;
5158 case SVt_PVAV:
5159 if (PL_comppad == (AV*)sv) {
5160 PL_comppad = NULL;
5161 PL_curpad = NULL;
5162 }
5163 av_undef((AV*)sv);
5164 break;
5165 case SVt_PVLV:
5166 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5167 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5168 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5169 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5170 }
5171 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5172 SvREFCNT_dec(LvTARG(sv));
5173 case SVt_PVGV:
5174 if (isGV_with_GP(sv)) {
5175 if(GvCVu((GV*)sv) && (stash = GvSTASH((GV*)sv)) && HvNAME_get(stash))
5176 mro_method_changed_in(stash);
5177 gp_free((GV*)sv);
5178 if (GvNAME_HEK(sv))
5179 unshare_hek(GvNAME_HEK(sv));
5180 /* If we're in a stash, we don't own a reference to it. However it does
5181 have a back reference to us, which needs to be cleared. */
5182 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
5183 sv_del_backref((SV*)stash, sv);
5184 }
5185 /* FIXME. There are probably more unreferenced pointers to SVs in the
5186 interpreter struct that we should check and tidy in a similar
5187 fashion to this: */
5188 if ((GV*)sv == PL_last_in_gv)
5189 PL_last_in_gv = NULL;
5190 case SVt_PVMG:
5191 case SVt_PVNV:
5192 case SVt_PVIV:
5193 freescalar:
5194 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5195 if (SvOOK(sv)) {
5196 SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv));
5197 /* Don't even bother with turning off the OOK flag. */
5198 }
5199 case SVt_PV:
5200 case SVt_RV:
5201 if (SvROK(sv)) {
5202 SV * const target = SvRV(sv);
5203 if (SvWEAKREF(sv))
5204 sv_del_backref(target, sv);
5205 else
5206 SvREFCNT_dec(target);
5207 }
5208#ifdef PERL_OLD_COPY_ON_WRITE
5209 else if (SvPVX_const(sv)) {
5210 if (SvIsCOW(sv)) {
5211 /* I believe I need to grab the global SV mutex here and
5212 then recheck the COW status. */
5213 if (DEBUG_C_TEST) {
5214 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
5215 sv_dump(sv);
5216 }
5217 if (SvLEN(sv)) {
5218 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5219 } else {
5220 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5221 }
5222
5223 /* And drop it here. */
5224 SvFAKE_off(sv);
5225 } else if (SvLEN(sv)) {
5226 Safefree(SvPVX_const(sv));
5227 }
5228 }
5229#else
5230 else if (SvPVX_const(sv) && SvLEN(sv))
5231 Safefree(SvPVX_mutable(sv));
5232 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5233 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5234 SvFAKE_off(sv);
5235 }
5236#endif
5237 break;
5238 case SVt_NV:
5239 break;
5240 }
5241
5242 SvFLAGS(sv) &= SVf_BREAK;
5243 SvFLAGS(sv) |= SVTYPEMASK;
5244
5245 if (sv_type_details->arena) {
5246 del_body(((char *)SvANY(sv) + sv_type_details->offset),
5247 &PL_body_roots[type]);
5248 }
5249 else if (sv_type_details->body_size) {
5250 my_safefree(SvANY(sv));
5251 }
5252}
5253
5254/*
5255=for apidoc sv_newref
5256
5257Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5258instead.
5259
5260=cut
5261*/
5262
5263SV *
5264Perl_sv_newref(pTHX_ SV *sv)
5265{
5266 PERL_UNUSED_CONTEXT;
5267 if (sv)
5268 (SvREFCNT(sv))++;
5269 return sv;
5270}
5271
5272/*
5273=for apidoc sv_free
5274
5275Decrement an SV's reference count, and if it drops to zero, call
5276C<sv_clear> to invoke destructors and free up any memory used by
5277the body; finally, deallocate the SV's head itself.
5278Normally called via a wrapper macro C<SvREFCNT_dec>.
5279
5280=cut
5281*/
5282
5283void
5284Perl_sv_free(pTHX_ SV *sv)
5285{
5286 dVAR;
5287 if (!sv)
5288 return;
5289 if (SvREFCNT(sv) == 0) {
5290 if (SvFLAGS(sv) & SVf_BREAK)
5291 /* this SV's refcnt has been artificially decremented to
5292 * trigger cleanup */
5293 return;
5294 if (PL_in_clean_all) /* All is fair */
5295 return;
5296 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5297 /* make sure SvREFCNT(sv)==0 happens very seldom */
5298 SvREFCNT(sv) = (~(U32)0)/2;
5299 return;
5300 }
5301 if (ckWARN_d(WARN_INTERNAL)) {
5302 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5303 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5304 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5305#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5306 Perl_dump_sv_child(aTHX_ sv);
5307#else
5308 #ifdef DEBUG_LEAKING_SCALARS
5309 sv_dump(sv);
5310 #endif
5311#endif
5312 }
5313 return;
5314 }
5315 if (--(SvREFCNT(sv)) > 0)
5316 return;
5317 Perl_sv_free2(aTHX_ sv);
5318}
5319
5320void
5321Perl_sv_free2(pTHX_ SV *sv)
5322{
5323 dVAR;
5324#ifdef DEBUGGING
5325 if (SvTEMP(sv)) {
5326 if (ckWARN_d(WARN_DEBUGGING))
5327 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5328 "Attempt to free temp prematurely: SV 0x%"UVxf
5329 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5330 return;
5331 }
5332#endif
5333 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5334 /* make sure SvREFCNT(sv)==0 happens very seldom */
5335 SvREFCNT(sv) = (~(U32)0)/2;
5336 return;
5337 }
5338 sv_clear(sv);
5339 if (! SvREFCNT(sv))
5340 del_SV(sv);
5341}
5342
5343/*
5344=for apidoc sv_len
5345
5346Returns the length of the string in the SV. Handles magic and type
5347coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5348
5349=cut
5350*/
5351
5352STRLEN
5353Perl_sv_len(pTHX_ register SV *sv)
5354{
5355 STRLEN len;
5356
5357 if (!sv)
5358 return 0;
5359
5360 if (SvGMAGICAL(sv))
5361 len = mg_length(sv);
5362 else
5363 (void)SvPV_const(sv, len);
5364 return len;
5365}
5366
5367/*
5368=for apidoc sv_len_utf8
5369
5370Returns the number of characters in the string in an SV, counting wide
5371UTF-8 bytes as a single character. Handles magic and type coercion.
5372
5373=cut
5374*/
5375
5376/*
5377 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
5378 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
5379 * (Note that the mg_len is not the length of the mg_ptr field.
5380 * This allows the cache to store the character length of the string without
5381 * needing to malloc() extra storage to attach to the mg_ptr.)
5382 *
5383 */
5384
5385STRLEN
5386Perl_sv_len_utf8(pTHX_ register SV *sv)
5387{
5388 if (!sv)
5389 return 0;
5390
5391 if (SvGMAGICAL(sv))
5392 return mg_length(sv);
5393 else
5394 {
5395 STRLEN len;
5396 const U8 *s = (U8*)SvPV_const(sv, len);
5397
5398 if (PL_utf8cache) {
5399 STRLEN ulen;
5400 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
5401
5402 if (mg && mg->mg_len != -1) {
5403 ulen = mg->mg_len;
5404 if (PL_utf8cache < 0) {
5405 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
5406 if (real != ulen) {
5407 /* Need to turn the assertions off otherwise we may
5408 recurse infinitely while printing error messages.
5409 */
5410 SAVEI8(PL_utf8cache);
5411 PL_utf8cache = 0;
5412 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
5413 " real %"UVuf" for %"SVf,
5414 (UV) ulen, (UV) real, SVfARG(sv));
5415 }
5416 }
5417 }
5418 else {
5419 ulen = Perl_utf8_length(aTHX_ s, s + len);
5420 if (!SvREADONLY(sv)) {
5421 if (!mg) {
5422 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
5423 &PL_vtbl_utf8, 0, 0);
5424 }
5425 assert(mg);
5426 mg->mg_len = ulen;
5427 }
5428 }
5429 return ulen;
5430 }
5431 return Perl_utf8_length(aTHX_ s, s + len);
5432 }
5433}
5434
5435/* Walk forwards to find the byte corresponding to the passed in UTF-8
5436 offset. */
5437static STRLEN
5438S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
5439 STRLEN uoffset)
5440{
5441 const U8 *s = start;
5442
5443 while (s < send && uoffset--)
5444 s += UTF8SKIP(s);
5445 if (s > send) {
5446 /* This is the existing behaviour. Possibly it should be a croak, as
5447 it's actually a bounds error */
5448 s = send;
5449 }
5450 return s - start;
5451}
5452
5453/* Given the length of the string in both bytes and UTF-8 characters, decide
5454 whether to walk forwards or backwards to find the byte corresponding to
5455 the passed in UTF-8 offset. */
5456static STRLEN
5457S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
5458 STRLEN uoffset, STRLEN uend)
5459{
5460 STRLEN backw = uend - uoffset;
5461 if (uoffset < 2 * backw) {
5462 /* The assumption is that going forwards is twice the speed of going
5463 forward (that's where the 2 * backw comes from).
5464 (The real figure of course depends on the UTF-8 data.) */
5465 return sv_pos_u2b_forwards(start, send, uoffset);
5466 }
5467
5468 while (backw--) {
5469 send--;
5470 while (UTF8_IS_CONTINUATION(*send))
5471 send--;
5472 }
5473 return send - start;
5474}
5475
5476/* For the string representation of the given scalar, find the byte
5477 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
5478 give another position in the string, *before* the sought offset, which
5479 (which is always true, as 0, 0 is a valid pair of positions), which should
5480 help reduce the amount of linear searching.
5481 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
5482 will be used to reduce the amount of linear searching. The cache will be
5483 created if necessary, and the found value offered to it for update. */
5484static STRLEN
5485S_sv_pos_u2b_cached(pTHX_ SV *sv, MAGIC **mgp, const U8 *const start,
5486 const U8 *const send, STRLEN uoffset,
5487 STRLEN uoffset0, STRLEN boffset0) {
5488 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
5489 bool found = FALSE;
5490
5491 assert (uoffset >= uoffset0);
5492
5493 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5494 && (*mgp || (*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
5495 if ((*mgp)->mg_ptr) {
5496 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
5497 if (cache[0] == uoffset) {
5498 /* An exact match. */
5499 return cache[1];
5500 }
5501 if (cache[2] == uoffset) {
5502 /* An exact match. */
5503 return cache[3];
5504 }
5505
5506 if (cache[0] < uoffset) {
5507 /* The cache already knows part of the way. */
5508 if (cache[0] > uoffset0) {
5509 /* The cache knows more than the passed in pair */
5510 uoffset0 = cache[0];
5511 boffset0 = cache[1];
5512 }
5513 if ((*mgp)->mg_len != -1) {
5514 /* And we know the end too. */
5515 boffset = boffset0
5516 + sv_pos_u2b_midway(start + boffset0, send,
5517 uoffset - uoffset0,
5518 (*mgp)->mg_len - uoffset0);
5519 } else {
5520 boffset = boffset0
5521 + sv_pos_u2b_forwards(start + boffset0,
5522 send, uoffset - uoffset0);
5523 }
5524 }
5525 else if (cache[2] < uoffset) {
5526 /* We're between the two cache entries. */
5527 if (cache[2] > uoffset0) {
5528 /* and the cache knows more than the passed in pair */
5529 uoffset0 = cache[2];
5530 boffset0 = cache[3];
5531 }
5532
5533 boffset = boffset0
5534 + sv_pos_u2b_midway(start + boffset0,
5535 start + cache[1],
5536 uoffset - uoffset0,
5537 cache[0] - uoffset0);
5538 } else {
5539 boffset = boffset0
5540 + sv_pos_u2b_midway(start + boffset0,
5541 start + cache[3],
5542 uoffset - uoffset0,
5543 cache[2] - uoffset0);
5544 }
5545 found = TRUE;
5546 }
5547 else if ((*mgp)->mg_len != -1) {
5548 /* If we can take advantage of a passed in offset, do so. */
5549 /* In fact, offset0 is either 0, or less than offset, so don't
5550 need to worry about the other possibility. */
5551 boffset = boffset0
5552 + sv_pos_u2b_midway(start + boffset0, send,
5553 uoffset - uoffset0,
5554 (*mgp)->mg_len - uoffset0);
5555 found = TRUE;
5556 }
5557 }
5558
5559 if (!found || PL_utf8cache < 0) {
5560 const STRLEN real_boffset
5561 = boffset0 + sv_pos_u2b_forwards(start + boffset0,
5562 send, uoffset - uoffset0);
5563
5564 if (found && PL_utf8cache < 0) {
5565 if (real_boffset != boffset) {
5566 /* Need to turn the assertions off otherwise we may recurse
5567 infinitely while printing error messages. */
5568 SAVEI8(PL_utf8cache);
5569 PL_utf8cache = 0;
5570 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
5571 " real %"UVuf" for %"SVf,
5572 (UV) boffset, (UV) real_boffset, SVfARG(sv));
5573 }
5574 }
5575 boffset = real_boffset;
5576 }
5577
5578 S_utf8_mg_pos_cache_update(aTHX_ sv, mgp, boffset, uoffset, send - start);
5579 return boffset;
5580}
5581
5582
5583/*
5584=for apidoc sv_pos_u2b
5585
5586Converts the value pointed to by offsetp from a count of UTF-8 chars from
5587the start of the string, to a count of the equivalent number of bytes; if
5588lenp is non-zero, it does the same to lenp, but this time starting from
5589the offset, rather than from the start of the string. Handles magic and
5590type coercion.
5591
5592=cut
5593*/
5594
5595/*
5596 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5597 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5598 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
5599 *
5600 */
5601
5602void
5603Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
5604{
5605 const U8 *start;
5606 STRLEN len;
5607
5608 if (!sv)
5609 return;
5610
5611 start = (U8*)SvPV_const(sv, len);
5612 if (len) {
5613 STRLEN uoffset = (STRLEN) *offsetp;
5614 const U8 * const send = start + len;
5615 MAGIC *mg = NULL;
5616 const STRLEN boffset = sv_pos_u2b_cached(sv, &mg, start, send,
5617 uoffset, 0, 0);
5618
5619 *offsetp = (I32) boffset;
5620
5621 if (lenp) {
5622 /* Convert the relative offset to absolute. */
5623 const STRLEN uoffset2 = uoffset + (STRLEN) *lenp;
5624 const STRLEN boffset2
5625 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
5626 uoffset, boffset) - boffset;
5627
5628 *lenp = boffset2;
5629 }
5630 }
5631 else {
5632 *offsetp = 0;
5633 if (lenp)
5634 *lenp = 0;
5635 }
5636
5637 return;
5638}
5639
5640/* Create and update the UTF8 magic offset cache, with the proffered utf8/
5641 byte length pairing. The (byte) length of the total SV is passed in too,
5642 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
5643 may not have updated SvCUR, so we can't rely on reading it directly.
5644
5645 The proffered utf8/byte length pairing isn't used if the cache already has
5646 two pairs, and swapping either for the proffered pair would increase the
5647 RMS of the intervals between known byte offsets.
5648
5649 The cache itself consists of 4 STRLEN values
5650 0: larger UTF-8 offset
5651 1: corresponding byte offset
5652 2: smaller UTF-8 offset
5653 3: corresponding byte offset
5654
5655 Unused cache pairs have the value 0, 0.
5656 Keeping the cache "backwards" means that the invariant of
5657 cache[0] >= cache[2] is maintained even with empty slots, which means that
5658 the code that uses it doesn't need to worry if only 1 entry has actually
5659 been set to non-zero. It also makes the "position beyond the end of the
5660 cache" logic much simpler, as the first slot is always the one to start
5661 from.
5662*/
5663static void
5664S_utf8_mg_pos_cache_update(pTHX_ SV *sv, MAGIC **mgp, STRLEN byte, STRLEN utf8,
5665 STRLEN blen)
5666{
5667 STRLEN *cache;
5668 if (SvREADONLY(sv))
5669 return;
5670
5671 if (!*mgp) {
5672 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
5673 0);
5674 (*mgp)->mg_len = -1;
5675 }
5676 assert(*mgp);
5677
5678 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
5679 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5680 (*mgp)->mg_ptr = (char *) cache;
5681 }
5682 assert(cache);
5683
5684 if (PL_utf8cache < 0) {
5685 const U8 *start = (const U8 *) SvPVX_const(sv);
5686 const STRLEN realutf8 = utf8_length(start, start + byte);
5687
5688 if (realutf8 != utf8) {
5689 /* Need to turn the assertions off otherwise we may recurse
5690 infinitely while printing error messages. */
5691 SAVEI8(PL_utf8cache);
5692 PL_utf8cache = 0;
5693 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
5694 " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
5695 }
5696 }
5697
5698 /* Cache is held with the later position first, to simplify the code
5699 that deals with unbounded ends. */
5700
5701 ASSERT_UTF8_CACHE(cache);
5702 if (cache[1] == 0) {
5703 /* Cache is totally empty */
5704 cache[0] = utf8;
5705 cache[1] = byte;
5706 } else if (cache[3] == 0) {
5707 if (byte > cache[1]) {
5708 /* New one is larger, so goes first. */
5709 cache[2] = cache[0];
5710 cache[3] = cache[1];
5711 cache[0] = utf8;
5712 cache[1] = byte;
5713 } else {
5714 cache[2] = utf8;
5715 cache[3] = byte;
5716 }
5717 } else {
5718#define THREEWAY_SQUARE(a,b,c,d) \
5719 ((float)((d) - (c))) * ((float)((d) - (c))) \
5720 + ((float)((c) - (b))) * ((float)((c) - (b))) \
5721 + ((float)((b) - (a))) * ((float)((b) - (a)))
5722
5723 /* Cache has 2 slots in use, and we know three potential pairs.
5724 Keep the two that give the lowest RMS distance. Do the
5725 calcualation in bytes simply because we always know the byte
5726 length. squareroot has the same ordering as the positive value,
5727 so don't bother with the actual square root. */
5728 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
5729 if (byte > cache[1]) {
5730 /* New position is after the existing pair of pairs. */
5731 const float keep_earlier
5732 = THREEWAY_SQUARE(0, cache[3], byte, blen);
5733 const float keep_later
5734 = THREEWAY_SQUARE(0, cache[1], byte, blen);
5735
5736 if (keep_later < keep_earlier) {
5737 if (keep_later < existing) {
5738 cache[2] = cache[0];
5739 cache[3] = cache[1];
5740 cache[0] = utf8;
5741 cache[1] = byte;
5742 }
5743 }
5744 else {
5745 if (keep_earlier < existing) {
5746 cache[0] = utf8;
5747 cache[1] = byte;
5748 }
5749 }
5750 }
5751 else if (byte > cache[3]) {
5752 /* New position is between the existing pair of pairs. */
5753 const float keep_earlier
5754 = THREEWAY_SQUARE(0, cache[3], byte, blen);
5755 const float keep_later
5756 = THREEWAY_SQUARE(0, byte, cache[1], blen);
5757
5758 if (keep_later < keep_earlier) {
5759 if (keep_later < existing) {
5760 cache[2] = utf8;
5761 cache[3] = byte;
5762 }
5763 }
5764 else {
5765 if (keep_earlier < existing) {
5766 cache[0] = utf8;
5767 cache[1] = byte;
5768 }
5769 }
5770 }
5771 else {
5772 /* New position is before the existing pair of pairs. */
5773 const float keep_earlier
5774 = THREEWAY_SQUARE(0, byte, cache[3], blen);
5775 const float keep_later
5776 = THREEWAY_SQUARE(0, byte, cache[1], blen);
5777
5778 if (keep_later < keep_earlier) {
5779 if (keep_later < existing) {
5780 cache[2] = utf8;
5781 cache[3] = byte;
5782 }
5783 }
5784 else {
5785 if (keep_earlier < existing) {
5786 cache[0] = cache[2];
5787 cache[1] = cache[3];
5788 cache[2] = utf8;
5789 cache[3] = byte;
5790 }
5791 }
5792 }
5793 }
5794 ASSERT_UTF8_CACHE(cache);
5795}
5796
5797/* We already know all of the way, now we may be able to walk back. The same
5798 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
5799 backward is half the speed of walking forward. */
5800static STRLEN
5801S_sv_pos_b2u_midway(pTHX_ const U8 *s, const U8 *const target, const U8 *end,
5802 STRLEN endu)
5803{
5804 const STRLEN forw = target - s;
5805 STRLEN backw = end - target;
5806
5807 if (forw < 2 * backw) {
5808 return utf8_length(s, target);
5809 }
5810
5811 while (end > target) {
5812 end--;
5813 while (UTF8_IS_CONTINUATION(*end)) {
5814 end--;
5815 }
5816 endu--;
5817 }
5818 return endu;
5819}
5820
5821/*
5822=for apidoc sv_pos_b2u
5823
5824Converts the value pointed to by offsetp from a count of bytes from the
5825start of the string, to a count of the equivalent number of UTF-8 chars.
5826Handles magic and type coercion.
5827
5828=cut
5829*/
5830
5831/*
5832 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5833 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5834 * byte offsets.
5835 *
5836 */
5837void
5838Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
5839{
5840 const U8* s;
5841 const STRLEN byte = *offsetp;
5842 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
5843 STRLEN blen;
5844 MAGIC* mg = NULL;
5845 const U8* send;
5846 bool found = FALSE;
5847
5848 if (!sv)
5849 return;
5850
5851 s = (const U8*)SvPV_const(sv, blen);
5852
5853 if (blen < byte)
5854 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
5855
5856 send = s + byte;
5857
5858 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5859 && (mg = mg_find(sv, PERL_MAGIC_utf8))) {
5860 if (mg->mg_ptr) {
5861 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
5862 if (cache[1] == byte) {
5863 /* An exact match. */
5864 *offsetp = cache[0];
5865 return;
5866 }
5867 if (cache[3] == byte) {
5868 /* An exact match. */
5869 *offsetp = cache[2];
5870 return;
5871 }
5872
5873 if (cache[1] < byte) {
5874 /* We already know part of the way. */
5875 if (mg->mg_len != -1) {
5876 /* Actually, we know the end too. */
5877 len = cache[0]
5878 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
5879 s + blen, mg->mg_len - cache[0]);
5880 } else {
5881 len = cache[0] + utf8_length(s + cache[1], send);
5882 }
5883 }
5884 else if (cache[3] < byte) {
5885 /* We're between the two cached pairs, so we do the calculation
5886 offset by the byte/utf-8 positions for the earlier pair,
5887 then add the utf-8 characters from the string start to
5888 there. */
5889 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
5890 s + cache[1], cache[0] - cache[2])
5891 + cache[2];
5892
5893 }
5894 else { /* cache[3] > byte */
5895 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
5896 cache[2]);
5897
5898 }
5899 ASSERT_UTF8_CACHE(cache);
5900 found = TRUE;
5901 } else if (mg->mg_len != -1) {
5902 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
5903 found = TRUE;
5904 }
5905 }
5906 if (!found || PL_utf8cache < 0) {
5907 const STRLEN real_len = utf8_length(s, send);
5908
5909 if (found && PL_utf8cache < 0) {
5910 if (len != real_len) {
5911 /* Need to turn the assertions off otherwise we may recurse
5912 infinitely while printing error messages. */
5913 SAVEI8(PL_utf8cache);
5914 PL_utf8cache = 0;
5915 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
5916 " real %"UVuf" for %"SVf,
5917 (UV) len, (UV) real_len, SVfARG(sv));
5918 }
5919 }
5920 len = real_len;
5921 }
5922 *offsetp = len;
5923
5924 S_utf8_mg_pos_cache_update(aTHX_ sv, &mg, byte, len, blen);
5925}
5926
5927/*
5928=for apidoc sv_eq
5929
5930Returns a boolean indicating whether the strings in the two SVs are
5931identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5932coerce its args to strings if necessary.
5933
5934=cut
5935*/
5936
5937I32
5938Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
5939{
5940 dVAR;
5941 const char *pv1;
5942 STRLEN cur1;
5943 const char *pv2;
5944 STRLEN cur2;
5945 I32 eq = 0;
5946 char *tpv = NULL;
5947 SV* svrecode = NULL;
5948
5949 if (!sv1) {
5950 pv1 = "";
5951 cur1 = 0;
5952 }
5953 else {
5954 /* if pv1 and pv2 are the same, second SvPV_const call may
5955 * invalidate pv1, so we may need to make a copy */
5956 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
5957 pv1 = SvPV_const(sv1, cur1);
5958 sv1 = sv_2mortal(newSVpvn(pv1, cur1));
5959 if (SvUTF8(sv2)) SvUTF8_on(sv1);
5960 }
5961 pv1 = SvPV_const(sv1, cur1);
5962 }
5963
5964 if (!sv2){
5965 pv2 = "";
5966 cur2 = 0;
5967 }
5968 else
5969 pv2 = SvPV_const(sv2, cur2);
5970
5971 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5972 /* Differing utf8ness.
5973 * Do not UTF8size the comparands as a side-effect. */
5974 if (PL_encoding) {
5975 if (SvUTF8(sv1)) {
5976 svrecode = newSVpvn(pv2, cur2);
5977 sv_recode_to_utf8(svrecode, PL_encoding);
5978 pv2 = SvPV_const(svrecode, cur2);
5979 }
5980 else {
5981 svrecode = newSVpvn(pv1, cur1);
5982 sv_recode_to_utf8(svrecode, PL_encoding);
5983 pv1 = SvPV_const(svrecode, cur1);
5984 }
5985 /* Now both are in UTF-8. */
5986 if (cur1 != cur2) {
5987 SvREFCNT_dec(svrecode);
5988 return FALSE;
5989 }
5990 }
5991 else {
5992 bool is_utf8 = TRUE;
5993
5994 if (SvUTF8(sv1)) {
5995 /* sv1 is the UTF-8 one,
5996 * if is equal it must be downgrade-able */
5997 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
5998 &cur1, &is_utf8);
5999 if (pv != pv1)
6000 pv1 = tpv = pv;
6001 }
6002 else {
6003 /* sv2 is the UTF-8 one,
6004 * if is equal it must be downgrade-able */
6005 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
6006 &cur2, &is_utf8);
6007 if (pv != pv2)
6008 pv2 = tpv = pv;
6009 }
6010 if (is_utf8) {
6011 /* Downgrade not possible - cannot be eq */
6012 assert (tpv == 0);
6013 return FALSE;
6014 }
6015 }
6016 }
6017
6018 if (cur1 == cur2)
6019 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6020
6021 SvREFCNT_dec(svrecode);
6022 if (tpv)
6023 Safefree(tpv);
6024
6025 return eq;
6026}
6027
6028/*
6029=for apidoc sv_cmp
6030
6031Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6032string in C<sv1> is less than, equal to, or greater than the string in
6033C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6034coerce its args to strings if necessary. See also C<sv_cmp_locale>.
6035
6036=cut
6037*/
6038
6039I32
6040Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
6041{
6042 dVAR;
6043 STRLEN cur1, cur2;
6044 const char *pv1, *pv2;
6045 char *tpv = NULL;
6046 I32 cmp;
6047 SV *svrecode = NULL;
6048
6049 if (!sv1) {
6050 pv1 = "";
6051 cur1 = 0;
6052 }
6053 else
6054 pv1 = SvPV_const(sv1, cur1);
6055
6056 if (!sv2) {
6057 pv2 = "";
6058 cur2 = 0;
6059 }
6060 else
6061 pv2 = SvPV_const(sv2, cur2);
6062
6063 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6064 /* Differing utf8ness.
6065 * Do not UTF8size the comparands as a side-effect. */
6066 if (SvUTF8(sv1)) {
6067 if (PL_encoding) {
6068 svrecode = newSVpvn(pv2, cur2);
6069 sv_recode_to_utf8(svrecode, PL_encoding);
6070 pv2 = SvPV_const(svrecode, cur2);
6071 }
6072 else {
6073 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6074 }
6075 }
6076 else {
6077 if (PL_encoding) {
6078 svrecode = newSVpvn(pv1, cur1);
6079 sv_recode_to_utf8(svrecode, PL_encoding);
6080 pv1 = SvPV_const(svrecode, cur1);
6081 }
6082 else {
6083 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6084 }
6085 }
6086 }
6087
6088 if (!cur1) {
6089 cmp = cur2 ? -1 : 0;
6090 } else if (!cur2) {
6091 cmp = 1;
6092 } else {
6093 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6094
6095 if (retval) {
6096 cmp = retval < 0 ? -1 : 1;
6097 } else if (cur1 == cur2) {
6098 cmp = 0;
6099 } else {
6100 cmp = cur1 < cur2 ? -1 : 1;
6101 }
6102 }
6103
6104 SvREFCNT_dec(svrecode);
6105 if (tpv)
6106 Safefree(tpv);
6107
6108 return cmp;
6109}
6110
6111/*
6112=for apidoc sv_cmp_locale
6113
6114Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6115'use bytes' aware, handles get magic, and will coerce its args to strings
6116if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
6117
6118=cut
6119*/
6120
6121I32
6122Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
6123{
6124 dVAR;
6125#ifdef USE_LOCALE_COLLATE
6126
6127 char *pv1, *pv2;
6128 STRLEN len1, len2;
6129 I32 retval;
6130
6131 if (PL_collation_standard)
6132 goto raw_compare;
6133
6134 len1 = 0;
6135 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6136 len2 = 0;
6137 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6138
6139 if (!pv1 || !len1) {
6140 if (pv2 && len2)
6141 return -1;
6142 else
6143 goto raw_compare;
6144 }
6145 else {
6146 if (!pv2 || !len2)
6147 return 1;
6148 }
6149
6150 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6151
6152 if (retval)
6153 return retval < 0 ? -1 : 1;
6154
6155 /*
6156 * When the result of collation is equality, that doesn't mean
6157 * that there are no differences -- some locales exclude some
6158 * characters from consideration. So to avoid false equalities,
6159 * we use the raw string as a tiebreaker.
6160 */
6161
6162 raw_compare:
6163 /*FALLTHROUGH*/
6164
6165#endif /* USE_LOCALE_COLLATE */
6166
6167 return sv_cmp(sv1, sv2);
6168}
6169
6170
6171#ifdef USE_LOCALE_COLLATE
6172
6173/*
6174=for apidoc sv_collxfrm
6175
6176Add Collate Transform magic to an SV if it doesn't already have it.
6177
6178Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6179scalar data of the variable, but transformed to such a format that a normal
6180memory comparison can be used to compare the data according to the locale
6181settings.
6182
6183=cut
6184*/
6185
6186char *
6187Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
6188{
6189 dVAR;
6190 MAGIC *mg;
6191
6192 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6193 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6194 const char *s;
6195 char *xf;
6196 STRLEN len, xlen;
6197
6198 if (mg)
6199 Safefree(mg->mg_ptr);
6200 s = SvPV_const(sv, len);
6201 if ((xf = mem_collxfrm(s, len, &xlen))) {
6202 if (SvREADONLY(sv)) {
6203 SAVEFREEPV(xf);
6204 *nxp = xlen;
6205 return xf + sizeof(PL_collation_ix);
6206 }
6207 if (! mg) {
6208#ifdef PERL_OLD_COPY_ON_WRITE
6209 if (SvIsCOW(sv))
6210 sv_force_normal_flags(sv, 0);
6211#endif
6212 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6213 0, 0);
6214 assert(mg);
6215 }
6216 mg->mg_ptr = xf;
6217 mg->mg_len = xlen;
6218 }
6219 else {
6220 if (mg) {
6221 mg->mg_ptr = NULL;
6222 mg->mg_len = -1;
6223 }
6224 }
6225 }
6226 if (mg && mg->mg_ptr) {
6227 *nxp = mg->mg_len;
6228 return mg->mg_ptr + sizeof(PL_collation_ix);
6229 }
6230 else {
6231 *nxp = 0;
6232 return NULL;
6233 }
6234}
6235
6236#endif /* USE_LOCALE_COLLATE */
6237
6238/*
6239=for apidoc sv_gets
6240
6241Get a line from the filehandle and store it into the SV, optionally
6242appending to the currently-stored string.
6243
6244=cut
6245*/
6246
6247char *
6248Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
6249{
6250 dVAR;
6251 const char *rsptr;
6252 STRLEN rslen;
6253 register STDCHAR rslast;
6254 register STDCHAR *bp;
6255 register I32 cnt;
6256 I32 i = 0;
6257 I32 rspara = 0;
6258
6259 if (SvTHINKFIRST(sv))
6260 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6261 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6262 from <>.
6263 However, perlbench says it's slower, because the existing swipe code
6264 is faster than copy on write.
6265 Swings and roundabouts. */
6266 SvUPGRADE(sv, SVt_PV);
6267
6268 SvSCREAM_off(sv);
6269
6270 if (append) {
6271 if (PerlIO_isutf8(fp)) {
6272 if (!SvUTF8(sv)) {
6273 sv_utf8_upgrade_nomg(sv);
6274 sv_pos_u2b(sv,&append,0);
6275 }
6276 } else if (SvUTF8(sv)) {
6277 SV * const tsv = newSV(0);
6278 sv_gets(tsv, fp, 0);
6279 sv_utf8_upgrade_nomg(tsv);
6280 SvCUR_set(sv,append);
6281 sv_catsv(sv,tsv);
6282 sv_free(tsv);
6283 goto return_string_or_null;
6284 }
6285 }
6286
6287 SvPOK_only(sv);
6288 if (PerlIO_isutf8(fp))
6289 SvUTF8_on(sv);
6290
6291 if (IN_PERL_COMPILETIME) {
6292 /* we always read code in line mode */
6293 rsptr = "\n";
6294 rslen = 1;
6295 }
6296 else if (RsSNARF(PL_rs)) {
6297 /* If it is a regular disk file use size from stat() as estimate
6298 of amount we are going to read -- may result in mallocing
6299 more memory than we really need if the layers below reduce
6300 the size we read (e.g. CRLF or a gzip layer).
6301 */
6302 Stat_t st;
6303 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
6304 const Off_t offset = PerlIO_tell(fp);
6305 if (offset != (Off_t) -1 && st.st_size + append > offset) {
6306 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6307 }
6308 }
6309 rsptr = NULL;
6310 rslen = 0;
6311 }
6312 else if (RsRECORD(PL_rs)) {
6313 I32 bytesread;
6314 char *buffer;
6315 U32 recsize;
6316
6317 /* Grab the size of the record we're getting */
6318 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
6319 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6320 /* Go yank in */
6321#ifdef VMS
6322 /* VMS wants read instead of fread, because fread doesn't respect */
6323 /* RMS record boundaries. This is not necessarily a good thing to be */
6324 /* doing, but we've got no other real choice - except avoid stdio
6325 as implementation - perhaps write a :vms layer ?
6326 */
6327 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6328#else
6329 bytesread = PerlIO_read(fp, buffer, recsize);
6330#endif
6331 if (bytesread < 0)
6332 bytesread = 0;
6333 SvCUR_set(sv, bytesread += append);
6334 buffer[bytesread] = '\0';
6335 goto return_string_or_null;
6336 }
6337 else if (RsPARA(PL_rs)) {
6338 rsptr = "\n\n";
6339 rslen = 2;
6340 rspara = 1;
6341 }
6342 else {
6343 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6344 if (PerlIO_isutf8(fp)) {
6345 rsptr = SvPVutf8(PL_rs, rslen);
6346 }
6347 else {
6348 if (SvUTF8(PL_rs)) {
6349 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6350 Perl_croak(aTHX_ "Wide character in $/");
6351 }
6352 }
6353 rsptr = SvPV_const(PL_rs, rslen);
6354 }
6355 }
6356
6357 rslast = rslen ? rsptr[rslen - 1] : '\0';
6358
6359 if (rspara) { /* have to do this both before and after */
6360 do { /* to make sure file boundaries work right */
6361 if (PerlIO_eof(fp))
6362 return 0;
6363 i = PerlIO_getc(fp);
6364 if (i != '\n') {
6365 if (i == -1)
6366 return 0;
6367 PerlIO_ungetc(fp,i);
6368 break;
6369 }
6370 } while (i != EOF);
6371 }
6372
6373 /* See if we know enough about I/O mechanism to cheat it ! */
6374
6375 /* This used to be #ifdef test - it is made run-time test for ease
6376 of abstracting out stdio interface. One call should be cheap
6377 enough here - and may even be a macro allowing compile
6378 time optimization.
6379 */
6380
6381 if (PerlIO_fast_gets(fp)) {
6382
6383 /*
6384 * We're going to steal some values from the stdio struct
6385 * and put EVERYTHING in the innermost loop into registers.
6386 */
6387 register STDCHAR *ptr;
6388 STRLEN bpx;
6389 I32 shortbuffered;
6390
6391#if defined(VMS) && defined(PERLIO_IS_STDIO)
6392 /* An ungetc()d char is handled separately from the regular
6393 * buffer, so we getc() it back out and stuff it in the buffer.
6394 */
6395 i = PerlIO_getc(fp);
6396 if (i == EOF) return 0;
6397 *(--((*fp)->_ptr)) = (unsigned char) i;
6398 (*fp)->_cnt++;
6399#endif
6400
6401 /* Here is some breathtakingly efficient cheating */
6402
6403 cnt = PerlIO_get_cnt(fp); /* get count into register */
6404 /* make sure we have the room */
6405 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6406 /* Not room for all of it
6407 if we are looking for a separator and room for some
6408 */
6409 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6410 /* just process what we have room for */
6411 shortbuffered = cnt - SvLEN(sv) + append + 1;
6412 cnt -= shortbuffered;
6413 }
6414 else {
6415 shortbuffered = 0;
6416 /* remember that cnt can be negative */
6417 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6418 }
6419 }
6420 else
6421 shortbuffered = 0;
6422 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
6423 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6424 DEBUG_P(PerlIO_printf(Perl_debug_log,
6425 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6426 DEBUG_P(PerlIO_printf(Perl_debug_log,
6427 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6428 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6429 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6430 for (;;) {
6431 screamer:
6432 if (cnt > 0) {
6433 if (rslen) {
6434 while (cnt > 0) { /* this | eat */
6435 cnt--;
6436 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6437 goto thats_all_folks; /* screams | sed :-) */
6438 }
6439 }
6440 else {
6441 Copy(ptr, bp, cnt, char); /* this | eat */
6442 bp += cnt; /* screams | dust */
6443 ptr += cnt; /* louder | sed :-) */
6444 cnt = 0;
6445 }
6446 }
6447
6448 if (shortbuffered) { /* oh well, must extend */
6449 cnt = shortbuffered;
6450 shortbuffered = 0;
6451 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6452 SvCUR_set(sv, bpx);
6453 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6454 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6455 continue;
6456 }
6457
6458 DEBUG_P(PerlIO_printf(Perl_debug_log,
6459 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6460 PTR2UV(ptr),(long)cnt));
6461 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6462#if 0
6463 DEBUG_P(PerlIO_printf(Perl_debug_log,
6464 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6465 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6466 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6467#endif
6468 /* This used to call 'filbuf' in stdio form, but as that behaves like
6469 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6470 another abstraction. */
6471 i = PerlIO_getc(fp); /* get more characters */
6472#if 0
6473 DEBUG_P(PerlIO_printf(Perl_debug_log,
6474 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6475 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6476 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6477#endif
6478 cnt = PerlIO_get_cnt(fp);
6479 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
6480 DEBUG_P(PerlIO_printf(Perl_debug_log,
6481 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6482
6483 if (i == EOF) /* all done for ever? */
6484 goto thats_really_all_folks;
6485
6486 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6487 SvCUR_set(sv, bpx);
6488 SvGROW(sv, bpx + cnt + 2);
6489 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6490
6491 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
6492
6493 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
6494 goto thats_all_folks;
6495 }
6496
6497thats_all_folks:
6498 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6499 memNE((char*)bp - rslen, rsptr, rslen))
6500 goto screamer; /* go back to the fray */
6501thats_really_all_folks:
6502 if (shortbuffered)
6503 cnt += shortbuffered;
6504 DEBUG_P(PerlIO_printf(Perl_debug_log,
6505 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6506 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
6507 DEBUG_P(PerlIO_printf(Perl_debug_log,
6508 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6509 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6510 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6511 *bp = '\0';
6512 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
6513 DEBUG_P(PerlIO_printf(Perl_debug_log,
6514 "Screamer: done, len=%ld, string=|%.*s|\n",
6515 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6516 }
6517 else
6518 {
6519 /*The big, slow, and stupid way. */
6520#ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
6521 STDCHAR *buf = NULL;
6522 Newx(buf, 8192, STDCHAR);
6523 assert(buf);
6524#else
6525 STDCHAR buf[8192];
6526#endif
6527
6528screamer2:
6529 if (rslen) {
6530 register const STDCHAR * const bpe = buf + sizeof(buf);
6531 bp = buf;
6532 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6533 ; /* keep reading */
6534 cnt = bp - buf;
6535 }
6536 else {
6537 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6538 /* Accomodate broken VAXC compiler, which applies U8 cast to
6539 * both args of ?: operator, causing EOF to change into 255
6540 */
6541 if (cnt > 0)
6542 i = (U8)buf[cnt - 1];
6543 else
6544 i = EOF;
6545 }
6546
6547 if (cnt < 0)
6548 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6549 if (append)
6550 sv_catpvn(sv, (char *) buf, cnt);
6551 else
6552 sv_setpvn(sv, (char *) buf, cnt);
6553
6554 if (i != EOF && /* joy */
6555 (!rslen ||
6556 SvCUR(sv) < rslen ||
6557 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6558 {
6559 append = -1;
6560 /*
6561 * If we're reading from a TTY and we get a short read,
6562 * indicating that the user hit his EOF character, we need
6563 * to notice it now, because if we try to read from the TTY
6564 * again, the EOF condition will disappear.
6565 *
6566 * The comparison of cnt to sizeof(buf) is an optimization
6567 * that prevents unnecessary calls to feof().
6568 *
6569 * - jik 9/25/96
6570 */
6571 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
6572 goto screamer2;
6573 }
6574
6575#ifdef USE_HEAP_INSTEAD_OF_STACK
6576 Safefree(buf);
6577#endif
6578 }
6579
6580 if (rspara) { /* have to do this both before and after */
6581 while (i != EOF) { /* to make sure file boundaries work right */
6582 i = PerlIO_getc(fp);
6583 if (i != '\n') {
6584 PerlIO_ungetc(fp,i);
6585 break;
6586 }
6587 }
6588 }
6589
6590return_string_or_null:
6591 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
6592}
6593
6594/*
6595=for apidoc sv_inc
6596
6597Auto-increment of the value in the SV, doing string to numeric conversion
6598if necessary. Handles 'get' magic.
6599
6600=cut
6601*/
6602
6603void
6604Perl_sv_inc(pTHX_ register SV *sv)
6605{
6606 dVAR;
6607 register char *d;
6608 int flags;
6609
6610 if (!sv)
6611 return;
6612 SvGETMAGIC(sv);
6613 if (SvTHINKFIRST(sv)) {
6614 if (SvIsCOW(sv))
6615 sv_force_normal_flags(sv, 0);
6616 if (SvREADONLY(sv)) {
6617 if (IN_PERL_RUNTIME)
6618 Perl_croak(aTHX_ PL_no_modify);
6619 }
6620 if (SvROK(sv)) {
6621 IV i;
6622 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6623 return;
6624 i = PTR2IV(SvRV(sv));
6625 sv_unref(sv);
6626 sv_setiv(sv, i);
6627 }
6628 }
6629 flags = SvFLAGS(sv);
6630 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6631 /* It's (privately or publicly) a float, but not tested as an
6632 integer, so test it to see. */
6633 (void) SvIV(sv);
6634 flags = SvFLAGS(sv);
6635 }
6636 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6637 /* It's publicly an integer, or privately an integer-not-float */
6638#ifdef PERL_PRESERVE_IVUV
6639 oops_its_int:
6640#endif
6641 if (SvIsUV(sv)) {
6642 if (SvUVX(sv) == UV_MAX)
6643 sv_setnv(sv, UV_MAX_P1);
6644 else
6645 (void)SvIOK_only_UV(sv);
6646 SvUV_set(sv, SvUVX(sv) + 1);
6647 } else {
6648 if (SvIVX(sv) == IV_MAX)
6649 sv_setuv(sv, (UV)IV_MAX + 1);
6650 else {
6651 (void)SvIOK_only(sv);
6652 SvIV_set(sv, SvIVX(sv) + 1);
6653 }
6654 }
6655 return;
6656 }
6657 if (flags & SVp_NOK) {
6658 (void)SvNOK_only(sv);
6659 SvNV_set(sv, SvNVX(sv) + 1.0);
6660 return;
6661 }
6662
6663 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
6664 if ((flags & SVTYPEMASK) < SVt_PVIV)
6665 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
6666 (void)SvIOK_only(sv);
6667 SvIV_set(sv, 1);
6668 return;
6669 }
6670 d = SvPVX(sv);
6671 while (isALPHA(*d)) d++;
6672 while (isDIGIT(*d)) d++;
6673 if (*d) {
6674#ifdef PERL_PRESERVE_IVUV
6675 /* Got to punt this as an integer if needs be, but we don't issue
6676 warnings. Probably ought to make the sv_iv_please() that does
6677 the conversion if possible, and silently. */
6678 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6679 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6680 /* Need to try really hard to see if it's an integer.
6681 9.22337203685478e+18 is an integer.
6682 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6683 so $a="9.22337203685478e+18"; $a+0; $a++
6684 needs to be the same as $a="9.22337203685478e+18"; $a++
6685 or we go insane. */
6686
6687 (void) sv_2iv(sv);
6688 if (SvIOK(sv))
6689 goto oops_its_int;
6690
6691 /* sv_2iv *should* have made this an NV */
6692 if (flags & SVp_NOK) {
6693 (void)SvNOK_only(sv);
6694 SvNV_set(sv, SvNVX(sv) + 1.0);
6695 return;
6696 }
6697 /* I don't think we can get here. Maybe I should assert this
6698 And if we do get here I suspect that sv_setnv will croak. NWC
6699 Fall through. */
6700#if defined(USE_LONG_DOUBLE)
6701 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
6702 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6703#else
6704 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6705 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6706#endif
6707 }
6708#endif /* PERL_PRESERVE_IVUV */
6709 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
6710 return;
6711 }
6712 d--;
6713 while (d >= SvPVX_const(sv)) {
6714 if (isDIGIT(*d)) {
6715 if (++*d <= '9')
6716 return;
6717 *(d--) = '0';
6718 }
6719 else {
6720#ifdef EBCDIC
6721 /* MKS: The original code here died if letters weren't consecutive.
6722 * at least it didn't have to worry about non-C locales. The
6723 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
6724 * arranged in order (although not consecutively) and that only
6725 * [A-Za-z] are accepted by isALPHA in the C locale.
6726 */
6727 if (*d != 'z' && *d != 'Z') {
6728 do { ++*d; } while (!isALPHA(*d));
6729 return;
6730 }
6731 *(d--) -= 'z' - 'a';
6732#else
6733 ++*d;
6734 if (isALPHA(*d))
6735 return;
6736 *(d--) -= 'z' - 'a' + 1;
6737#endif
6738 }
6739 }
6740 /* oh,oh, the number grew */
6741 SvGROW(sv, SvCUR(sv) + 2);
6742 SvCUR_set(sv, SvCUR(sv) + 1);
6743 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
6744 *d = d[-1];
6745 if (isDIGIT(d[1]))
6746 *d = '1';
6747 else
6748 *d = d[1];
6749}
6750
6751/*
6752=for apidoc sv_dec
6753
6754Auto-decrement of the value in the SV, doing string to numeric conversion
6755if necessary. Handles 'get' magic.
6756
6757=cut
6758*/
6759
6760void
6761Perl_sv_dec(pTHX_ register SV *sv)
6762{
6763 dVAR;
6764 int flags;
6765
6766 if (!sv)
6767 return;
6768 SvGETMAGIC(sv);
6769 if (SvTHINKFIRST(sv)) {
6770 if (SvIsCOW(sv))
6771 sv_force_normal_flags(sv, 0);
6772 if (SvREADONLY(sv)) {
6773 if (IN_PERL_RUNTIME)
6774 Perl_croak(aTHX_ PL_no_modify);
6775 }
6776 if (SvROK(sv)) {
6777 IV i;
6778 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6779 return;
6780 i = PTR2IV(SvRV(sv));
6781 sv_unref(sv);
6782 sv_setiv(sv, i);
6783 }
6784 }
6785 /* Unlike sv_inc we don't have to worry about string-never-numbers
6786 and keeping them magic. But we mustn't warn on punting */
6787 flags = SvFLAGS(sv);
6788 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6789 /* It's publicly an integer, or privately an integer-not-float */
6790#ifdef PERL_PRESERVE_IVUV
6791 oops_its_int:
6792#endif
6793 if (SvIsUV(sv)) {
6794 if (SvUVX(sv) == 0) {
6795 (void)SvIOK_only(sv);
6796 SvIV_set(sv, -1);
6797 }
6798 else {
6799 (void)SvIOK_only_UV(sv);
6800 SvUV_set(sv, SvUVX(sv) - 1);
6801 }
6802 } else {
6803 if (SvIVX(sv) == IV_MIN)
6804 sv_setnv(sv, (NV)IV_MIN - 1.0);
6805 else {
6806 (void)SvIOK_only(sv);
6807 SvIV_set(sv, SvIVX(sv) - 1);
6808 }
6809 }
6810 return;
6811 }
6812 if (flags & SVp_NOK) {
6813 SvNV_set(sv, SvNVX(sv) - 1.0);
6814 (void)SvNOK_only(sv);
6815 return;
6816 }
6817 if (!(flags & SVp_POK)) {
6818 if ((flags & SVTYPEMASK) < SVt_PVIV)
6819 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
6820 SvIV_set(sv, -1);
6821 (void)SvIOK_only(sv);
6822 return;
6823 }
6824#ifdef PERL_PRESERVE_IVUV
6825 {
6826 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6827 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6828 /* Need to try really hard to see if it's an integer.
6829 9.22337203685478e+18 is an integer.
6830 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6831 so $a="9.22337203685478e+18"; $a+0; $a--
6832 needs to be the same as $a="9.22337203685478e+18"; $a--
6833 or we go insane. */
6834
6835 (void) sv_2iv(sv);
6836 if (SvIOK(sv))
6837 goto oops_its_int;
6838
6839 /* sv_2iv *should* have made this an NV */
6840 if (flags & SVp_NOK) {
6841 (void)SvNOK_only(sv);
6842 SvNV_set(sv, SvNVX(sv) - 1.0);
6843 return;
6844 }
6845 /* I don't think we can get here. Maybe I should assert this
6846 And if we do get here I suspect that sv_setnv will croak. NWC
6847 Fall through. */
6848#if defined(USE_LONG_DOUBLE)
6849 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
6850 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6851#else
6852 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6853 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6854#endif
6855 }
6856 }
6857#endif /* PERL_PRESERVE_IVUV */
6858 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
6859}
6860
6861/*
6862=for apidoc sv_mortalcopy
6863
6864Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
6865The new SV is marked as mortal. It will be destroyed "soon", either by an
6866explicit call to FREETMPS, or by an implicit call at places such as
6867statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
6868
6869=cut
6870*/
6871
6872/* Make a string that will exist for the duration of the expression
6873 * evaluation. Actually, it may have to last longer than that, but
6874 * hopefully we won't free it until it has been assigned to a
6875 * permanent location. */
6876
6877SV *
6878Perl_sv_mortalcopy(pTHX_ SV *oldstr)
6879{
6880 dVAR;
6881 register SV *sv;
6882
6883 new_SV(sv);
6884 sv_setsv(sv,oldstr);
6885 EXTEND_MORTAL(1);
6886 PL_tmps_stack[++PL_tmps_ix] = sv;
6887 SvTEMP_on(sv);
6888 return sv;
6889}
6890
6891/*
6892=for apidoc sv_newmortal
6893
6894Creates a new null SV which is mortal. The reference count of the SV is
6895set to 1. It will be destroyed "soon", either by an explicit call to
6896FREETMPS, or by an implicit call at places such as statement boundaries.
6897See also C<sv_mortalcopy> and C<sv_2mortal>.
6898
6899=cut
6900*/
6901
6902SV *
6903Perl_sv_newmortal(pTHX)
6904{
6905 dVAR;
6906 register SV *sv;
6907
6908 new_SV(sv);
6909 SvFLAGS(sv) = SVs_TEMP;
6910 EXTEND_MORTAL(1);
6911 PL_tmps_stack[++PL_tmps_ix] = sv;
6912 return sv;
6913}
6914
6915/*
6916=for apidoc sv_2mortal
6917
6918Marks an existing SV as mortal. The SV will be destroyed "soon", either
6919by an explicit call to FREETMPS, or by an implicit call at places such as
6920statement boundaries. SvTEMP() is turned on which means that the SV's
6921string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
6922and C<sv_mortalcopy>.
6923
6924=cut
6925*/
6926
6927SV *
6928Perl_sv_2mortal(pTHX_ register SV *sv)
6929{
6930 dVAR;
6931 if (!sv)
6932 return NULL;
6933 if (SvREADONLY(sv) && SvIMMORTAL(sv))
6934 return sv;
6935 EXTEND_MORTAL(1);
6936 PL_tmps_stack[++PL_tmps_ix] = sv;
6937 SvTEMP_on(sv);
6938 return sv;
6939}
6940
6941/*
6942=for apidoc newSVpv
6943
6944Creates a new SV and copies a string into it. The reference count for the
6945SV is set to 1. If C<len> is zero, Perl will compute the length using
6946strlen(). For efficiency, consider using C<newSVpvn> instead.
6947
6948=cut
6949*/
6950
6951SV *
6952Perl_newSVpv(pTHX_ const char *s, STRLEN len)
6953{
6954 dVAR;
6955 register SV *sv;
6956
6957 new_SV(sv);
6958 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
6959 return sv;
6960}
6961
6962/*
6963=for apidoc newSVpvn
6964
6965Creates a new SV and copies a string into it. The reference count for the
6966SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
6967string. You are responsible for ensuring that the source string is at least
6968C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
6969
6970=cut
6971*/
6972
6973SV *
6974Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
6975{
6976 dVAR;
6977 register SV *sv;
6978
6979 new_SV(sv);
6980 sv_setpvn(sv,s,len);
6981 return sv;
6982}
6983
6984
6985/*
6986=for apidoc newSVhek
6987
6988Creates a new SV from the hash key structure. It will generate scalars that
6989point to the shared string table where possible. Returns a new (undefined)
6990SV if the hek is NULL.
6991
6992=cut
6993*/
6994
6995SV *
6996Perl_newSVhek(pTHX_ const HEK *hek)
6997{
6998 dVAR;
6999 if (!hek) {
7000 SV *sv;
7001
7002 new_SV(sv);
7003 return sv;
7004 }
7005
7006 if (HEK_LEN(hek) == HEf_SVKEY) {
7007 return newSVsv(*(SV**)HEK_KEY(hek));
7008 } else {
7009 const int flags = HEK_FLAGS(hek);
7010 if (flags & HVhek_WASUTF8) {
7011 /* Trouble :-)
7012 Andreas would like keys he put in as utf8 to come back as utf8
7013 */
7014 STRLEN utf8_len = HEK_LEN(hek);
7015 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7016 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
7017
7018 SvUTF8_on (sv);
7019 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7020 return sv;
7021 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
7022 /* We don't have a pointer to the hv, so we have to replicate the
7023 flag into every HEK. This hv is using custom a hasing
7024 algorithm. Hence we can't return a shared string scalar, as
7025 that would contain the (wrong) hash value, and might get passed
7026 into an hv routine with a regular hash.
7027 Similarly, a hash that isn't using shared hash keys has to have
7028 the flag in every key so that we know not to try to call
7029 share_hek_kek on it. */
7030
7031 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
7032 if (HEK_UTF8(hek))
7033 SvUTF8_on (sv);
7034 return sv;
7035 }
7036 /* This will be overwhelminly the most common case. */
7037 {
7038 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7039 more efficient than sharepvn(). */
7040 SV *sv;
7041
7042 new_SV(sv);
7043 sv_upgrade(sv, SVt_PV);
7044 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7045 SvCUR_set(sv, HEK_LEN(hek));
7046 SvLEN_set(sv, 0);
7047 SvREADONLY_on(sv);
7048 SvFAKE_on(sv);
7049 SvPOK_on(sv);
7050 if (HEK_UTF8(hek))
7051 SvUTF8_on(sv);
7052 return sv;
7053 }
7054 }
7055}
7056
7057/*
7058=for apidoc newSVpvn_share
7059
7060Creates a new SV with its SvPVX_const pointing to a shared string in the string
7061table. If the string does not already exist in the table, it is created
7062first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7063value is used; otherwise the hash is computed. The string's hash can be later
7064be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7065that as the string table is used for shared hash keys these strings will have
7066SvPVX_const == HeKEY and hash lookup will avoid string compare.
7067
7068=cut
7069*/
7070
7071SV *
7072Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7073{
7074 dVAR;
7075 register SV *sv;
7076 bool is_utf8 = FALSE;
7077 const char *const orig_src = src;
7078
7079 if (len < 0) {
7080 STRLEN tmplen = -len;
7081 is_utf8 = TRUE;
7082 /* See the note in hv.c:hv_fetch() --jhi */
7083 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7084 len = tmplen;
7085 }
7086 if (!hash)
7087 PERL_HASH(hash, src, len);
7088 new_SV(sv);
7089 sv_upgrade(sv, SVt_PV);
7090 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7091 SvCUR_set(sv, len);
7092 SvLEN_set(sv, 0);
7093 SvREADONLY_on(sv);
7094 SvFAKE_on(sv);
7095 SvPOK_on(sv);
7096 if (is_utf8)
7097 SvUTF8_on(sv);
7098 if (src != orig_src)
7099 Safefree(src);
7100 return sv;
7101}
7102
7103
7104#if defined(PERL_IMPLICIT_CONTEXT)
7105
7106/* pTHX_ magic can't cope with varargs, so this is a no-context
7107 * version of the main function, (which may itself be aliased to us).
7108 * Don't access this version directly.
7109 */
7110
7111SV *
7112Perl_newSVpvf_nocontext(const char* pat, ...)
7113{
7114 dTHX;
7115 register SV *sv;
7116 va_list args;
7117 va_start(args, pat);
7118 sv = vnewSVpvf(pat, &args);
7119 va_end(args);
7120 return sv;
7121}
7122#endif
7123
7124/*
7125=for apidoc newSVpvf
7126
7127Creates a new SV and initializes it with the string formatted like
7128C<sprintf>.
7129
7130=cut
7131*/
7132
7133SV *
7134Perl_newSVpvf(pTHX_ const char* pat, ...)
7135{
7136 register SV *sv;
7137 va_list args;
7138 va_start(args, pat);
7139 sv = vnewSVpvf(pat, &args);
7140 va_end(args);
7141 return sv;
7142}
7143
7144/* backend for newSVpvf() and newSVpvf_nocontext() */
7145
7146SV *
7147Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7148{
7149 dVAR;
7150 register SV *sv;
7151 new_SV(sv);
7152 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
7153 return sv;
7154}
7155
7156/*
7157=for apidoc newSVnv
7158
7159Creates a new SV and copies a floating point value into it.
7160The reference count for the SV is set to 1.
7161
7162=cut
7163*/
7164
7165SV *
7166Perl_newSVnv(pTHX_ NV n)
7167{
7168 dVAR;
7169 register SV *sv;
7170
7171 new_SV(sv);
7172 sv_setnv(sv,n);
7173 return sv;
7174}
7175
7176/*
7177=for apidoc newSViv
7178
7179Creates a new SV and copies an integer into it. The reference count for the
7180SV is set to 1.
7181
7182=cut
7183*/
7184
7185SV *
7186Perl_newSViv(pTHX_ IV i)
7187{
7188 dVAR;
7189 register SV *sv;
7190
7191 new_SV(sv);
7192 sv_setiv(sv,i);
7193 return sv;
7194}
7195
7196/*
7197=for apidoc newSVuv
7198
7199Creates a new SV and copies an unsigned integer into it.
7200The reference count for the SV is set to 1.
7201
7202=cut
7203*/
7204
7205SV *
7206Perl_newSVuv(pTHX_ UV u)
7207{
7208 dVAR;
7209 register SV *sv;
7210
7211 new_SV(sv);
7212 sv_setuv(sv,u);
7213 return sv;
7214}
7215
7216/*
7217=for apidoc newSV_type
7218
7219Creates a new SV, of the type specificied. The reference count for the new SV
7220is set to 1.
7221
7222=cut
7223*/
7224
7225SV *
7226Perl_newSV_type(pTHX_ svtype type)
7227{
7228 register SV *sv;
7229
7230 new_SV(sv);
7231 sv_upgrade(sv, type);
7232 return sv;
7233}
7234
7235/*
7236=for apidoc newRV_noinc
7237
7238Creates an RV wrapper for an SV. The reference count for the original
7239SV is B<not> incremented.
7240
7241=cut
7242*/
7243
7244SV *
7245Perl_newRV_noinc(pTHX_ SV *tmpRef)
7246{
7247 dVAR;
7248 register SV *sv = newSV_type(SVt_RV);
7249 SvTEMP_off(tmpRef);
7250 SvRV_set(sv, tmpRef);
7251 SvROK_on(sv);
7252 return sv;
7253}
7254
7255/* newRV_inc is the official function name to use now.
7256 * newRV_inc is in fact #defined to newRV in sv.h
7257 */
7258
7259SV *
7260Perl_newRV(pTHX_ SV *sv)
7261{
7262 dVAR;
7263 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
7264}
7265
7266/*
7267=for apidoc newSVsv
7268
7269Creates a new SV which is an exact duplicate of the original SV.
7270(Uses C<sv_setsv>).
7271
7272=cut
7273*/
7274
7275SV *
7276Perl_newSVsv(pTHX_ register SV *old)
7277{
7278 dVAR;
7279 register SV *sv;
7280
7281 if (!old)
7282 return NULL;
7283 if (SvTYPE(old) == SVTYPEMASK) {
7284 if (ckWARN_d(WARN_INTERNAL))
7285 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7286 return NULL;
7287 }
7288 new_SV(sv);
7289 /* SV_GMAGIC is the default for sv_setv()
7290 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7291 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7292 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7293 return sv;
7294}
7295
7296/*
7297=for apidoc sv_reset
7298
7299Underlying implementation for the C<reset> Perl function.
7300Note that the perl-level function is vaguely deprecated.
7301
7302=cut
7303*/
7304
7305void
7306Perl_sv_reset(pTHX_ register const char *s, HV *stash)
7307{
7308 dVAR;
7309 char todo[PERL_UCHAR_MAX+1];
7310
7311 if (!stash)
7312 return;
7313
7314 if (!*s) { /* reset ?? searches */
7315 MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
7316 if (mg) {
7317 const U32 count = mg->mg_len / sizeof(PMOP**);
7318 PMOP **pmp = (PMOP**) mg->mg_ptr;
7319 PMOP *const *const end = pmp + count;
7320
7321 while (pmp < end) {
7322#ifdef USE_ITHREADS
7323 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
7324#else
7325 (*pmp)->op_pmflags &= ~PMf_USED;
7326#endif
7327 ++pmp;
7328 }
7329 }
7330 return;
7331 }
7332
7333 /* reset variables */
7334
7335 if (!HvARRAY(stash))
7336 return;
7337
7338 Zero(todo, 256, char);
7339 while (*s) {
7340 I32 max;
7341 I32 i = (unsigned char)*s;
7342 if (s[1] == '-') {
7343 s += 2;
7344 }
7345 max = (unsigned char)*s++;
7346 for ( ; i <= max; i++) {
7347 todo[i] = 1;
7348 }
7349 for (i = 0; i <= (I32) HvMAX(stash); i++) {
7350 HE *entry;
7351 for (entry = HvARRAY(stash)[i];
7352 entry;
7353 entry = HeNEXT(entry))
7354 {
7355 register GV *gv;
7356 register SV *sv;
7357
7358 if (!todo[(U8)*HeKEY(entry)])
7359 continue;
7360 gv = (GV*)HeVAL(entry);
7361 sv = GvSV(gv);
7362 if (sv) {
7363 if (SvTHINKFIRST(sv)) {
7364 if (!SvREADONLY(sv) && SvROK(sv))
7365 sv_unref(sv);
7366 /* XXX Is this continue a bug? Why should THINKFIRST
7367 exempt us from resetting arrays and hashes? */
7368 continue;
7369 }
7370 SvOK_off(sv);
7371 if (SvTYPE(sv) >= SVt_PV) {
7372 SvCUR_set(sv, 0);
7373 if (SvPVX_const(sv) != NULL)
7374 *SvPVX(sv) = '\0';
7375 SvTAINT(sv);
7376 }
7377 }
7378 if (GvAV(gv)) {
7379 av_clear(GvAV(gv));
7380 }
7381 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7382#if defined(VMS)
7383 Perl_die(aTHX_ "Can't reset %%ENV on this system");
7384#else /* ! VMS */
7385 hv_clear(GvHV(gv));
7386# if defined(USE_ENVIRON_ARRAY)
7387 if (gv == PL_envgv)
7388 my_clearenv();
7389# endif /* USE_ENVIRON_ARRAY */
7390#endif /* VMS */
7391 }
7392 }
7393 }
7394 }
7395}
7396
7397/*
7398=for apidoc sv_2io
7399
7400Using various gambits, try to get an IO from an SV: the IO slot if its a
7401GV; or the recursive result if we're an RV; or the IO slot of the symbol
7402named after the PV if we're a string.
7403
7404=cut
7405*/
7406
7407IO*
7408Perl_sv_2io(pTHX_ SV *sv)
7409{
7410 IO* io;
7411 GV* gv;
7412
7413 switch (SvTYPE(sv)) {
7414 case SVt_PVIO:
7415 io = (IO*)sv;
7416 break;
7417 case SVt_PVGV:
7418 gv = (GV*)sv;
7419 io = GvIO(gv);
7420 if (!io)
7421 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7422 break;
7423 default:
7424 if (!SvOK(sv))
7425 Perl_croak(aTHX_ PL_no_usym, "filehandle");
7426 if (SvROK(sv))
7427 return sv_2io(SvRV(sv));
7428 gv = gv_fetchsv(sv, 0, SVt_PVIO);
7429 if (gv)
7430 io = GvIO(gv);
7431 else
7432 io = 0;
7433 if (!io)
7434 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
7435 break;
7436 }
7437 return io;
7438}
7439
7440/*
7441=for apidoc sv_2cv
7442
7443Using various gambits, try to get a CV from an SV; in addition, try if
7444possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7445The flags in C<lref> are passed to sv_fetchsv.
7446
7447=cut
7448*/
7449
7450CV *
7451Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
7452{
7453 dVAR;
7454 GV *gv = NULL;
7455 CV *cv = NULL;
7456
7457 if (!sv) {
7458 *st = NULL;
7459 *gvp = NULL;
7460 return NULL;
7461 }
7462 switch (SvTYPE(sv)) {
7463 case SVt_PVCV:
7464 *st = CvSTASH(sv);
7465 *gvp = NULL;
7466 return (CV*)sv;
7467 case SVt_PVHV:
7468 case SVt_PVAV:
7469 *st = NULL;
7470 *gvp = NULL;
7471 return NULL;
7472 case SVt_PVGV:
7473 gv = (GV*)sv;
7474 *gvp = gv;
7475 *st = GvESTASH(gv);
7476 goto fix_gv;
7477
7478 default:
7479 SvGETMAGIC(sv);
7480 if (SvROK(sv)) {
7481 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
7482 tryAMAGICunDEREF(to_cv);
7483
7484 sv = SvRV(sv);
7485 if (SvTYPE(sv) == SVt_PVCV) {
7486 cv = (CV*)sv;
7487 *gvp = NULL;
7488 *st = CvSTASH(cv);
7489 return cv;
7490 }
7491 else if(isGV(sv))
7492 gv = (GV*)sv;
7493 else
7494 Perl_croak(aTHX_ "Not a subroutine reference");
7495 }
7496 else if (isGV(sv))
7497 gv = (GV*)sv;
7498 else
7499 gv = gv_fetchsv(sv, lref, SVt_PVCV);
7500 *gvp = gv;
7501 if (!gv) {
7502 *st = NULL;
7503 return NULL;
7504 }
7505 /* Some flags to gv_fetchsv mean don't really create the GV */
7506 if (SvTYPE(gv) != SVt_PVGV) {
7507 *st = NULL;
7508 return NULL;
7509 }
7510 *st = GvESTASH(gv);
7511 fix_gv:
7512 if (lref && !GvCVu(gv)) {
7513 SV *tmpsv;
7514 ENTER;
7515 tmpsv = newSV(0);
7516 gv_efullname3(tmpsv, gv, NULL);
7517 /* XXX this is probably not what they think they're getting.
7518 * It has the same effect as "sub name;", i.e. just a forward
7519 * declaration! */
7520 newSUB(start_subparse(FALSE, 0),
7521 newSVOP(OP_CONST, 0, tmpsv),
7522 NULL, NULL);
7523 LEAVE;
7524 if (!GvCVu(gv))
7525 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7526 SVfARG(sv));
7527 }
7528 return GvCVu(gv);
7529 }
7530}
7531
7532/*
7533=for apidoc sv_true
7534
7535Returns true if the SV has a true value by Perl's rules.
7536Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7537instead use an in-line version.
7538
7539=cut
7540*/
7541
7542I32
7543Perl_sv_true(pTHX_ register SV *sv)
7544{
7545 if (!sv)
7546 return 0;
7547 if (SvPOK(sv)) {
7548 register const XPV* const tXpv = (XPV*)SvANY(sv);
7549 if (tXpv &&
7550 (tXpv->xpv_cur > 1 ||
7551 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
7552 return 1;
7553 else
7554 return 0;
7555 }
7556 else {
7557 if (SvIOK(sv))
7558 return SvIVX(sv) != 0;
7559 else {
7560 if (SvNOK(sv))
7561 return SvNVX(sv) != 0.0;
7562 else
7563 return sv_2bool(sv);
7564 }
7565 }
7566}
7567
7568/*
7569=for apidoc sv_pvn_force
7570
7571Get a sensible string out of the SV somehow.
7572A private implementation of the C<SvPV_force> macro for compilers which
7573can't cope with complex macro expressions. Always use the macro instead.
7574
7575=for apidoc sv_pvn_force_flags
7576
7577Get a sensible string out of the SV somehow.
7578If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7579appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7580implemented in terms of this function.
7581You normally want to use the various wrapper macros instead: see
7582C<SvPV_force> and C<SvPV_force_nomg>
7583
7584=cut
7585*/
7586
7587char *
7588Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7589{
7590 dVAR;
7591 if (SvTHINKFIRST(sv) && !SvROK(sv))
7592 sv_force_normal_flags(sv, 0);
7593
7594 if (SvPOK(sv)) {
7595 if (lp)
7596 *lp = SvCUR(sv);
7597 }
7598 else {
7599 char *s;
7600 STRLEN len;
7601
7602 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
7603 const char * const ref = sv_reftype(sv,0);
7604 if (PL_op)
7605 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
7606 ref, OP_NAME(PL_op));
7607 else
7608 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
7609 }
7610 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
7611 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
7612 OP_NAME(PL_op));
7613 s = sv_2pv_flags(sv, &len, flags);
7614 if (lp)
7615 *lp = len;
7616
7617 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
7618 if (SvROK(sv))
7619 sv_unref(sv);
7620 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
7621 SvGROW(sv, len + 1);
7622 Move(s,SvPVX(sv),len,char);
7623 SvCUR_set(sv, len);
7624 SvPVX(sv)[len] = '\0';
7625 }
7626 if (!SvPOK(sv)) {
7627 SvPOK_on(sv); /* validate pointer */
7628 SvTAINT(sv);
7629 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
7630 PTR2UV(sv),SvPVX_const(sv)));
7631 }
7632 }
7633 return SvPVX_mutable(sv);
7634}
7635
7636/*
7637=for apidoc sv_pvbyten_force
7638
7639The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
7640
7641=cut
7642*/
7643
7644char *
7645Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7646{
7647 sv_pvn_force(sv,lp);
7648 sv_utf8_downgrade(sv,0);
7649 *lp = SvCUR(sv);
7650 return SvPVX(sv);
7651}
7652
7653/*
7654=for apidoc sv_pvutf8n_force
7655
7656The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
7657
7658=cut
7659*/
7660
7661char *
7662Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7663{
7664 sv_pvn_force(sv,lp);
7665 sv_utf8_upgrade(sv);
7666 *lp = SvCUR(sv);
7667 return SvPVX(sv);
7668}
7669
7670/*
7671=for apidoc sv_reftype
7672
7673Returns a string describing what the SV is a reference to.
7674
7675=cut
7676*/
7677
7678const char *
7679Perl_sv_reftype(pTHX_ const SV *sv, int ob)
7680{
7681 /* The fact that I don't need to downcast to char * everywhere, only in ?:
7682 inside return suggests a const propagation bug in g++. */
7683 if (ob && SvOBJECT(sv)) {
7684 char * const name = HvNAME_get(SvSTASH(sv));
7685 return name ? name : (char *) "__ANON__";
7686 }
7687 else {
7688 switch (SvTYPE(sv)) {
7689 case SVt_NULL:
7690 case SVt_IV:
7691 case SVt_NV:
7692 case SVt_RV:
7693 case SVt_PV:
7694 case SVt_PVIV:
7695 case SVt_PVNV:
7696 case SVt_PVMG:
7697 if (SvVOK(sv))
7698 return "VSTRING";
7699 if (SvROK(sv))
7700 return "REF";
7701 else
7702 return "SCALAR";
7703
7704 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
7705 /* tied lvalues should appear to be
7706 * scalars for backwards compatitbility */
7707 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
7708 ? "SCALAR" : "LVALUE");
7709 case SVt_PVAV: return "ARRAY";
7710 case SVt_PVHV: return "HASH";
7711 case SVt_PVCV: return "CODE";
7712 case SVt_PVGV: return "GLOB";
7713 case SVt_PVFM: return "FORMAT";
7714 case SVt_PVIO: return "IO";
7715 case SVt_BIND: return "BIND";
7716 default: return "UNKNOWN";
7717 }
7718 }
7719}
7720
7721/*
7722=for apidoc sv_isobject
7723
7724Returns a boolean indicating whether the SV is an RV pointing to a blessed
7725object. If the SV is not an RV, or if the object is not blessed, then this
7726will return false.
7727
7728=cut
7729*/
7730
7731int
7732Perl_sv_isobject(pTHX_ SV *sv)
7733{
7734 if (!sv)
7735 return 0;
7736 SvGETMAGIC(sv);
7737 if (!SvROK(sv))
7738 return 0;
7739 sv = (SV*)SvRV(sv);
7740 if (!SvOBJECT(sv))
7741 return 0;
7742 return 1;
7743}
7744
7745/*
7746=for apidoc sv_isa
7747
7748Returns a boolean indicating whether the SV is blessed into the specified
7749class. This does not check for subtypes; use C<sv_derived_from> to verify
7750an inheritance relationship.
7751
7752=cut
7753*/
7754
7755int
7756Perl_sv_isa(pTHX_ SV *sv, const char *name)
7757{
7758 const char *hvname;
7759 if (!sv)
7760 return 0;
7761 SvGETMAGIC(sv);
7762 if (!SvROK(sv))
7763 return 0;
7764 sv = (SV*)SvRV(sv);
7765 if (!SvOBJECT(sv))
7766 return 0;
7767 hvname = HvNAME_get(SvSTASH(sv));
7768 if (!hvname)
7769 return 0;
7770
7771 return strEQ(hvname, name);
7772}
7773
7774/*
7775=for apidoc newSVrv
7776
7777Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7778it will be upgraded to one. If C<classname> is non-null then the new SV will
7779be blessed in the specified package. The new SV is returned and its
7780reference count is 1.
7781
7782=cut
7783*/
7784
7785SV*
7786Perl_newSVrv(pTHX_ SV *rv, const char *classname)
7787{
7788 dVAR;
7789 SV *sv;
7790
7791 new_SV(sv);
7792
7793 SV_CHECK_THINKFIRST_COW_DROP(rv);
7794 (void)SvAMAGIC_off(rv);
7795
7796 if (SvTYPE(rv) >= SVt_PVMG) {
7797 const U32 refcnt = SvREFCNT(rv);
7798 SvREFCNT(rv) = 0;
7799 sv_clear(rv);
7800 SvFLAGS(rv) = 0;
7801 SvREFCNT(rv) = refcnt;
7802
7803 sv_upgrade(rv, SVt_RV);
7804 } else if (SvROK(rv)) {
7805 SvREFCNT_dec(SvRV(rv));
7806 } else if (SvTYPE(rv) < SVt_RV)
7807 sv_upgrade(rv, SVt_RV);
7808 else if (SvTYPE(rv) > SVt_RV) {
7809 SvPV_free(rv);
7810 SvCUR_set(rv, 0);
7811 SvLEN_set(rv, 0);
7812 }
7813
7814 SvOK_off(rv);
7815 SvRV_set(rv, sv);
7816 SvROK_on(rv);
7817
7818 if (classname) {
7819 HV* const stash = gv_stashpv(classname, GV_ADD);
7820 (void)sv_bless(rv, stash);
7821 }
7822 return sv;
7823}
7824
7825/*
7826=for apidoc sv_setref_pv
7827
7828Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7829argument will be upgraded to an RV. That RV will be modified to point to
7830the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7831into the SV. The C<classname> argument indicates the package for the
7832blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
7833will have a reference count of 1, and the RV will be returned.
7834
7835Do not use with other Perl types such as HV, AV, SV, CV, because those
7836objects will become corrupted by the pointer copy process.
7837
7838Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7839
7840=cut
7841*/
7842
7843SV*
7844Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
7845{
7846 dVAR;
7847 if (!pv) {
7848 sv_setsv(rv, &PL_sv_undef);
7849 SvSETMAGIC(rv);
7850 }
7851 else
7852 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
7853 return rv;
7854}
7855
7856/*
7857=for apidoc sv_setref_iv
7858
7859Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7860argument will be upgraded to an RV. That RV will be modified to point to
7861the new SV. The C<classname> argument indicates the package for the
7862blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
7863will have a reference count of 1, and the RV will be returned.
7864
7865=cut
7866*/
7867
7868SV*
7869Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
7870{
7871 sv_setiv(newSVrv(rv,classname), iv);
7872 return rv;
7873}
7874
7875/*
7876=for apidoc sv_setref_uv
7877
7878Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7879argument will be upgraded to an RV. That RV will be modified to point to
7880the new SV. The C<classname> argument indicates the package for the
7881blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
7882will have a reference count of 1, and the RV will be returned.
7883
7884=cut
7885*/
7886
7887SV*
7888Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7889{
7890 sv_setuv(newSVrv(rv,classname), uv);
7891 return rv;
7892}
7893
7894/*
7895=for apidoc sv_setref_nv
7896
7897Copies a double into a new SV, optionally blessing the SV. The C<rv>
7898argument will be upgraded to an RV. That RV will be modified to point to
7899the new SV. The C<classname> argument indicates the package for the
7900blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
7901will have a reference count of 1, and the RV will be returned.
7902
7903=cut
7904*/
7905
7906SV*
7907Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
7908{
7909 sv_setnv(newSVrv(rv,classname), nv);
7910 return rv;
7911}
7912
7913/*
7914=for apidoc sv_setref_pvn
7915
7916Copies a string into a new SV, optionally blessing the SV. The length of the
7917string must be specified with C<n>. The C<rv> argument will be upgraded to
7918an RV. That RV will be modified to point to the new SV. The C<classname>
7919argument indicates the package for the blessing. Set C<classname> to
7920C<NULL> to avoid the blessing. The new SV will have a reference count
7921of 1, and the RV will be returned.
7922
7923Note that C<sv_setref_pv> copies the pointer while this copies the string.
7924
7925=cut
7926*/
7927
7928SV*
7929Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, const char *pv, STRLEN n)
7930{
7931 sv_setpvn(newSVrv(rv,classname), pv, n);
7932 return rv;
7933}
7934
7935/*
7936=for apidoc sv_bless
7937
7938Blesses an SV into a specified package. The SV must be an RV. The package
7939must be designated by its stash (see C<gv_stashpv()>). The reference count
7940of the SV is unaffected.
7941
7942=cut
7943*/
7944
7945SV*
7946Perl_sv_bless(pTHX_ SV *sv, HV *stash)
7947{
7948 dVAR;
7949 SV *tmpRef;
7950 if (!SvROK(sv))
7951 Perl_croak(aTHX_ "Can't bless non-reference value");
7952 tmpRef = SvRV(sv);
7953 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
7954 if (SvREADONLY(tmpRef))
7955 Perl_croak(aTHX_ PL_no_modify);
7956 if (SvOBJECT(tmpRef)) {
7957 if (SvTYPE(tmpRef) != SVt_PVIO)
7958 --PL_sv_objcount;
7959 SvREFCNT_dec(SvSTASH(tmpRef));
7960 }
7961 }
7962 SvOBJECT_on(tmpRef);
7963 if (SvTYPE(tmpRef) != SVt_PVIO)
7964 ++PL_sv_objcount;
7965 SvUPGRADE(tmpRef, SVt_PVMG);
7966 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc_simple(stash));
7967
7968 if (Gv_AMG(stash))
7969 SvAMAGIC_on(sv);
7970 else
7971 (void)SvAMAGIC_off(sv);
7972
7973 if(SvSMAGICAL(tmpRef))
7974 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
7975 mg_set(tmpRef);
7976
7977
7978
7979 return sv;
7980}
7981
7982/* Downgrades a PVGV to a PVMG.
7983 */
7984
7985STATIC void
7986S_sv_unglob(pTHX_ SV *sv)
7987{
7988 dVAR;
7989 void *xpvmg;
7990 HV *stash;
7991 SV * const temp = sv_newmortal();
7992
7993 assert(SvTYPE(sv) == SVt_PVGV);
7994 SvFAKE_off(sv);
7995 gv_efullname3(temp, (GV *) sv, "*");
7996
7997 if (GvGP(sv)) {
7998 if(GvCVu((GV*)sv) && (stash = GvSTASH((GV*)sv)) && HvNAME_get(stash))
7999 mro_method_changed_in(stash);
8000 gp_free((GV*)sv);
8001 }
8002 if (GvSTASH(sv)) {
8003 sv_del_backref((SV*)GvSTASH(sv), sv);
8004 GvSTASH(sv) = NULL;
8005 }
8006 GvMULTI_off(sv);
8007 if (GvNAME_HEK(sv)) {
8008 unshare_hek(GvNAME_HEK(sv));
8009 }
8010 isGV_with_GP_off(sv);
8011
8012 /* need to keep SvANY(sv) in the right arena */
8013 xpvmg = new_XPVMG();
8014 StructCopy(SvANY(sv), xpvmg, XPVMG);
8015 del_XPVGV(SvANY(sv));
8016 SvANY(sv) = xpvmg;
8017
8018 SvFLAGS(sv) &= ~SVTYPEMASK;
8019 SvFLAGS(sv) |= SVt_PVMG;
8020
8021 /* Intentionally not calling any local SET magic, as this isn't so much a
8022 set operation as merely an internal storage change. */
8023 sv_setsv_flags(sv, temp, 0);
8024}
8025
8026/*
8027=for apidoc sv_unref_flags
8028
8029Unsets the RV status of the SV, and decrements the reference count of
8030whatever was being referenced by the RV. This can almost be thought of
8031as a reversal of C<newSVrv>. The C<cflags> argument can contain
8032C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8033(otherwise the decrementing is conditional on the reference count being
8034different from one or the reference being a readonly SV).
8035See C<SvROK_off>.
8036
8037=cut
8038*/
8039
8040void
8041Perl_sv_unref_flags(pTHX_ SV *ref, U32 flags)
8042{
8043 SV* const target = SvRV(ref);
8044
8045 if (SvWEAKREF(ref)) {
8046 sv_del_backref(target, ref);
8047 SvWEAKREF_off(ref);
8048 SvRV_set(ref, NULL);
8049 return;
8050 }
8051 SvRV_set(ref, NULL);
8052 SvROK_off(ref);
8053 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
8054 assigned to as BEGIN {$a = \"Foo"} will fail. */
8055 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8056 SvREFCNT_dec(target);
8057 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8058 sv_2mortal(target); /* Schedule for freeing later */
8059}
8060
8061/*
8062=for apidoc sv_untaint
8063
8064Untaint an SV. Use C<SvTAINTED_off> instead.
8065=cut
8066*/
8067
8068void
8069Perl_sv_untaint(pTHX_ SV *sv)
8070{
8071 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8072 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8073 if (mg)
8074 mg->mg_len &= ~1;
8075 }
8076}
8077
8078/*
8079=for apidoc sv_tainted
8080
8081Test an SV for taintedness. Use C<SvTAINTED> instead.
8082=cut
8083*/
8084
8085bool
8086Perl_sv_tainted(pTHX_ SV *sv)
8087{
8088 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8089 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8090 if (mg && (mg->mg_len & 1) )
8091 return TRUE;
8092 }
8093 return FALSE;
8094}
8095
8096/*
8097=for apidoc sv_setpviv
8098
8099Copies an integer into the given SV, also updating its string value.
8100Does not handle 'set' magic. See C<sv_setpviv_mg>.
8101
8102=cut
8103*/
8104
8105void
8106Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8107{
8108 char buf[TYPE_CHARS(UV)];
8109 char *ebuf;
8110 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8111
8112 sv_setpvn(sv, ptr, ebuf - ptr);
8113}
8114
8115/*
8116=for apidoc sv_setpviv_mg
8117
8118Like C<sv_setpviv>, but also handles 'set' magic.
8119
8120=cut
8121*/
8122
8123void
8124Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8125{
8126 sv_setpviv(sv, iv);
8127 SvSETMAGIC(sv);
8128}
8129
8130#if defined(PERL_IMPLICIT_CONTEXT)
8131
8132/* pTHX_ magic can't cope with varargs, so this is a no-context
8133 * version of the main function, (which may itself be aliased to us).
8134 * Don't access this version directly.
8135 */
8136
8137void
8138Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8139{
8140 dTHX;
8141 va_list args;
8142 va_start(args, pat);
8143 sv_vsetpvf(sv, pat, &args);
8144 va_end(args);
8145}
8146
8147/* pTHX_ magic can't cope with varargs, so this is a no-context
8148 * version of the main function, (which may itself be aliased to us).
8149 * Don't access this version directly.
8150 */
8151
8152void
8153Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8154{
8155 dTHX;
8156 va_list args;
8157 va_start(args, pat);
8158 sv_vsetpvf_mg(sv, pat, &args);
8159 va_end(args);
8160}
8161#endif
8162
8163/*
8164=for apidoc sv_setpvf
8165
8166Works like C<sv_catpvf> but copies the text into the SV instead of
8167appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
8168
8169=cut
8170*/
8171
8172void
8173Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
8174{
8175 va_list args;
8176 va_start(args, pat);
8177 sv_vsetpvf(sv, pat, &args);
8178 va_end(args);
8179}
8180
8181/*
8182=for apidoc sv_vsetpvf
8183
8184Works like C<sv_vcatpvf> but copies the text into the SV instead of
8185appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8186
8187Usually used via its frontend C<sv_setpvf>.
8188
8189=cut
8190*/
8191
8192void
8193Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8194{
8195 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8196}
8197
8198/*
8199=for apidoc sv_setpvf_mg
8200
8201Like C<sv_setpvf>, but also handles 'set' magic.
8202
8203=cut
8204*/
8205
8206void
8207Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8208{
8209 va_list args;
8210 va_start(args, pat);
8211 sv_vsetpvf_mg(sv, pat, &args);
8212 va_end(args);
8213}
8214
8215/*
8216=for apidoc sv_vsetpvf_mg
8217
8218Like C<sv_vsetpvf>, but also handles 'set' magic.
8219
8220Usually used via its frontend C<sv_setpvf_mg>.
8221
8222=cut
8223*/
8224
8225void
8226Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8227{
8228 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8229 SvSETMAGIC(sv);
8230}
8231
8232#if defined(PERL_IMPLICIT_CONTEXT)
8233
8234/* pTHX_ magic can't cope with varargs, so this is a no-context
8235 * version of the main function, (which may itself be aliased to us).
8236 * Don't access this version directly.
8237 */
8238
8239void
8240Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8241{
8242 dTHX;
8243 va_list args;
8244 va_start(args, pat);
8245 sv_vcatpvf(sv, pat, &args);
8246 va_end(args);
8247}
8248
8249/* pTHX_ magic can't cope with varargs, so this is a no-context
8250 * version of the main function, (which may itself be aliased to us).
8251 * Don't access this version directly.
8252 */
8253
8254void
8255Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8256{
8257 dTHX;
8258 va_list args;
8259 va_start(args, pat);
8260 sv_vcatpvf_mg(sv, pat, &args);
8261 va_end(args);
8262}
8263#endif
8264
8265/*
8266=for apidoc sv_catpvf
8267
8268Processes its arguments like C<sprintf> and appends the formatted
8269output to an SV. If the appended data contains "wide" characters
8270(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8271and characters >255 formatted with %c), the original SV might get
8272upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
8273C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8274valid UTF-8; if the original SV was bytes, the pattern should be too.
8275
8276=cut */
8277
8278void
8279Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
8280{
8281 va_list args;
8282 va_start(args, pat);
8283 sv_vcatpvf(sv, pat, &args);
8284 va_end(args);
8285}
8286
8287/*
8288=for apidoc sv_vcatpvf
8289
8290Processes its arguments like C<vsprintf> and appends the formatted output
8291to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8292
8293Usually used via its frontend C<sv_catpvf>.
8294
8295=cut
8296*/
8297
8298void
8299Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8300{
8301 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8302}
8303
8304/*
8305=for apidoc sv_catpvf_mg
8306
8307Like C<sv_catpvf>, but also handles 'set' magic.
8308
8309=cut
8310*/
8311
8312void
8313Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8314{
8315 va_list args;
8316 va_start(args, pat);
8317 sv_vcatpvf_mg(sv, pat, &args);
8318 va_end(args);
8319}
8320
8321/*
8322=for apidoc sv_vcatpvf_mg
8323
8324Like C<sv_vcatpvf>, but also handles 'set' magic.
8325
8326Usually used via its frontend C<sv_catpvf_mg>.
8327
8328=cut
8329*/
8330
8331void
8332Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8333{
8334 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8335 SvSETMAGIC(sv);
8336}
8337
8338/*
8339=for apidoc sv_vsetpvfn
8340
8341Works like C<sv_vcatpvfn> but copies the text into the SV instead of
8342appending it.
8343
8344Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
8345
8346=cut
8347*/
8348
8349void
8350Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8351{
8352 sv_setpvn(sv, "", 0);
8353 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8354}
8355
8356STATIC I32
8357S_expect_number(pTHX_ char** pattern)
8358{
8359 dVAR;
8360 I32 var = 0;
8361 switch (**pattern) {
8362 case '1': case '2': case '3':
8363 case '4': case '5': case '6':
8364 case '7': case '8': case '9':
8365 var = *(*pattern)++ - '0';
8366 while (isDIGIT(**pattern)) {
8367 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
8368 if (tmp < var)
8369 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
8370 var = tmp;
8371 }
8372 }
8373 return var;
8374}
8375
8376STATIC char *
8377S_F0convert(NV nv, char *endbuf, STRLEN *len)
8378{
8379 const int neg = nv < 0;
8380 UV uv;
8381
8382 if (neg)
8383 nv = -nv;
8384 if (nv < UV_MAX) {
8385 char *p = endbuf;
8386 nv += 0.5;
8387 uv = (UV)nv;
8388 if (uv & 1 && uv == nv)
8389 uv--; /* Round to even */
8390 do {
8391 const unsigned dig = uv % 10;
8392 *--p = '0' + dig;
8393 } while (uv /= 10);
8394 if (neg)
8395 *--p = '-';
8396 *len = endbuf - p;
8397 return p;
8398 }
8399 return NULL;
8400}
8401
8402
8403/*
8404=for apidoc sv_vcatpvfn
8405
8406Processes its arguments like C<vsprintf> and appends the formatted output
8407to an SV. Uses an array of SVs if the C style variable argument list is
8408missing (NULL). When running with taint checks enabled, indicates via
8409C<maybe_tainted> if results are untrustworthy (often due to the use of
8410locales).
8411
8412Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
8413
8414=cut
8415*/
8416
8417
8418#define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
8419 vecstr = (U8*)SvPV_const(vecsv,veclen);\
8420 vec_utf8 = DO_UTF8(vecsv);
8421
8422/* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8423
8424void
8425Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8426{
8427 dVAR;
8428 char *p;
8429 char *q;
8430 const char *patend;
8431 STRLEN origlen;
8432 I32 svix = 0;
8433 static const char nullstr[] = "(null)";
8434 SV *argsv = NULL;
8435 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8436 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
8437 SV *nsv = NULL;
8438 /* Times 4: a decimal digit takes more than 3 binary digits.
8439 * NV_DIG: mantissa takes than many decimal digits.
8440 * Plus 32: Playing safe. */
8441 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8442 /* large enough for "%#.#f" --chip */
8443 /* what about long double NVs? --jhi */
8444
8445 PERL_UNUSED_ARG(maybe_tainted);
8446
8447 /* no matter what, this is a string now */
8448 (void)SvPV_force(sv, origlen);
8449
8450 /* special-case "", "%s", and "%-p" (SVf - see below) */
8451 if (patlen == 0)
8452 return;
8453 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
8454 if (args) {
8455 const char * const s = va_arg(*args, char*);
8456 sv_catpv(sv, s ? s : nullstr);
8457 }
8458 else if (svix < svmax) {
8459 sv_catsv(sv, *svargs);
8460 }
8461 return;
8462 }
8463 if (args && patlen == 3 && pat[0] == '%' &&
8464 pat[1] == '-' && pat[2] == 'p') {
8465 argsv = (SV*)va_arg(*args, void*);
8466 sv_catsv(sv, argsv);
8467 return;
8468 }
8469
8470#ifndef USE_LONG_DOUBLE
8471 /* special-case "%.<number>[gf]" */
8472 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
8473 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8474 unsigned digits = 0;
8475 const char *pp;
8476
8477 pp = pat + 2;
8478 while (*pp >= '0' && *pp <= '9')
8479 digits = 10 * digits + (*pp++ - '0');
8480 if (pp - pat == (int)patlen - 1) {
8481 NV nv;
8482
8483 if (svix < svmax)
8484 nv = SvNV(*svargs);
8485 else
8486 return;
8487 if (*pp == 'g') {
8488 /* Add check for digits != 0 because it seems that some
8489 gconverts are buggy in this case, and we don't yet have
8490 a Configure test for this. */
8491 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8492 /* 0, point, slack */
8493 Gconvert(nv, (int)digits, 0, ebuf);
8494 sv_catpv(sv, ebuf);
8495 if (*ebuf) /* May return an empty string for digits==0 */
8496 return;
8497 }
8498 } else if (!digits) {
8499 STRLEN l;
8500
8501 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8502 sv_catpvn(sv, p, l);
8503 return;
8504 }
8505 }
8506 }
8507 }
8508#endif /* !USE_LONG_DOUBLE */
8509
8510 if (!args && svix < svmax && DO_UTF8(*svargs))
8511 has_utf8 = TRUE;
8512
8513 patend = (char*)pat + patlen;
8514 for (p = (char*)pat; p < patend; p = q) {
8515 bool alt = FALSE;
8516 bool left = FALSE;
8517 bool vectorize = FALSE;
8518 bool vectorarg = FALSE;
8519 bool vec_utf8 = FALSE;
8520 char fill = ' ';
8521 char plus = 0;
8522 char intsize = 0;
8523 STRLEN width = 0;
8524 STRLEN zeros = 0;
8525 bool has_precis = FALSE;
8526 STRLEN precis = 0;
8527 const I32 osvix = svix;
8528 bool is_utf8 = FALSE; /* is this item utf8? */
8529#ifdef HAS_LDBL_SPRINTF_BUG
8530 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
8531 with sfio - Allen <allens@cpan.org> */
8532 bool fix_ldbl_sprintf_bug = FALSE;
8533#endif
8534
8535 char esignbuf[4];
8536 U8 utf8buf[UTF8_MAXBYTES+1];
8537 STRLEN esignlen = 0;
8538
8539 const char *eptr = NULL;
8540 STRLEN elen = 0;
8541 SV *vecsv = NULL;
8542 const U8 *vecstr = NULL;
8543 STRLEN veclen = 0;
8544 char c = 0;
8545 int i;
8546 unsigned base = 0;
8547 IV iv = 0;
8548 UV uv = 0;
8549 /* we need a long double target in case HAS_LONG_DOUBLE but
8550 not USE_LONG_DOUBLE
8551 */
8552#if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
8553 long double nv;
8554#else
8555 NV nv;
8556#endif
8557 STRLEN have;
8558 STRLEN need;
8559 STRLEN gap;
8560 const char *dotstr = ".";
8561 STRLEN dotstrlen = 1;
8562 I32 efix = 0; /* explicit format parameter index */
8563 I32 ewix = 0; /* explicit width index */
8564 I32 epix = 0; /* explicit precision index */
8565 I32 evix = 0; /* explicit vector index */
8566 bool asterisk = FALSE;
8567
8568 /* echo everything up to the next format specification */
8569 for (q = p; q < patend && *q != '%'; ++q) ;
8570 if (q > p) {
8571 if (has_utf8 && !pat_utf8)
8572 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8573 else
8574 sv_catpvn(sv, p, q - p);
8575 p = q;
8576 }
8577 if (q++ >= patend)
8578 break;
8579
8580/*
8581 We allow format specification elements in this order:
8582 \d+\$ explicit format parameter index
8583 [-+ 0#]+ flags
8584 v|\*(\d+\$)?v vector with optional (optionally specified) arg
8585 0 flag (as above): repeated to allow "v02"
8586 \d+|\*(\d+\$)? width using optional (optionally specified) arg
8587 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8588 [hlqLV] size
8589 [%bcdefginopsuxDFOUX] format (mandatory)
8590*/
8591
8592 if (args) {
8593/*
8594 As of perl5.9.3, printf format checking is on by default.
8595 Internally, perl uses %p formats to provide an escape to
8596 some extended formatting. This block deals with those
8597 extensions: if it does not match, (char*)q is reset and
8598 the normal format processing code is used.
8599
8600 Currently defined extensions are:
8601 %p include pointer address (standard)
8602 %-p (SVf) include an SV (previously %_)
8603 %-<num>p include an SV with precision <num>
8604 %1p (VDf) include a v-string (as %vd)
8605 %<num>p reserved for future extensions
8606
8607 Robin Barker 2005-07-14
8608*/
8609 char* r = q;
8610 bool sv = FALSE;
8611 STRLEN n = 0;
8612 if (*q == '-')
8613 sv = *q++;
8614 n = expect_number(&q);
8615 if (*q++ == 'p') {
8616 if (sv) { /* SVf */
8617 if (n) {
8618 precis = n;
8619 has_precis = TRUE;
8620 }
8621 argsv = (SV*)va_arg(*args, void*);
8622 eptr = SvPV_const(argsv, elen);
8623 if (DO_UTF8(argsv))
8624 is_utf8 = TRUE;
8625 goto string;
8626 }
8627#if vdNUMBER
8628 else if (n == vdNUMBER) { /* VDf */
8629 vectorize = TRUE;
8630 VECTORIZE_ARGS
8631 goto format_vd;
8632 }
8633#endif
8634 else if (n) {
8635 if (ckWARN_d(WARN_INTERNAL))
8636 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8637 "internal %%<num>p might conflict with future printf extensions");
8638 }
8639 }
8640 q = r;
8641 }
8642
8643 if ( (width = expect_number(&q)) ) {
8644 if (*q == '$') {
8645 ++q;
8646 efix = width;
8647 } else {
8648 goto gotwidth;
8649 }
8650 }
8651
8652 /* FLAGS */
8653
8654 while (*q) {
8655 switch (*q) {
8656 case ' ':
8657 case '+':
8658 if (plus == '+' && *q == ' ') /* '+' over ' ' */
8659 q++;
8660 else
8661 plus = *q++;
8662 continue;
8663
8664 case '-':
8665 left = TRUE;
8666 q++;
8667 continue;
8668
8669 case '0':
8670 fill = *q++;
8671 continue;
8672
8673 case '#':
8674 alt = TRUE;
8675 q++;
8676 continue;
8677
8678 default:
8679 break;
8680 }
8681 break;
8682 }
8683
8684 tryasterisk:
8685 if (*q == '*') {
8686 q++;
8687 if ( (ewix = expect_number(&q)) )
8688 if (*q++ != '$')
8689 goto unknown;
8690 asterisk = TRUE;
8691 }
8692 if (*q == 'v') {
8693 q++;
8694 if (vectorize)
8695 goto unknown;
8696 if ((vectorarg = asterisk)) {
8697 evix = ewix;
8698 ewix = 0;
8699 asterisk = FALSE;
8700 }
8701 vectorize = TRUE;
8702 goto tryasterisk;
8703 }
8704
8705 if (!asterisk)
8706 {
8707 if( *q == '0' )
8708 fill = *q++;
8709 width = expect_number(&q);
8710 }
8711
8712 if (vectorize) {
8713 if (vectorarg) {
8714 if (args)
8715 vecsv = va_arg(*args, SV*);
8716 else if (evix) {
8717 vecsv = (evix > 0 && evix <= svmax)
8718 ? svargs[evix-1] : &PL_sv_undef;
8719 } else {
8720 vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
8721 }
8722 dotstr = SvPV_const(vecsv, dotstrlen);
8723 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
8724 bad with tied or overloaded values that return UTF8. */
8725 if (DO_UTF8(vecsv))
8726 is_utf8 = TRUE;
8727 else if (has_utf8) {
8728 vecsv = sv_mortalcopy(vecsv);
8729 sv_utf8_upgrade(vecsv);
8730 dotstr = SvPV_const(vecsv, dotstrlen);
8731 is_utf8 = TRUE;
8732 }
8733 }
8734 if (args) {
8735 VECTORIZE_ARGS
8736 }
8737 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
8738 vecsv = svargs[efix ? efix-1 : svix++];
8739 vecstr = (U8*)SvPV_const(vecsv,veclen);
8740 vec_utf8 = DO_UTF8(vecsv);
8741
8742 /* if this is a version object, we need to convert
8743 * back into v-string notation and then let the
8744 * vectorize happen normally
8745 */
8746 if (sv_derived_from(vecsv, "version")) {
8747 char *version = savesvpv(vecsv);
8748 if ( hv_exists((HV*)SvRV(vecsv), "alpha", 5 ) ) {
8749 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8750 "vector argument not supported with alpha versions");
8751 goto unknown;
8752 }
8753 vecsv = sv_newmortal();
8754 scan_vstring(version, version + veclen, vecsv);
8755 vecstr = (U8*)SvPV_const(vecsv, veclen);
8756 vec_utf8 = DO_UTF8(vecsv);
8757 Safefree(version);
8758 }
8759 }
8760 else {
8761 vecstr = (U8*)"";
8762 veclen = 0;
8763 }
8764 }
8765
8766 if (asterisk) {
8767 if (args)
8768 i = va_arg(*args, int);
8769 else
8770 i = (ewix ? ewix <= svmax : svix < svmax) ?
8771 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8772 left |= (i < 0);
8773 width = (i < 0) ? -i : i;
8774 }
8775 gotwidth:
8776
8777 /* PRECISION */
8778
8779 if (*q == '.') {
8780 q++;
8781 if (*q == '*') {
8782 q++;
8783 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
8784 goto unknown;
8785 /* XXX: todo, support specified precision parameter */
8786 if (epix)
8787 goto unknown;
8788 if (args)
8789 i = va_arg(*args, int);
8790 else
8791 i = (ewix ? ewix <= svmax : svix < svmax)
8792 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8793 precis = i;
8794 has_precis = !(i < 0);
8795 }
8796 else {
8797 precis = 0;
8798 while (isDIGIT(*q))
8799 precis = precis * 10 + (*q++ - '0');
8800 has_precis = TRUE;
8801 }
8802 }
8803
8804 /* SIZE */
8805
8806 switch (*q) {
8807#ifdef WIN32
8808 case 'I': /* Ix, I32x, and I64x */
8809# ifdef WIN64
8810 if (q[1] == '6' && q[2] == '4') {
8811 q += 3;
8812 intsize = 'q';
8813 break;
8814 }
8815# endif
8816 if (q[1] == '3' && q[2] == '2') {
8817 q += 3;
8818 break;
8819 }
8820# ifdef WIN64
8821 intsize = 'q';
8822# endif
8823 q++;
8824 break;
8825#endif
8826#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8827 case 'L': /* Ld */
8828 /*FALLTHROUGH*/
8829#ifdef HAS_QUAD
8830 case 'q': /* qd */
8831#endif
8832 intsize = 'q';
8833 q++;
8834 break;
8835#endif
8836 case 'l':
8837#if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8838 if (*(q + 1) == 'l') { /* lld, llf */
8839 intsize = 'q';
8840 q += 2;
8841 break;
8842 }
8843#endif
8844 /*FALLTHROUGH*/
8845 case 'h':
8846 /*FALLTHROUGH*/
8847 case 'V':
8848 intsize = *q++;
8849 break;
8850 }
8851
8852 /* CONVERSION */
8853
8854 if (*q == '%') {
8855 eptr = q++;
8856 elen = 1;
8857 if (vectorize) {
8858 c = '%';
8859 goto unknown;
8860 }
8861 goto string;
8862 }
8863
8864 if (!vectorize && !args) {
8865 if (efix) {
8866 const I32 i = efix-1;
8867 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
8868 } else {
8869 argsv = (svix >= 0 && svix < svmax)
8870 ? svargs[svix++] : &PL_sv_undef;
8871 }
8872 }
8873
8874 switch (c = *q++) {
8875
8876 /* STRINGS */
8877
8878 case 'c':
8879 if (vectorize)
8880 goto unknown;
8881 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
8882 if ((uv > 255 ||
8883 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
8884 && !IN_BYTES) {
8885 eptr = (char*)utf8buf;
8886 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
8887 is_utf8 = TRUE;
8888 }
8889 else {
8890 c = (char)uv;
8891 eptr = &c;
8892 elen = 1;
8893 }
8894 goto string;
8895
8896 case 's':
8897 if (vectorize)
8898 goto unknown;
8899 if (args) {
8900 eptr = va_arg(*args, char*);
8901 if (eptr)
8902#ifdef MACOS_TRADITIONAL
8903 /* On MacOS, %#s format is used for Pascal strings */
8904 if (alt)
8905 elen = *eptr++;
8906 else
8907#endif
8908 elen = strlen(eptr);
8909 else {
8910 eptr = (char *)nullstr;
8911 elen = sizeof nullstr - 1;
8912 }
8913 }
8914 else {
8915 eptr = SvPV_const(argsv, elen);
8916 if (DO_UTF8(argsv)) {
8917 I32 old_precis = precis;
8918 if (has_precis && precis < elen) {
8919 I32 p = precis;
8920 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
8921 precis = p;
8922 }
8923 if (width) { /* fudge width (can't fudge elen) */
8924 if (has_precis && precis < elen)
8925 width += precis - old_precis;
8926 else
8927 width += elen - sv_len_utf8(argsv);
8928 }
8929 is_utf8 = TRUE;
8930 }
8931 }
8932
8933 string:
8934 if (has_precis && elen > precis)
8935 elen = precis;
8936 break;
8937
8938 /* INTEGERS */
8939
8940 case 'p':
8941 if (alt || vectorize)
8942 goto unknown;
8943 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
8944 base = 16;
8945 goto integer;
8946
8947 case 'D':
8948#ifdef IV_IS_QUAD
8949 intsize = 'q';
8950#else
8951 intsize = 'l';
8952#endif
8953 /*FALLTHROUGH*/
8954 case 'd':
8955 case 'i':
8956#if vdNUMBER
8957 format_vd:
8958#endif
8959 if (vectorize) {
8960 STRLEN ulen;
8961 if (!veclen)
8962 continue;
8963 if (vec_utf8)
8964 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8965 UTF8_ALLOW_ANYUV);
8966 else {
8967 uv = *vecstr;
8968 ulen = 1;
8969 }
8970 vecstr += ulen;
8971 veclen -= ulen;
8972 if (plus)
8973 esignbuf[esignlen++] = plus;
8974 }
8975 else if (args) {
8976 switch (intsize) {
8977 case 'h': iv = (short)va_arg(*args, int); break;
8978 case 'l': iv = va_arg(*args, long); break;
8979 case 'V': iv = va_arg(*args, IV); break;
8980 default: iv = va_arg(*args, int); break;
8981#ifdef HAS_QUAD
8982 case 'q': iv = va_arg(*args, Quad_t); break;
8983#endif
8984 }
8985 }
8986 else {
8987 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
8988 switch (intsize) {
8989 case 'h': iv = (short)tiv; break;
8990 case 'l': iv = (long)tiv; break;
8991 case 'V':
8992 default: iv = tiv; break;
8993#ifdef HAS_QUAD
8994 case 'q': iv = (Quad_t)tiv; break;
8995#endif
8996 }
8997 }
8998 if ( !vectorize ) /* we already set uv above */
8999 {
9000 if (iv >= 0) {
9001 uv = iv;
9002 if (plus)
9003 esignbuf[esignlen++] = plus;
9004 }
9005 else {
9006 uv = -iv;
9007 esignbuf[esignlen++] = '-';
9008 }
9009 }
9010 base = 10;
9011 goto integer;
9012
9013 case 'U':
9014#ifdef IV_IS_QUAD
9015 intsize = 'q';
9016#else
9017 intsize = 'l';
9018#endif
9019 /*FALLTHROUGH*/
9020 case 'u':
9021 base = 10;
9022 goto uns_integer;
9023
9024 case 'B':
9025 case 'b':
9026 base = 2;
9027 goto uns_integer;
9028
9029 case 'O':
9030#ifdef IV_IS_QUAD
9031 intsize = 'q';
9032#else
9033 intsize = 'l';
9034#endif
9035 /*FALLTHROUGH*/
9036 case 'o':
9037 base = 8;
9038 goto uns_integer;
9039
9040 case 'X':
9041 case 'x':
9042 base = 16;
9043
9044 uns_integer:
9045 if (vectorize) {
9046 STRLEN ulen;
9047 vector:
9048 if (!veclen)
9049 continue;
9050 if (vec_utf8)
9051 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9052 UTF8_ALLOW_ANYUV);
9053 else {
9054 uv = *vecstr;
9055 ulen = 1;
9056 }
9057 vecstr += ulen;
9058 veclen -= ulen;
9059 }
9060 else if (args) {
9061 switch (intsize) {
9062 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
9063 case 'l': uv = va_arg(*args, unsigned long); break;
9064 case 'V': uv = va_arg(*args, UV); break;
9065 default: uv = va_arg(*args, unsigned); break;
9066#ifdef HAS_QUAD
9067 case 'q': uv = va_arg(*args, Uquad_t); break;
9068#endif
9069 }
9070 }
9071 else {
9072 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
9073 switch (intsize) {
9074 case 'h': uv = (unsigned short)tuv; break;
9075 case 'l': uv = (unsigned long)tuv; break;
9076 case 'V':
9077 default: uv = tuv; break;
9078#ifdef HAS_QUAD
9079 case 'q': uv = (Uquad_t)tuv; break;
9080#endif
9081 }
9082 }
9083
9084 integer:
9085 {
9086 char *ptr = ebuf + sizeof ebuf;
9087 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
9088 zeros = 0;
9089
9090 switch (base) {
9091 unsigned dig;
9092 case 16:
9093 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
9094 do {
9095 dig = uv & 15;
9096 *--ptr = p[dig];
9097 } while (uv >>= 4);
9098 if (tempalt) {
9099 esignbuf[esignlen++] = '0';
9100 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9101 }
9102 break;
9103 case 8:
9104 do {
9105 dig = uv & 7;
9106 *--ptr = '0' + dig;
9107 } while (uv >>= 3);
9108 if (alt && *ptr != '0')
9109 *--ptr = '0';
9110 break;
9111 case 2:
9112 do {
9113 dig = uv & 1;
9114 *--ptr = '0' + dig;
9115 } while (uv >>= 1);
9116 if (tempalt) {
9117 esignbuf[esignlen++] = '0';
9118 esignbuf[esignlen++] = c;
9119 }
9120 break;
9121 default: /* it had better be ten or less */
9122 do {
9123 dig = uv % base;
9124 *--ptr = '0' + dig;
9125 } while (uv /= base);
9126 break;
9127 }
9128 elen = (ebuf + sizeof ebuf) - ptr;
9129 eptr = ptr;
9130 if (has_precis) {
9131 if (precis > elen)
9132 zeros = precis - elen;
9133 else if (precis == 0 && elen == 1 && *eptr == '0'
9134 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
9135 elen = 0;
9136
9137 /* a precision nullifies the 0 flag. */
9138 if (fill == '0')
9139 fill = ' ';
9140 }
9141 }
9142 break;
9143
9144 /* FLOATING POINT */
9145
9146 case 'F':
9147 c = 'f'; /* maybe %F isn't supported here */
9148 /*FALLTHROUGH*/
9149 case 'e': case 'E':
9150 case 'f':
9151 case 'g': case 'G':
9152 if (vectorize)
9153 goto unknown;
9154
9155 /* This is evil, but floating point is even more evil */
9156
9157 /* for SV-style calling, we can only get NV
9158 for C-style calling, we assume %f is double;
9159 for simplicity we allow any of %Lf, %llf, %qf for long double
9160 */
9161 switch (intsize) {
9162 case 'V':
9163#if defined(USE_LONG_DOUBLE)
9164 intsize = 'q';
9165#endif
9166 break;
9167/* [perl #20339] - we should accept and ignore %lf rather than die */
9168 case 'l':
9169 /*FALLTHROUGH*/
9170 default:
9171#if defined(USE_LONG_DOUBLE)
9172 intsize = args ? 0 : 'q';
9173#endif
9174 break;
9175 case 'q':
9176#if defined(HAS_LONG_DOUBLE)
9177 break;
9178#else
9179 /*FALLTHROUGH*/
9180#endif
9181 case 'h':
9182 goto unknown;
9183 }
9184
9185 /* now we need (long double) if intsize == 'q', else (double) */
9186 nv = (args) ?
9187#if LONG_DOUBLESIZE > DOUBLESIZE
9188 intsize == 'q' ?
9189 va_arg(*args, long double) :
9190 va_arg(*args, double)
9191#else
9192 va_arg(*args, double)
9193#endif
9194 : SvNV(argsv);
9195
9196 need = 0;
9197 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
9198 else. frexp() has some unspecified behaviour for those three */
9199 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
9200 i = PERL_INT_MIN;
9201 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9202 will cast our (long double) to (double) */
9203 (void)Perl_frexp(nv, &i);
9204 if (i == PERL_INT_MIN)
9205 Perl_die(aTHX_ "panic: frexp");
9206 if (i > 0)
9207 need = BIT_DIGITS(i);
9208 }
9209 need += has_precis ? precis : 6; /* known default */
9210
9211 if (need < width)
9212 need = width;
9213
9214#ifdef HAS_LDBL_SPRINTF_BUG
9215 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9216 with sfio - Allen <allens@cpan.org> */
9217
9218# ifdef DBL_MAX
9219# define MY_DBL_MAX DBL_MAX
9220# else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9221# if DOUBLESIZE >= 8
9222# define MY_DBL_MAX 1.7976931348623157E+308L
9223# else
9224# define MY_DBL_MAX 3.40282347E+38L
9225# endif
9226# endif
9227
9228# ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9229# define MY_DBL_MAX_BUG 1L
9230# else
9231# define MY_DBL_MAX_BUG MY_DBL_MAX
9232# endif
9233
9234# ifdef DBL_MIN
9235# define MY_DBL_MIN DBL_MIN
9236# else /* XXX guessing! -Allen */
9237# if DOUBLESIZE >= 8
9238# define MY_DBL_MIN 2.2250738585072014E-308L
9239# else
9240# define MY_DBL_MIN 1.17549435E-38L
9241# endif
9242# endif
9243
9244 if ((intsize == 'q') && (c == 'f') &&
9245 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9246 (need < DBL_DIG)) {
9247 /* it's going to be short enough that
9248 * long double precision is not needed */
9249
9250 if ((nv <= 0L) && (nv >= -0L))
9251 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9252 else {
9253 /* would use Perl_fp_class as a double-check but not
9254 * functional on IRIX - see perl.h comments */
9255
9256 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9257 /* It's within the range that a double can represent */
9258#if defined(DBL_MAX) && !defined(DBL_MIN)
9259 if ((nv >= ((long double)1/DBL_MAX)) ||
9260 (nv <= (-(long double)1/DBL_MAX)))
9261#endif
9262 fix_ldbl_sprintf_bug = TRUE;
9263 }
9264 }
9265 if (fix_ldbl_sprintf_bug == TRUE) {
9266 double temp;
9267
9268 intsize = 0;
9269 temp = (double)nv;
9270 nv = (NV)temp;
9271 }
9272 }
9273
9274# undef MY_DBL_MAX
9275# undef MY_DBL_MAX_BUG
9276# undef MY_DBL_MIN
9277
9278#endif /* HAS_LDBL_SPRINTF_BUG */
9279
9280 need += 20; /* fudge factor */
9281 if (PL_efloatsize < need) {
9282 Safefree(PL_efloatbuf);
9283 PL_efloatsize = need + 20; /* more fudge */
9284 Newx(PL_efloatbuf, PL_efloatsize, char);
9285 PL_efloatbuf[0] = '\0';
9286 }
9287
9288 if ( !(width || left || plus || alt) && fill != '0'
9289 && has_precis && intsize != 'q' ) { /* Shortcuts */
9290 /* See earlier comment about buggy Gconvert when digits,
9291 aka precis is 0 */
9292 if ( c == 'g' && precis) {
9293 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9294 /* May return an empty string for digits==0 */
9295 if (*PL_efloatbuf) {
9296 elen = strlen(PL_efloatbuf);
9297 goto float_converted;
9298 }
9299 } else if ( c == 'f' && !precis) {
9300 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9301 break;
9302 }
9303 }
9304 {
9305 char *ptr = ebuf + sizeof ebuf;
9306 *--ptr = '\0';
9307 *--ptr = c;
9308 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9309#if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9310 if (intsize == 'q') {
9311 /* Copy the one or more characters in a long double
9312 * format before the 'base' ([efgEFG]) character to
9313 * the format string. */
9314 static char const prifldbl[] = PERL_PRIfldbl;
9315 char const *p = prifldbl + sizeof(prifldbl) - 3;
9316 while (p >= prifldbl) { *--ptr = *p--; }
9317 }
9318#endif
9319 if (has_precis) {
9320 base = precis;
9321 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9322 *--ptr = '.';
9323 }
9324 if (width) {
9325 base = width;
9326 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9327 }
9328 if (fill == '0')
9329 *--ptr = fill;
9330 if (left)
9331 *--ptr = '-';
9332 if (plus)
9333 *--ptr = plus;
9334 if (alt)
9335 *--ptr = '#';
9336 *--ptr = '%';
9337
9338 /* No taint. Otherwise we are in the strange situation
9339 * where printf() taints but print($float) doesn't.
9340 * --jhi */
9341#if defined(HAS_LONG_DOUBLE)
9342 elen = ((intsize == 'q')
9343 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
9344 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9345#else
9346 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9347#endif
9348 }
9349 float_converted:
9350 eptr = PL_efloatbuf;
9351 break;
9352
9353 /* SPECIAL */
9354
9355 case 'n':
9356 if (vectorize)
9357 goto unknown;
9358 i = SvCUR(sv) - origlen;
9359 if (args) {
9360 switch (intsize) {
9361 case 'h': *(va_arg(*args, short*)) = i; break;
9362 default: *(va_arg(*args, int*)) = i; break;
9363 case 'l': *(va_arg(*args, long*)) = i; break;
9364 case 'V': *(va_arg(*args, IV*)) = i; break;
9365#ifdef HAS_QUAD
9366 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9367#endif
9368 }
9369 }
9370 else
9371 sv_setuv_mg(argsv, (UV)i);
9372 continue; /* not "break" */
9373
9374 /* UNKNOWN */
9375
9376 default:
9377 unknown:
9378 if (!args
9379 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
9380 && ckWARN(WARN_PRINTF))
9381 {
9382 SV * const msg = sv_newmortal();
9383 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9384 (PL_op->op_type == OP_PRTF) ? "" : "s");
9385 if (c) {
9386 if (isPRINT(c))
9387 Perl_sv_catpvf(aTHX_ msg,
9388 "\"%%%c\"", c & 0xFF);
9389 else
9390 Perl_sv_catpvf(aTHX_ msg,
9391 "\"%%\\%03"UVof"\"",
9392 (UV)c & 0xFF);
9393 } else
9394 sv_catpvs(msg, "end of string");
9395 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
9396 }
9397
9398 /* output mangled stuff ... */
9399 if (c == '\0')
9400 --q;
9401 eptr = p;
9402 elen = q - p;
9403
9404 /* ... right here, because formatting flags should not apply */
9405 SvGROW(sv, SvCUR(sv) + elen + 1);
9406 p = SvEND(sv);
9407 Copy(eptr, p, elen, char);
9408 p += elen;
9409 *p = '\0';
9410 SvCUR_set(sv, p - SvPVX_const(sv));
9411 svix = osvix;
9412 continue; /* not "break" */
9413 }
9414
9415 if (is_utf8 != has_utf8) {
9416 if (is_utf8) {
9417 if (SvCUR(sv))
9418 sv_utf8_upgrade(sv);
9419 }
9420 else {
9421 const STRLEN old_elen = elen;
9422 SV * const nsv = sv_2mortal(newSVpvn(eptr, elen));
9423 sv_utf8_upgrade(nsv);
9424 eptr = SvPVX_const(nsv);
9425 elen = SvCUR(nsv);
9426
9427 if (width) { /* fudge width (can't fudge elen) */
9428 width += elen - old_elen;
9429 }
9430 is_utf8 = TRUE;
9431 }
9432 }
9433
9434 have = esignlen + zeros + elen;
9435 if (have < zeros)
9436 Perl_croak_nocontext(PL_memory_wrap);
9437
9438 need = (have > width ? have : width);
9439 gap = need - have;
9440
9441 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
9442 Perl_croak_nocontext(PL_memory_wrap);
9443 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9444 p = SvEND(sv);
9445 if (esignlen && fill == '0') {
9446 int i;
9447 for (i = 0; i < (int)esignlen; i++)
9448 *p++ = esignbuf[i];
9449 }
9450 if (gap && !left) {
9451 memset(p, fill, gap);
9452 p += gap;
9453 }
9454 if (esignlen && fill != '0') {
9455 int i;
9456 for (i = 0; i < (int)esignlen; i++)
9457 *p++ = esignbuf[i];
9458 }
9459 if (zeros) {
9460 int i;
9461 for (i = zeros; i; i--)
9462 *p++ = '0';
9463 }
9464 if (elen) {
9465 Copy(eptr, p, elen, char);
9466 p += elen;
9467 }
9468 if (gap && left) {
9469 memset(p, ' ', gap);
9470 p += gap;
9471 }
9472 if (vectorize) {
9473 if (veclen) {
9474 Copy(dotstr, p, dotstrlen, char);
9475 p += dotstrlen;
9476 }
9477 else
9478 vectorize = FALSE; /* done iterating over vecstr */
9479 }
9480 if (is_utf8)
9481 has_utf8 = TRUE;
9482 if (has_utf8)
9483 SvUTF8_on(sv);
9484 *p = '\0';
9485 SvCUR_set(sv, p - SvPVX_const(sv));
9486 if (vectorize) {
9487 esignlen = 0;
9488 goto vector;
9489 }
9490 }
9491}
9492
9493/* =========================================================================
9494
9495=head1 Cloning an interpreter
9496
9497All the macros and functions in this section are for the private use of
9498the main function, perl_clone().
9499
9500The foo_dup() functions make an exact copy of an existing foo thinngy.
9501During the course of a cloning, a hash table is used to map old addresses
9502to new addresses. The table is created and manipulated with the
9503ptr_table_* functions.
9504
9505=cut
9506
9507============================================================================*/
9508
9509
9510#if defined(USE_ITHREADS)
9511
9512/* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
9513#ifndef GpREFCNT_inc
9514# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9515#endif
9516
9517
9518/* Certain cases in Perl_ss_dup have been merged, by relying on the fact
9519 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
9520 If this changes, please unmerge ss_dup. */
9521#define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
9522#define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup(s,t))
9523#define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
9524#define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9525#define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
9526#define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9527#define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
9528#define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9529#define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
9530#define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9531#define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
9532#define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9533#define SAVEPV(p) ((p) ? savepv(p) : NULL)
9534#define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
9535
9536/* clone a parser */
9537
9538yy_parser *
9539Perl_parser_dup(pTHX_ const yy_parser *proto, CLONE_PARAMS* param)
9540{
9541 yy_parser *parser;
9542
9543 if (!proto)
9544 return NULL;
9545
9546 /* look for it in the table first */
9547 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
9548 if (parser)
9549 return parser;
9550
9551 /* create anew and remember what it is */
9552 Newxz(parser, 1, yy_parser);
9553 ptr_table_store(PL_ptr_table, proto, parser);
9554
9555 parser->yyerrstatus = 0;
9556 parser->yychar = YYEMPTY; /* Cause a token to be read. */
9557
9558 /* XXX these not yet duped */
9559 parser->old_parser = NULL;
9560 parser->stack = NULL;
9561 parser->ps = NULL;
9562 parser->stack_size = 0;
9563 /* XXX parser->stack->state = 0; */
9564
9565 /* XXX eventually, just Copy() most of the parser struct ? */
9566
9567 parser->lex_brackets = proto->lex_brackets;
9568 parser->lex_casemods = proto->lex_casemods;
9569 parser->lex_brackstack = savepvn(proto->lex_brackstack,
9570 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
9571 parser->lex_casestack = savepvn(proto->lex_casestack,
9572 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
9573 parser->lex_defer = proto->lex_defer;
9574 parser->lex_dojoin = proto->lex_dojoin;
9575 parser->lex_expect = proto->lex_expect;
9576 parser->lex_formbrack = proto->lex_formbrack;
9577 parser->lex_inpat = proto->lex_inpat;
9578 parser->lex_inwhat = proto->lex_inwhat;
9579 parser->lex_op = proto->lex_op;
9580 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
9581 parser->lex_starts = proto->lex_starts;
9582 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
9583 parser->multi_close = proto->multi_close;
9584 parser->multi_open = proto->multi_open;
9585 parser->multi_start = proto->multi_start;
9586 parser->multi_end = proto->multi_end;
9587 parser->pending_ident = proto->pending_ident;
9588 parser->preambled = proto->preambled;
9589 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
9590 parser->linestr = sv_dup_inc(proto->linestr, param);
9591 parser->expect = proto->expect;
9592 parser->copline = proto->copline;
9593 parser->last_lop_op = proto->last_lop_op;
9594 parser->lex_state = proto->lex_state;
9595 parser->rsfp = fp_dup(proto->rsfp, '<', param);
9596 /* rsfp_filters entries have fake IoDIRP() */
9597 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
9598 parser->in_my = proto->in_my;
9599 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
9600 parser->error_count = proto->error_count;
9601
9602
9603 parser->linestr = sv_dup_inc(proto->linestr, param);
9604
9605 {
9606 char * const ols = SvPVX(proto->linestr);
9607 char * const ls = SvPVX(parser->linestr);
9608
9609 parser->bufptr = ls + (proto->bufptr >= ols ?
9610 proto->bufptr - ols : 0);
9611 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
9612 proto->oldbufptr - ols : 0);
9613 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
9614 proto->oldoldbufptr - ols : 0);
9615 parser->linestart = ls + (proto->linestart >= ols ?
9616 proto->linestart - ols : 0);
9617 parser->last_uni = ls + (proto->last_uni >= ols ?
9618 proto->last_uni - ols : 0);
9619 parser->last_lop = ls + (proto->last_lop >= ols ?
9620 proto->last_lop - ols : 0);
9621
9622 parser->bufend = ls + SvCUR(parser->linestr);
9623 }
9624
9625 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
9626
9627
9628#ifdef PERL_MAD
9629 parser->endwhite = proto->endwhite;
9630 parser->faketokens = proto->faketokens;
9631 parser->lasttoke = proto->lasttoke;
9632 parser->nextwhite = proto->nextwhite;
9633 parser->realtokenstart = proto->realtokenstart;
9634 parser->skipwhite = proto->skipwhite;
9635 parser->thisclose = proto->thisclose;
9636 parser->thismad = proto->thismad;
9637 parser->thisopen = proto->thisopen;
9638 parser->thisstuff = proto->thisstuff;
9639 parser->thistoken = proto->thistoken;
9640 parser->thiswhite = proto->thiswhite;
9641
9642 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
9643 parser->curforce = proto->curforce;
9644#else
9645 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
9646 Copy(proto->nexttype, parser->nexttype, 5, I32);
9647 parser->nexttoke = proto->nexttoke;
9648#endif
9649 return parser;
9650}
9651
9652
9653/* duplicate a file handle */
9654
9655PerlIO *
9656Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
9657{
9658 PerlIO *ret;
9659
9660 PERL_UNUSED_ARG(type);
9661
9662 if (!fp)
9663 return (PerlIO*)NULL;
9664
9665 /* look for it in the table first */
9666 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9667 if (ret)
9668 return ret;
9669
9670 /* create anew and remember what it is */
9671 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
9672 ptr_table_store(PL_ptr_table, fp, ret);
9673 return ret;
9674}
9675
9676/* duplicate a directory handle */
9677
9678DIR *
9679Perl_dirp_dup(pTHX_ DIR *dp)
9680{
9681 PERL_UNUSED_CONTEXT;
9682 if (!dp)
9683 return (DIR*)NULL;
9684 /* XXX TODO */
9685 return dp;
9686}
9687
9688/* duplicate a typeglob */
9689
9690GP *
9691Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
9692{
9693 GP *ret;
9694
9695 if (!gp)
9696 return (GP*)NULL;
9697 /* look for it in the table first */
9698 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9699 if (ret)
9700 return ret;
9701
9702 /* create anew and remember what it is */
9703 Newxz(ret, 1, GP);
9704 ptr_table_store(PL_ptr_table, gp, ret);
9705
9706 /* clone */
9707 ret->gp_refcnt = 0; /* must be before any other dups! */
9708 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
9709 ret->gp_io = io_dup_inc(gp->gp_io, param);
9710 ret->gp_form = cv_dup_inc(gp->gp_form, param);
9711 ret->gp_av = av_dup_inc(gp->gp_av, param);
9712 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
9713 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9714 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
9715 ret->gp_cvgen = gp->gp_cvgen;
9716 ret->gp_line = gp->gp_line;
9717 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
9718 return ret;
9719}
9720
9721/* duplicate a chain of magic */
9722
9723MAGIC *
9724Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
9725{
9726 MAGIC *mgprev = (MAGIC*)NULL;
9727 MAGIC *mgret;
9728 if (!mg)
9729 return (MAGIC*)NULL;
9730 /* look for it in the table first */
9731 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9732 if (mgret)
9733 return mgret;
9734
9735 for (; mg; mg = mg->mg_moremagic) {
9736 MAGIC *nmg;
9737 Newxz(nmg, 1, MAGIC);
9738 if (mgprev)
9739 mgprev->mg_moremagic = nmg;
9740 else
9741 mgret = nmg;
9742 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
9743 nmg->mg_private = mg->mg_private;
9744 nmg->mg_type = mg->mg_type;
9745 nmg->mg_flags = mg->mg_flags;
9746 if (mg->mg_type == PERL_MAGIC_qr) {
9747 nmg->mg_obj = (SV*)CALLREGDUPE((REGEXP*)mg->mg_obj, param);
9748 }
9749 else if(mg->mg_type == PERL_MAGIC_backref) {
9750 /* The backref AV has its reference count deliberately bumped by
9751 1. */
9752 nmg->mg_obj = SvREFCNT_inc(av_dup_inc((AV*) mg->mg_obj, param));
9753 }
9754 else {
9755 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
9756 ? sv_dup_inc(mg->mg_obj, param)
9757 : sv_dup(mg->mg_obj, param);
9758 }
9759 nmg->mg_len = mg->mg_len;
9760 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
9761 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
9762 if (mg->mg_len > 0) {
9763 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
9764 if (mg->mg_type == PERL_MAGIC_overload_table &&
9765 AMT_AMAGIC((AMT*)mg->mg_ptr))
9766 {
9767 const AMT * const amtp = (AMT*)mg->mg_ptr;
9768 AMT * const namtp = (AMT*)nmg->mg_ptr;
9769 I32 i;
9770 for (i = 1; i < NofAMmeth; i++) {
9771 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
9772 }
9773 }
9774 }
9775 else if (mg->mg_len == HEf_SVKEY)
9776 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
9777 }
9778 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9779 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9780 }
9781 mgprev = nmg;
9782 }
9783 return mgret;
9784}
9785
9786#endif /* USE_ITHREADS */
9787
9788/* create a new pointer-mapping table */
9789
9790PTR_TBL_t *
9791Perl_ptr_table_new(pTHX)
9792{
9793 PTR_TBL_t *tbl;
9794 PERL_UNUSED_CONTEXT;
9795
9796 Newxz(tbl, 1, PTR_TBL_t);
9797 tbl->tbl_max = 511;
9798 tbl->tbl_items = 0;
9799 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
9800 return tbl;
9801}
9802
9803#define PTR_TABLE_HASH(ptr) \
9804 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
9805
9806/*
9807 we use the PTE_SVSLOT 'reservation' made above, both here (in the
9808 following define) and at call to new_body_inline made below in
9809 Perl_ptr_table_store()
9810 */
9811
9812#define del_pte(p) del_body_type(p, PTE_SVSLOT)
9813
9814/* map an existing pointer using a table */
9815
9816STATIC PTR_TBL_ENT_t *
9817S_ptr_table_find(PTR_TBL_t *tbl, const void *sv) {
9818 PTR_TBL_ENT_t *tblent;
9819 const UV hash = PTR_TABLE_HASH(sv);
9820 assert(tbl);
9821 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9822 for (; tblent; tblent = tblent->next) {
9823 if (tblent->oldval == sv)
9824 return tblent;
9825 }
9826 return NULL;
9827}
9828
9829void *
9830Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, const void *sv)
9831{
9832 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
9833 PERL_UNUSED_CONTEXT;
9834 return tblent ? tblent->newval : NULL;
9835}
9836
9837/* add a new entry to a pointer-mapping table */
9838
9839void
9840Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, const void *oldsv, void *newsv)
9841{
9842 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
9843 PERL_UNUSED_CONTEXT;
9844
9845 if (tblent) {
9846 tblent->newval = newsv;
9847 } else {
9848 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
9849
9850 new_body_inline(tblent, PTE_SVSLOT);
9851
9852 tblent->oldval = oldsv;
9853 tblent->newval = newsv;
9854 tblent->next = tbl->tbl_ary[entry];
9855 tbl->tbl_ary[entry] = tblent;
9856 tbl->tbl_items++;
9857 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
9858 ptr_table_split(tbl);
9859 }
9860}
9861
9862/* double the hash bucket size of an existing ptr table */
9863
9864void
9865Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9866{
9867 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
9868 const UV oldsize = tbl->tbl_max + 1;
9869 UV newsize = oldsize * 2;
9870 UV i;
9871 PERL_UNUSED_CONTEXT;
9872
9873 Renew(ary, newsize, PTR_TBL_ENT_t*);
9874 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9875 tbl->tbl_max = --newsize;
9876 tbl->tbl_ary = ary;
9877 for (i=0; i < oldsize; i++, ary++) {
9878 PTR_TBL_ENT_t **curentp, **entp, *ent;
9879 if (!*ary)
9880 continue;
9881 curentp = ary + oldsize;
9882 for (entp = ary, ent = *ary; ent; ent = *entp) {
9883 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
9884 *entp = ent->next;
9885 ent->next = *curentp;
9886 *curentp = ent;
9887 continue;
9888 }
9889 else
9890 entp = &ent->next;
9891 }
9892 }
9893}
9894
9895/* remove all the entries from a ptr table */
9896
9897void
9898Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9899{
9900 if (tbl && tbl->tbl_items) {
9901 register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
9902 UV riter = tbl->tbl_max;
9903
9904 do {
9905 PTR_TBL_ENT_t *entry = array[riter];
9906
9907 while (entry) {
9908 PTR_TBL_ENT_t * const oentry = entry;
9909 entry = entry->next;
9910 del_pte(oentry);
9911 }
9912 } while (riter--);
9913
9914 tbl->tbl_items = 0;
9915 }
9916}
9917
9918/* clear and free a ptr table */
9919
9920void
9921Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9922{
9923 if (!tbl) {
9924 return;
9925 }
9926 ptr_table_clear(tbl);
9927 Safefree(tbl->tbl_ary);
9928 Safefree(tbl);
9929}
9930
9931#if defined(USE_ITHREADS)
9932
9933void
9934Perl_rvpv_dup(pTHX_ SV *dstr, const SV *sstr, CLONE_PARAMS* param)
9935{
9936 if (SvROK(sstr)) {
9937 SvRV_set(dstr, SvWEAKREF(sstr)
9938 ? sv_dup(SvRV(sstr), param)
9939 : sv_dup_inc(SvRV(sstr), param));
9940
9941 }
9942 else if (SvPVX_const(sstr)) {
9943 /* Has something there */
9944 if (SvLEN(sstr)) {
9945 /* Normal PV - clone whole allocated space */
9946 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
9947 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
9948 /* Not that normal - actually sstr is copy on write.
9949 But we are a true, independant SV, so: */
9950 SvREADONLY_off(dstr);
9951 SvFAKE_off(dstr);
9952 }
9953 }
9954 else {
9955 /* Special case - not normally malloced for some reason */
9956 if (isGV_with_GP(sstr)) {
9957 /* Don't need to do anything here. */
9958 }
9959 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
9960 /* A "shared" PV - clone it as "shared" PV */
9961 SvPV_set(dstr,
9962 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
9963 param)));
9964 }
9965 else {
9966 /* Some other special case - random pointer */
9967 SvPV_set(dstr, SvPVX(sstr));
9968 }
9969 }
9970 }
9971 else {
9972 /* Copy the NULL */
9973 if (SvTYPE(dstr) == SVt_RV)
9974 SvRV_set(dstr, NULL);
9975 else
9976 SvPV_set(dstr, NULL);
9977 }
9978}
9979
9980/* duplicate an SV of any type (including AV, HV etc) */
9981
9982SV *
9983Perl_sv_dup(pTHX_ const SV *sstr, CLONE_PARAMS* param)
9984{
9985 dVAR;
9986 SV *dstr;
9987
9988 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
9989 return NULL;
9990 /* look for it in the table first */
9991 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
9992 if (dstr)
9993 return dstr;
9994
9995 if(param->flags & CLONEf_JOIN_IN) {
9996 /** We are joining here so we don't want do clone
9997 something that is bad **/
9998 if (SvTYPE(sstr) == SVt_PVHV) {
9999 const char * const hvname = HvNAME_get(sstr);
10000 if (hvname)
10001 /** don't clone stashes if they already exist **/
10002 return (SV*)gv_stashpv(hvname,0);
10003 }
10004 }
10005
10006 /* create anew and remember what it is */
10007 new_SV(dstr);
10008
10009#ifdef DEBUG_LEAKING_SCALARS
10010 dstr->sv_debug_optype = sstr->sv_debug_optype;
10011 dstr->sv_debug_line = sstr->sv_debug_line;
10012 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10013 dstr->sv_debug_cloned = 1;
10014 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
10015#endif
10016
10017 ptr_table_store(PL_ptr_table, sstr, dstr);
10018
10019 /* clone */
10020 SvFLAGS(dstr) = SvFLAGS(sstr);
10021 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
10022 SvREFCNT(dstr) = 0; /* must be before any other dups! */
10023
10024#ifdef DEBUGGING
10025 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
10026 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10027 (void*)PL_watch_pvx, SvPVX_const(sstr));
10028#endif
10029
10030 /* don't clone objects whose class has asked us not to */
10031 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10032 SvFLAGS(dstr) &= ~SVTYPEMASK;
10033 SvOBJECT_off(dstr);
10034 return dstr;
10035 }
10036
10037 switch (SvTYPE(sstr)) {
10038 case SVt_NULL:
10039 SvANY(dstr) = NULL;
10040 break;
10041 case SVt_IV:
10042 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
10043 SvIV_set(dstr, SvIVX(sstr));
10044 break;
10045 case SVt_NV:
10046 SvANY(dstr) = new_XNV();
10047 SvNV_set(dstr, SvNVX(sstr));
10048 break;
10049 case SVt_RV:
10050 SvANY(dstr) = &(dstr->sv_u.svu_rv);
10051 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10052 break;
10053 /* case SVt_BIND: */
10054 default:
10055 {
10056 /* These are all the types that need complex bodies allocating. */
10057 void *new_body;
10058 const svtype sv_type = SvTYPE(sstr);
10059 const struct body_details *const sv_type_details
10060 = bodies_by_type + sv_type;
10061
10062 switch (sv_type) {
10063 default:
10064 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
10065 break;
10066
10067 case SVt_PVGV:
10068 if (GvUNIQUE((GV*)sstr)) {
10069 NOOP; /* Do sharing here, and fall through */
10070 }
10071 case SVt_PVIO:
10072 case SVt_PVFM:
10073 case SVt_PVHV:
10074 case SVt_PVAV:
10075 case SVt_PVCV:
10076 case SVt_PVLV:
10077 case SVt_PVMG:
10078 case SVt_PVNV:
10079 case SVt_PVIV:
10080 case SVt_PV:
10081 assert(sv_type_details->body_size);
10082 if (sv_type_details->arena) {
10083 new_body_inline(new_body, sv_type);
10084 new_body
10085 = (void*)((char*)new_body - sv_type_details->offset);
10086 } else {
10087 new_body = new_NOARENA(sv_type_details);
10088 }
10089 }
10090 assert(new_body);
10091 SvANY(dstr) = new_body;
10092
10093#ifndef PURIFY
10094 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
10095 ((char*)SvANY(dstr)) + sv_type_details->offset,
10096 sv_type_details->copy, char);
10097#else
10098 Copy(((char*)SvANY(sstr)),
10099 ((char*)SvANY(dstr)),
10100 sv_type_details->body_size + sv_type_details->offset, char);
10101#endif
10102
10103 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
10104 && !isGV_with_GP(dstr))
10105 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10106
10107 /* The Copy above means that all the source (unduplicated) pointers
10108 are now in the destination. We can check the flags and the
10109 pointers in either, but it's possible that there's less cache
10110 missing by always going for the destination.
10111 FIXME - instrument and check that assumption */
10112 if (sv_type >= SVt_PVMG) {
10113 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
10114 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
10115 } else if (SvMAGIC(dstr))
10116 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
10117 if (SvSTASH(dstr))
10118 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
10119 }
10120
10121 /* The cast silences a GCC warning about unhandled types. */
10122 switch ((int)sv_type) {
10123 case SVt_PV:
10124 break;
10125 case SVt_PVIV:
10126 break;
10127 case SVt_PVNV:
10128 break;
10129 case SVt_PVMG:
10130 break;
10131 case SVt_PVLV:
10132 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
10133 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
10134 LvTARG(dstr) = dstr;
10135 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
10136 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
10137 else
10138 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
10139 case SVt_PVGV:
10140 if(isGV_with_GP(sstr)) {
10141 if (GvNAME_HEK(dstr))
10142 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
10143 /* Don't call sv_add_backref here as it's going to be
10144 created as part of the magic cloning of the symbol
10145 table. */
10146 /* Danger Will Robinson - GvGP(dstr) isn't initialised
10147 at the point of this comment. */
10148 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
10149 GvGP(dstr) = gp_dup(GvGP(sstr), param);
10150 (void)GpREFCNT_inc(GvGP(dstr));
10151 } else
10152 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10153 break;
10154 case SVt_PVIO:
10155 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
10156 if (IoOFP(dstr) == IoIFP(sstr))
10157 IoOFP(dstr) = IoIFP(dstr);
10158 else
10159 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
10160 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
10161 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
10162 /* I have no idea why fake dirp (rsfps)
10163 should be treated differently but otherwise
10164 we end up with leaks -- sky*/
10165 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
10166 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
10167 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
10168 } else {
10169 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
10170 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
10171 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
10172 if (IoDIRP(dstr)) {
10173 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
10174 } else {
10175 NOOP;
10176 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
10177 }
10178 }
10179 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
10180 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
10181 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
10182 break;
10183 case SVt_PVAV:
10184 if (AvARRAY((AV*)sstr)) {
10185 SV **dst_ary, **src_ary;
10186 SSize_t items = AvFILLp((AV*)sstr) + 1;
10187
10188 src_ary = AvARRAY((AV*)sstr);
10189 Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
10190 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10191 AvARRAY((AV*)dstr) = dst_ary;
10192 AvALLOC((AV*)dstr) = dst_ary;
10193 if (AvREAL((AV*)sstr)) {
10194 while (items-- > 0)
10195 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10196 }
10197 else {
10198 while (items-- > 0)
10199 *dst_ary++ = sv_dup(*src_ary++, param);
10200 }
10201 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10202 while (items-- > 0) {
10203 *dst_ary++ = &PL_sv_undef;
10204 }
10205 }
10206 else {
10207 AvARRAY((AV*)dstr) = NULL;
10208 AvALLOC((AV*)dstr) = (SV**)NULL;
10209 }
10210 break;
10211 case SVt_PVHV:
10212 if (HvARRAY((HV*)sstr)) {
10213 STRLEN i = 0;
10214 const bool sharekeys = !!HvSHAREKEYS(sstr);
10215 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10216 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10217 char *darray;
10218 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
10219 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
10220 char);
10221 HvARRAY(dstr) = (HE**)darray;
10222 while (i <= sxhv->xhv_max) {
10223 const HE * const source = HvARRAY(sstr)[i];
10224 HvARRAY(dstr)[i] = source
10225 ? he_dup(source, sharekeys, param) : 0;
10226 ++i;
10227 }
10228 if (SvOOK(sstr)) {
10229 HEK *hvname;
10230 const struct xpvhv_aux * const saux = HvAUX(sstr);
10231 struct xpvhv_aux * const daux = HvAUX(dstr);
10232 /* This flag isn't copied. */
10233 /* SvOOK_on(hv) attacks the IV flags. */
10234 SvFLAGS(dstr) |= SVf_OOK;
10235
10236 hvname = saux->xhv_name;
10237 daux->xhv_name = hvname ? hek_dup(hvname, param) : hvname;
10238
10239 daux->xhv_riter = saux->xhv_riter;
10240 daux->xhv_eiter = saux->xhv_eiter
10241 ? he_dup(saux->xhv_eiter,
10242 (bool)!!HvSHAREKEYS(sstr), param) : 0;
10243 daux->xhv_backreferences =
10244 saux->xhv_backreferences
10245 ? (AV*) SvREFCNT_inc(
10246 sv_dup((SV*)saux->xhv_backreferences, param))
10247 : 0;
10248
10249 daux->xhv_mro_meta = saux->xhv_mro_meta
10250 ? mro_meta_dup(saux->xhv_mro_meta, param)
10251 : 0;
10252
10253 /* Record stashes for possible cloning in Perl_clone(). */
10254 if (hvname)
10255 av_push(param->stashes, dstr);
10256 }
10257 }
10258 else
10259 HvARRAY((HV*)dstr) = NULL;
10260 break;
10261 case SVt_PVCV:
10262 if (!(param->flags & CLONEf_COPY_STACKS)) {
10263 CvDEPTH(dstr) = 0;
10264 }
10265 case SVt_PVFM:
10266 /* NOTE: not refcounted */
10267 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
10268 OP_REFCNT_LOCK;
10269 if (!CvISXSUB(dstr))
10270 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
10271 OP_REFCNT_UNLOCK;
10272 if (CvCONST(dstr) && CvISXSUB(dstr)) {
10273 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
10274 SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
10275 sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
10276 }
10277 /* don't dup if copying back - CvGV isn't refcounted, so the
10278 * duped GV may never be freed. A bit of a hack! DAPM */
10279 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
10280 NULL : gv_dup(CvGV(dstr), param) ;
10281 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10282 CvOUTSIDE(dstr) =
10283 CvWEAKOUTSIDE(sstr)
10284 ? cv_dup( CvOUTSIDE(dstr), param)
10285 : cv_dup_inc(CvOUTSIDE(dstr), param);
10286 if (!CvISXSUB(dstr))
10287 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
10288 break;
10289 }
10290 }
10291 }
10292
10293 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10294 ++PL_sv_objcount;
10295
10296 return dstr;
10297 }
10298
10299/* duplicate a context */
10300
10301PERL_CONTEXT *
10302Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10303{
10304 PERL_CONTEXT *ncxs;
10305
10306 if (!cxs)
10307 return (PERL_CONTEXT*)NULL;
10308
10309 /* look for it in the table first */
10310 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10311 if (ncxs)
10312 return ncxs;
10313
10314 /* create anew and remember what it is */
10315 Newxz(ncxs, max + 1, PERL_CONTEXT);
10316 ptr_table_store(PL_ptr_table, cxs, ncxs);
10317
10318 while (ix >= 0) {
10319 PERL_CONTEXT * const cx = &cxs[ix];
10320 PERL_CONTEXT * const ncx = &ncxs[ix];
10321 ncx->cx_type = cx->cx_type;
10322 if (CxTYPE(cx) == CXt_SUBST) {
10323 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10324 }
10325 else {
10326 ncx->blk_oldsp = cx->blk_oldsp;
10327 ncx->blk_oldcop = cx->blk_oldcop;
10328 ncx->blk_oldmarksp = cx->blk_oldmarksp;
10329 ncx->blk_oldscopesp = cx->blk_oldscopesp;
10330 ncx->blk_oldpm = cx->blk_oldpm;
10331 ncx->blk_gimme = cx->blk_gimme;
10332 switch (CxTYPE(cx)) {
10333 case CXt_SUB:
10334 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
10335 ? cv_dup_inc(cx->blk_sub.cv, param)
10336 : cv_dup(cx->blk_sub.cv,param));
10337 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
10338 ? av_dup_inc(cx->blk_sub.argarray, param)
10339 : NULL);
10340 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
10341 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
10342 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10343 ncx->blk_sub.lval = cx->blk_sub.lval;
10344 ncx->blk_sub.retop = cx->blk_sub.retop;
10345 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
10346 cx->blk_sub.oldcomppad);
10347 break;
10348 case CXt_EVAL:
10349 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10350 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
10351 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
10352 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
10353 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
10354 ncx->blk_eval.retop = cx->blk_eval.retop;
10355 break;
10356 case CXt_LOOP:
10357 ncx->blk_loop.label = cx->blk_loop.label;
10358 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
10359 ncx->blk_loop.my_op = cx->blk_loop.my_op;
10360 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
10361 ? cx->blk_loop.iterdata
10362 : gv_dup((GV*)cx->blk_loop.iterdata, param));
10363 ncx->blk_loop.oldcomppad
10364 = (PAD*)ptr_table_fetch(PL_ptr_table,
10365 cx->blk_loop.oldcomppad);
10366 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
10367 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
10368 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
10369 ncx->blk_loop.iterix = cx->blk_loop.iterix;
10370 ncx->blk_loop.itermax = cx->blk_loop.itermax;
10371 break;
10372 case CXt_FORMAT:
10373 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
10374 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
10375 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
10376 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10377 ncx->blk_sub.retop = cx->blk_sub.retop;
10378 break;
10379 case CXt_BLOCK:
10380 case CXt_NULL:
10381 break;
10382 }
10383 }
10384 --ix;
10385 }
10386 return ncxs;
10387}
10388
10389/* duplicate a stack info structure */
10390
10391PERL_SI *
10392Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
10393{
10394 PERL_SI *nsi;
10395
10396 if (!si)
10397 return (PERL_SI*)NULL;
10398
10399 /* look for it in the table first */
10400 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10401 if (nsi)
10402 return nsi;
10403
10404 /* create anew and remember what it is */
10405 Newxz(nsi, 1, PERL_SI);
10406 ptr_table_store(PL_ptr_table, si, nsi);
10407
10408 nsi->si_stack = av_dup_inc(si->si_stack, param);
10409 nsi->si_cxix = si->si_cxix;
10410 nsi->si_cxmax = si->si_cxmax;
10411 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
10412 nsi->si_type = si->si_type;
10413 nsi->si_prev = si_dup(si->si_prev, param);
10414 nsi->si_next = si_dup(si->si_next, param);
10415 nsi->si_markoff = si->si_markoff;
10416
10417 return nsi;
10418}
10419
10420#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10421#define TOPINT(ss,ix) ((ss)[ix].any_i32)
10422#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10423#define TOPLONG(ss,ix) ((ss)[ix].any_long)
10424#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10425#define TOPIV(ss,ix) ((ss)[ix].any_iv)
10426#define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10427#define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
10428#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10429#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10430#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10431#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10432#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10433#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10434
10435/* XXXXX todo */
10436#define pv_dup_inc(p) SAVEPV(p)
10437#define pv_dup(p) SAVEPV(p)
10438#define svp_dup_inc(p,pp) any_dup(p,pp)
10439
10440/* map any object to the new equivent - either something in the
10441 * ptr table, or something in the interpreter structure
10442 */
10443
10444void *
10445Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
10446{
10447 void *ret;
10448
10449 if (!v)
10450 return (void*)NULL;
10451
10452 /* look for it in the table first */
10453 ret = ptr_table_fetch(PL_ptr_table, v);
10454 if (ret)
10455 return ret;
10456
10457 /* see if it is part of the interpreter structure */
10458 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
10459 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
10460 else {
10461 ret = v;
10462 }
10463
10464 return ret;
10465}
10466
10467/* duplicate the save stack */
10468
10469ANY *
10470Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
10471{
10472 dVAR;
10473 ANY * const ss = proto_perl->Isavestack;
10474 const I32 max = proto_perl->Isavestack_max;
10475 I32 ix = proto_perl->Isavestack_ix;
10476 ANY *nss;
10477 SV *sv;
10478 GV *gv;
10479 AV *av;
10480 HV *hv;
10481 void* ptr;
10482 int intval;
10483 long longval;
10484 GP *gp;
10485 IV iv;
10486 I32 i;
10487 char *c = NULL;
10488 void (*dptr) (void*);
10489 void (*dxptr) (pTHX_ void*);
10490
10491 Newxz(nss, max, ANY);
10492
10493 while (ix > 0) {
10494 const I32 type = POPINT(ss,ix);
10495 TOPINT(nss,ix) = type;
10496 switch (type) {
10497 case SAVEt_HELEM: /* hash element */
10498 sv = (SV*)POPPTR(ss,ix);
10499 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10500 /* fall through */
10501 case SAVEt_ITEM: /* normal string */
10502 case SAVEt_SV: /* scalar reference */
10503 sv = (SV*)POPPTR(ss,ix);
10504 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10505 /* fall through */
10506 case SAVEt_FREESV:
10507 case SAVEt_MORTALIZESV:
10508 sv = (SV*)POPPTR(ss,ix);
10509 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10510 break;
10511 case SAVEt_SHARED_PVREF: /* char* in shared space */
10512 c = (char*)POPPTR(ss,ix);
10513 TOPPTR(nss,ix) = savesharedpv(c);
10514 ptr = POPPTR(ss,ix);
10515 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10516 break;
10517 case SAVEt_GENERIC_SVREF: /* generic sv */
10518 case SAVEt_SVREF: /* scalar reference */
10519 sv = (SV*)POPPTR(ss,ix);
10520 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10521 ptr = POPPTR(ss,ix);
10522 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10523 break;
10524 case SAVEt_HV: /* hash reference */
10525 case SAVEt_AV: /* array reference */
10526 sv = (SV*) POPPTR(ss,ix);
10527 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10528 /* fall through */
10529 case SAVEt_COMPPAD:
10530 case SAVEt_NSTAB:
10531 sv = (SV*) POPPTR(ss,ix);
10532 TOPPTR(nss,ix) = sv_dup(sv, param);
10533 break;
10534 case SAVEt_INT: /* int reference */
10535 ptr = POPPTR(ss,ix);
10536 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10537 intval = (int)POPINT(ss,ix);
10538 TOPINT(nss,ix) = intval;
10539 break;
10540 case SAVEt_LONG: /* long reference */
10541 ptr = POPPTR(ss,ix);
10542 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10543 /* fall through */
10544 case SAVEt_CLEARSV:
10545 longval = (long)POPLONG(ss,ix);
10546 TOPLONG(nss,ix) = longval;
10547 break;
10548 case SAVEt_I32: /* I32 reference */
10549 case SAVEt_I16: /* I16 reference */
10550 case SAVEt_I8: /* I8 reference */
10551 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
10552 ptr = POPPTR(ss,ix);
10553 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10554 i = POPINT(ss,ix);
10555 TOPINT(nss,ix) = i;
10556 break;
10557 case SAVEt_IV: /* IV reference */
10558 ptr = POPPTR(ss,ix);
10559 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10560 iv = POPIV(ss,ix);
10561 TOPIV(nss,ix) = iv;
10562 break;
10563 case SAVEt_HPTR: /* HV* reference */
10564 case SAVEt_APTR: /* AV* reference */
10565 case SAVEt_SPTR: /* SV* reference */
10566 ptr = POPPTR(ss,ix);
10567 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10568 sv = (SV*)POPPTR(ss,ix);
10569 TOPPTR(nss,ix) = sv_dup(sv, param);
10570 break;
10571 case SAVEt_VPTR: /* random* reference */
10572 ptr = POPPTR(ss,ix);
10573 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10574 ptr = POPPTR(ss,ix);
10575 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10576 break;
10577 case SAVEt_GENERIC_PVREF: /* generic char* */
10578 case SAVEt_PPTR: /* char* reference */
10579 ptr = POPPTR(ss,ix);
10580 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10581 c = (char*)POPPTR(ss,ix);
10582 TOPPTR(nss,ix) = pv_dup(c);
10583 break;
10584 case SAVEt_GP: /* scalar reference */
10585 gp = (GP*)POPPTR(ss,ix);
10586 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
10587 (void)GpREFCNT_inc(gp);
10588 gv = (GV*)POPPTR(ss,ix);
10589 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10590 break;
10591 case SAVEt_FREEOP:
10592 ptr = POPPTR(ss,ix);
10593 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10594 /* these are assumed to be refcounted properly */
10595 OP *o;
10596 switch (((OP*)ptr)->op_type) {
10597 case OP_LEAVESUB:
10598 case OP_LEAVESUBLV:
10599 case OP_LEAVEEVAL:
10600 case OP_LEAVE:
10601 case OP_SCOPE:
10602 case OP_LEAVEWRITE:
10603 TOPPTR(nss,ix) = ptr;
10604 o = (OP*)ptr;
10605 OP_REFCNT_LOCK;
10606 (void) OpREFCNT_inc(o);
10607 OP_REFCNT_UNLOCK;
10608 break;
10609 default:
10610 TOPPTR(nss,ix) = NULL;
10611 break;
10612 }
10613 }
10614 else
10615 TOPPTR(nss,ix) = NULL;
10616 break;
10617 case SAVEt_FREEPV:
10618 c = (char*)POPPTR(ss,ix);
10619 TOPPTR(nss,ix) = pv_dup_inc(c);
10620 break;
10621 case SAVEt_DELETE:
10622 hv = (HV*)POPPTR(ss,ix);
10623 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10624 c = (char*)POPPTR(ss,ix);
10625 TOPPTR(nss,ix) = pv_dup_inc(c);
10626 /* fall through */
10627 case SAVEt_STACK_POS: /* Position on Perl stack */
10628 i = POPINT(ss,ix);
10629 TOPINT(nss,ix) = i;
10630 break;
10631 case SAVEt_DESTRUCTOR:
10632 ptr = POPPTR(ss,ix);
10633 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10634 dptr = POPDPTR(ss,ix);
10635 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
10636 any_dup(FPTR2DPTR(void *, dptr),
10637 proto_perl));
10638 break;
10639 case SAVEt_DESTRUCTOR_X:
10640 ptr = POPPTR(ss,ix);
10641 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10642 dxptr = POPDXPTR(ss,ix);
10643 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
10644 any_dup(FPTR2DPTR(void *, dxptr),
10645 proto_perl));
10646 break;
10647 case SAVEt_REGCONTEXT:
10648 case SAVEt_ALLOC:
10649 i = POPINT(ss,ix);
10650 TOPINT(nss,ix) = i;
10651 ix -= i;
10652 break;
10653 case SAVEt_AELEM: /* array element */
10654 sv = (SV*)POPPTR(ss,ix);
10655 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10656 i = POPINT(ss,ix);
10657 TOPINT(nss,ix) = i;
10658 av = (AV*)POPPTR(ss,ix);
10659 TOPPTR(nss,ix) = av_dup_inc(av, param);
10660 break;
10661 case SAVEt_OP:
10662 ptr = POPPTR(ss,ix);
10663 TOPPTR(nss,ix) = ptr;
10664 break;
10665 case SAVEt_HINTS:
10666 i = POPINT(ss,ix);
10667 TOPINT(nss,ix) = i;
10668 ptr = POPPTR(ss,ix);
10669 if (ptr) {
10670 HINTS_REFCNT_LOCK;
10671 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
10672 HINTS_REFCNT_UNLOCK;
10673 }
10674 TOPPTR(nss,ix) = ptr;
10675 if (i & HINT_LOCALIZE_HH) {
10676 hv = (HV*)POPPTR(ss,ix);
10677 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10678 }
10679 break;
10680 case SAVEt_PADSV:
10681 longval = (long)POPLONG(ss,ix);
10682 TOPLONG(nss,ix) = longval;
10683 ptr = POPPTR(ss,ix);
10684 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10685 sv = (SV*)POPPTR(ss,ix);
10686 TOPPTR(nss,ix) = sv_dup(sv, param);
10687 break;
10688 case SAVEt_BOOL:
10689 ptr = POPPTR(ss,ix);
10690 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10691 longval = (long)POPBOOL(ss,ix);
10692 TOPBOOL(nss,ix) = (bool)longval;
10693 break;
10694 case SAVEt_SET_SVFLAGS:
10695 i = POPINT(ss,ix);
10696 TOPINT(nss,ix) = i;
10697 i = POPINT(ss,ix);
10698 TOPINT(nss,ix) = i;
10699 sv = (SV*)POPPTR(ss,ix);
10700 TOPPTR(nss,ix) = sv_dup(sv, param);
10701 break;
10702 case SAVEt_RE_STATE:
10703 {
10704 const struct re_save_state *const old_state
10705 = (struct re_save_state *)
10706 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
10707 struct re_save_state *const new_state
10708 = (struct re_save_state *)
10709 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
10710
10711 Copy(old_state, new_state, 1, struct re_save_state);
10712 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
10713
10714 new_state->re_state_bostr
10715 = pv_dup(old_state->re_state_bostr);
10716 new_state->re_state_reginput
10717 = pv_dup(old_state->re_state_reginput);
10718 new_state->re_state_regeol
10719 = pv_dup(old_state->re_state_regeol);
10720 new_state->re_state_regoffs
10721 = (regexp_paren_pair*)
10722 any_dup(old_state->re_state_regoffs, proto_perl);
10723 new_state->re_state_reglastparen
10724 = (U32*) any_dup(old_state->re_state_reglastparen,
10725 proto_perl);
10726 new_state->re_state_reglastcloseparen
10727 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
10728 proto_perl);
10729 /* XXX This just has to be broken. The old save_re_context
10730 code did SAVEGENERICPV(PL_reg_start_tmp);
10731 PL_reg_start_tmp is char **.
10732 Look above to what the dup code does for
10733 SAVEt_GENERIC_PVREF
10734 It can never have worked.
10735 So this is merely a faithful copy of the exiting bug: */
10736 new_state->re_state_reg_start_tmp
10737 = (char **) pv_dup((char *)
10738 old_state->re_state_reg_start_tmp);
10739 /* I assume that it only ever "worked" because no-one called
10740 (pseudo)fork while the regexp engine had re-entered itself.
10741 */
10742#ifdef PERL_OLD_COPY_ON_WRITE
10743 new_state->re_state_nrs
10744 = sv_dup(old_state->re_state_nrs, param);
10745#endif
10746 new_state->re_state_reg_magic
10747 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
10748 proto_perl);
10749 new_state->re_state_reg_oldcurpm
10750 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
10751 proto_perl);
10752 new_state->re_state_reg_curpm
10753 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
10754 proto_perl);
10755 new_state->re_state_reg_oldsaved
10756 = pv_dup(old_state->re_state_reg_oldsaved);
10757 new_state->re_state_reg_poscache
10758 = pv_dup(old_state->re_state_reg_poscache);
10759 new_state->re_state_reg_starttry
10760 = pv_dup(old_state->re_state_reg_starttry);
10761 break;
10762 }
10763 case SAVEt_COMPILE_WARNINGS:
10764 ptr = POPPTR(ss,ix);
10765 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
10766 break;
10767 case SAVEt_PARSER:
10768 ptr = POPPTR(ss,ix);
10769 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
10770 break;
10771 default:
10772 Perl_croak(aTHX_
10773 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
10774 }
10775 }
10776
10777 return nss;
10778}
10779
10780
10781/* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
10782 * flag to the result. This is done for each stash before cloning starts,
10783 * so we know which stashes want their objects cloned */
10784
10785static void
10786do_mark_cloneable_stash(pTHX_ SV *sv)
10787{
10788 const HEK * const hvname = HvNAME_HEK((HV*)sv);
10789 if (hvname) {
10790 GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
10791 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
10792 if (cloner && GvCV(cloner)) {
10793 dSP;
10794 UV status;
10795
10796 ENTER;
10797 SAVETMPS;
10798 PUSHMARK(SP);
10799 XPUSHs(sv_2mortal(newSVhek(hvname)));
10800 PUTBACK;
10801 call_sv((SV*)GvCV(cloner), G_SCALAR);
10802 SPAGAIN;
10803 status = POPu;
10804 PUTBACK;
10805 FREETMPS;
10806 LEAVE;
10807 if (status)
10808 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
10809 }
10810 }
10811}
10812
10813
10814
10815/*
10816=for apidoc perl_clone
10817
10818Create and return a new interpreter by cloning the current one.
10819
10820perl_clone takes these flags as parameters:
10821
10822CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10823without it we only clone the data and zero the stacks,
10824with it we copy the stacks and the new perl interpreter is
10825ready to run at the exact same point as the previous one.
10826The pseudo-fork code uses COPY_STACKS while the
10827threads->create doesn't.
10828
10829CLONEf_KEEP_PTR_TABLE
10830perl_clone keeps a ptr_table with the pointer of the old
10831variable as a key and the new variable as a value,
10832this allows it to check if something has been cloned and not
10833clone it again but rather just use the value and increase the
10834refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10835the ptr_table using the function
10836C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10837reason to keep it around is if you want to dup some of your own
10838variable who are outside the graph perl scans, example of this
10839code is in threads.xs create
10840
10841CLONEf_CLONE_HOST
10842This is a win32 thing, it is ignored on unix, it tells perls
10843win32host code (which is c++) to clone itself, this is needed on
10844win32 if you want to run two threads at the same time,
10845if you just want to do some stuff in a separate perl interpreter
10846and then throw it away and return to the original one,
10847you don't need to do anything.
10848
10849=cut
10850*/
10851
10852/* XXX the above needs expanding by someone who actually understands it ! */
10853EXTERN_C PerlInterpreter *
10854perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10855
10856PerlInterpreter *
10857perl_clone(PerlInterpreter *proto_perl, UV flags)
10858{
10859 dVAR;
10860#ifdef PERL_IMPLICIT_SYS
10861
10862 /* perlhost.h so we need to call into it
10863 to clone the host, CPerlHost should have a c interface, sky */
10864
10865 if (flags & CLONEf_CLONE_HOST) {
10866 return perl_clone_host(proto_perl,flags);
10867 }
10868 return perl_clone_using(proto_perl, flags,
10869 proto_perl->IMem,
10870 proto_perl->IMemShared,
10871 proto_perl->IMemParse,
10872 proto_perl->IEnv,
10873 proto_perl->IStdIO,
10874 proto_perl->ILIO,
10875 proto_perl->IDir,
10876 proto_perl->ISock,
10877 proto_perl->IProc);
10878}
10879
10880PerlInterpreter *
10881perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10882 struct IPerlMem* ipM, struct IPerlMem* ipMS,
10883 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10884 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10885 struct IPerlDir* ipD, struct IPerlSock* ipS,
10886 struct IPerlProc* ipP)
10887{
10888 /* XXX many of the string copies here can be optimized if they're
10889 * constants; they need to be allocated as common memory and just
10890 * their pointers copied. */
10891
10892 IV i;
10893 CLONE_PARAMS clone_params;
10894 CLONE_PARAMS* const param = &clone_params;
10895
10896 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
10897 /* for each stash, determine whether its objects should be cloned */
10898 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10899 PERL_SET_THX(my_perl);
10900
10901# ifdef DEBUGGING
10902 PoisonNew(my_perl, 1, PerlInterpreter);
10903 PL_op = NULL;
10904 PL_curcop = NULL;
10905 PL_markstack = 0;
10906 PL_scopestack = 0;
10907 PL_savestack = 0;
10908 PL_savestack_ix = 0;
10909 PL_savestack_max = -1;
10910 PL_sig_pending = 0;
10911 PL_parser = NULL;
10912 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10913# else /* !DEBUGGING */
10914 Zero(my_perl, 1, PerlInterpreter);
10915# endif /* DEBUGGING */
10916
10917 /* host pointers */
10918 PL_Mem = ipM;
10919 PL_MemShared = ipMS;
10920 PL_MemParse = ipMP;
10921 PL_Env = ipE;
10922 PL_StdIO = ipStd;
10923 PL_LIO = ipLIO;
10924 PL_Dir = ipD;
10925 PL_Sock = ipS;
10926 PL_Proc = ipP;
10927#else /* !PERL_IMPLICIT_SYS */
10928 IV i;
10929 CLONE_PARAMS clone_params;
10930 CLONE_PARAMS* param = &clone_params;
10931 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
10932 /* for each stash, determine whether its objects should be cloned */
10933 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10934 PERL_SET_THX(my_perl);
10935
10936# ifdef DEBUGGING
10937 PoisonNew(my_perl, 1, PerlInterpreter);
10938 PL_op = NULL;
10939 PL_curcop = NULL;
10940 PL_markstack = 0;
10941 PL_scopestack = 0;
10942 PL_savestack = 0;
10943 PL_savestack_ix = 0;
10944 PL_savestack_max = -1;
10945 PL_sig_pending = 0;
10946 PL_parser = NULL;
10947 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10948# else /* !DEBUGGING */
10949 Zero(my_perl, 1, PerlInterpreter);
10950# endif /* DEBUGGING */
10951#endif /* PERL_IMPLICIT_SYS */
10952 param->flags = flags;
10953 param->proto_perl = proto_perl;
10954
10955 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
10956
10957 PL_body_arenas = NULL;
10958 Zero(&PL_body_roots, 1, PL_body_roots);
10959
10960 PL_nice_chunk = NULL;
10961 PL_nice_chunk_size = 0;
10962 PL_sv_count = 0;
10963 PL_sv_objcount = 0;
10964 PL_sv_root = NULL;
10965 PL_sv_arenaroot = NULL;
10966
10967 PL_debug = proto_perl->Idebug;
10968
10969 PL_hash_seed = proto_perl->Ihash_seed;
10970 PL_rehash_seed = proto_perl->Irehash_seed;
10971
10972#ifdef USE_REENTRANT_API
10973 /* XXX: things like -Dm will segfault here in perlio, but doing
10974 * PERL_SET_CONTEXT(proto_perl);
10975 * breaks too many other things
10976 */
10977 Perl_reentrant_init(aTHX);
10978#endif
10979
10980 /* create SV map for pointer relocation */
10981 PL_ptr_table = ptr_table_new();
10982
10983 /* initialize these special pointers as early as possible */
10984 SvANY(&PL_sv_undef) = NULL;
10985 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
10986 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
10987 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
10988
10989 SvANY(&PL_sv_no) = new_XPVNV();
10990 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
10991 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10992 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10993 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
10994 SvCUR_set(&PL_sv_no, 0);
10995 SvLEN_set(&PL_sv_no, 1);
10996 SvIV_set(&PL_sv_no, 0);
10997 SvNV_set(&PL_sv_no, 0);
10998 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
10999
11000 SvANY(&PL_sv_yes) = new_XPVNV();
11001 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
11002 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11003 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11004 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
11005 SvCUR_set(&PL_sv_yes, 1);
11006 SvLEN_set(&PL_sv_yes, 2);
11007 SvIV_set(&PL_sv_yes, 1);
11008 SvNV_set(&PL_sv_yes, 1);
11009 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11010
11011 /* create (a non-shared!) shared string table */
11012 PL_strtab = newHV();
11013 HvSHAREKEYS_off(PL_strtab);
11014 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11015 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11016
11017 PL_compiling = proto_perl->Icompiling;
11018
11019 /* These two PVs will be free'd special way so must set them same way op.c does */
11020 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11021 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11022
11023 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
11024 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11025
11026 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11027 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
11028 if (PL_compiling.cop_hints_hash) {
11029 HINTS_REFCNT_LOCK;
11030 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
11031 HINTS_REFCNT_UNLOCK;
11032 }
11033 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
11034#ifdef PERL_DEBUG_READONLY_OPS
11035 PL_slabs = NULL;
11036 PL_slab_count = 0;
11037#endif
11038
11039 /* pseudo environmental stuff */
11040 PL_origargc = proto_perl->Iorigargc;
11041 PL_origargv = proto_perl->Iorigargv;
11042
11043 param->stashes = newAV(); /* Setup array of objects to call clone on */
11044
11045 /* Set tainting stuff before PerlIO_debug can possibly get called */
11046 PL_tainting = proto_perl->Itainting;
11047 PL_taint_warn = proto_perl->Itaint_warn;
11048
11049#ifdef PERLIO_LAYERS
11050 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11051 PerlIO_clone(aTHX_ proto_perl, param);
11052#endif
11053
11054 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
11055 PL_incgv = gv_dup(proto_perl->Iincgv, param);
11056 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
11057 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
11058 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
11059 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
11060
11061 /* switches */
11062 PL_minus_c = proto_perl->Iminus_c;
11063 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
11064 PL_localpatches = proto_perl->Ilocalpatches;
11065 PL_splitstr = proto_perl->Isplitstr;
11066 PL_preprocess = proto_perl->Ipreprocess;
11067 PL_minus_n = proto_perl->Iminus_n;
11068 PL_minus_p = proto_perl->Iminus_p;
11069 PL_minus_l = proto_perl->Iminus_l;
11070 PL_minus_a = proto_perl->Iminus_a;
11071 PL_minus_E = proto_perl->Iminus_E;
11072 PL_minus_F = proto_perl->Iminus_F;
11073 PL_doswitches = proto_perl->Idoswitches;
11074 PL_dowarn = proto_perl->Idowarn;
11075 PL_doextract = proto_perl->Idoextract;
11076 PL_sawampersand = proto_perl->Isawampersand;
11077 PL_unsafe = proto_perl->Iunsafe;
11078 PL_inplace = SAVEPV(proto_perl->Iinplace);
11079 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
11080 PL_perldb = proto_perl->Iperldb;
11081 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11082 PL_exit_flags = proto_perl->Iexit_flags;
11083
11084 /* magical thingies */
11085 /* XXX time(&PL_basetime) when asked for? */
11086 PL_basetime = proto_perl->Ibasetime;
11087 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
11088
11089 PL_maxsysfd = proto_perl->Imaxsysfd;
11090 PL_statusvalue = proto_perl->Istatusvalue;
11091#ifdef VMS
11092 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
11093#else
11094 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
11095#endif
11096 PL_encoding = sv_dup(proto_perl->Iencoding, param);
11097
11098 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
11099 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
11100 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
11101
11102
11103 /* RE engine related */
11104 Zero(&PL_reg_state, 1, struct re_save_state);
11105 PL_reginterp_cnt = 0;
11106 PL_regmatch_slab = NULL;
11107
11108 /* Clone the regex array */
11109 PL_regex_padav = newAV();
11110 {
11111 const I32 len = av_len((AV*)proto_perl->Iregex_padav);
11112 SV* const * const regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
11113 IV i;
11114 av_push(PL_regex_padav, sv_dup_inc_NN(regexen[0],param));
11115 for(i = 1; i <= len; i++) {
11116 const SV * const regex = regexen[i];
11117 SV * const sv =
11118 SvREPADTMP(regex)
11119 ? sv_dup_inc(regex, param)
11120 : SvREFCNT_inc(
11121 newSViv(PTR2IV(CALLREGDUPE(
11122 INT2PTR(REGEXP *, SvIVX(regex)), param))))
11123 ;
11124 if (SvFLAGS(regex) & SVf_BREAK)
11125 SvFLAGS(sv) |= SVf_BREAK; /* unrefcnted PL_curpm */
11126 av_push(PL_regex_padav, sv);
11127 }
11128 }
11129 PL_regex_pad = AvARRAY(PL_regex_padav);
11130
11131 /* shortcuts to various I/O objects */
11132 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11133 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11134 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11135 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11136 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11137 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
11138
11139 /* shortcuts to regexp stuff */
11140 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
11141
11142 /* shortcuts to misc objects */
11143 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
11144
11145 /* shortcuts to debugging objects */
11146 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
11147 PL_DBline = gv_dup(proto_perl->IDBline, param);
11148 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
11149 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
11150 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
11151 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
11152 PL_dbargs = av_dup(proto_perl->Idbargs, param);
11153
11154 /* symbol tables */
11155 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
11156 PL_curstash = hv_dup(proto_perl->Icurstash, param);
11157 PL_debstash = hv_dup(proto_perl->Idebstash, param);
11158 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
11159 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
11160
11161 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
11162 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
11163 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
11164 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
11165 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
11166 PL_endav = av_dup_inc(proto_perl->Iendav, param);
11167 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
11168 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
11169
11170 PL_sub_generation = proto_perl->Isub_generation;
11171 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
11172
11173 /* funky return mechanisms */
11174 PL_forkprocess = proto_perl->Iforkprocess;
11175
11176 /* subprocess state */
11177 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
11178
11179 /* internal state */
11180 PL_maxo = proto_perl->Imaxo;
11181 if (proto_perl->Iop_mask)
11182 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11183 else
11184 PL_op_mask = NULL;
11185 /* PL_asserting = proto_perl->Iasserting; */
11186
11187 /* current interpreter roots */
11188 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
11189 OP_REFCNT_LOCK;
11190 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
11191 OP_REFCNT_UNLOCK;
11192 PL_main_start = proto_perl->Imain_start;
11193 PL_eval_root = proto_perl->Ieval_root;
11194 PL_eval_start = proto_perl->Ieval_start;
11195
11196 /* runtime control stuff */
11197 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11198
11199 PL_filemode = proto_perl->Ifilemode;
11200 PL_lastfd = proto_perl->Ilastfd;
11201 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11202 PL_Argv = NULL;
11203 PL_Cmd = NULL;
11204 PL_gensym = proto_perl->Igensym;
11205 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11206 PL_laststatval = proto_perl->Ilaststatval;
11207 PL_laststype = proto_perl->Ilaststype;
11208 PL_mess_sv = NULL;
11209
11210 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11211
11212 /* interpreter atexit processing */
11213 PL_exitlistlen = proto_perl->Iexitlistlen;
11214 if (PL_exitlistlen) {
11215 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11216 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11217 }
11218 else
11219 PL_exitlist = (PerlExitListEntry*)NULL;
11220
11221 PL_my_cxt_size = proto_perl->Imy_cxt_size;
11222 if (PL_my_cxt_size) {
11223 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
11224 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
11225#ifdef PERL_GLOBAL_STRUCT_PRIVATE
11226 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
11227 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
11228#endif
11229 }
11230 else {
11231 PL_my_cxt_list = (void**)NULL;
11232#ifdef PERL_GLOBAL_STRUCT_PRIVATE
11233 PL_my_cxt_keys = (const char**)NULL;
11234#endif
11235 }
11236 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
11237 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
11238 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11239
11240 PL_profiledata = NULL;
11241
11242 PL_compcv = cv_dup(proto_perl->Icompcv, param);
11243
11244 PAD_CLONE_VARS(proto_perl, param);
11245
11246#ifdef HAVE_INTERP_INTERN
11247 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11248#endif
11249
11250 /* more statics moved here */
11251 PL_generation = proto_perl->Igeneration;
11252 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
11253
11254 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11255 PL_in_clean_all = proto_perl->Iin_clean_all;
11256
11257 PL_uid = proto_perl->Iuid;
11258 PL_euid = proto_perl->Ieuid;
11259 PL_gid = proto_perl->Igid;
11260 PL_egid = proto_perl->Iegid;
11261 PL_nomemok = proto_perl->Inomemok;
11262 PL_an = proto_perl->Ian;
11263 PL_evalseq = proto_perl->Ievalseq;
11264 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11265 PL_origalen = proto_perl->Iorigalen;
11266#ifdef PERL_USES_PL_PIDSTATUS
11267 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11268#endif
11269 PL_osname = SAVEPV(proto_perl->Iosname);
11270 PL_sighandlerp = proto_perl->Isighandlerp;
11271
11272 PL_runops = proto_perl->Irunops;
11273
11274#ifdef CSH
11275 PL_cshlen = proto_perl->Icshlen;
11276 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
11277#endif
11278
11279 PL_parser = parser_dup(proto_perl->Iparser, param);
11280
11281 PL_subline = proto_perl->Isubline;
11282 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
11283
11284#ifdef FCRYPT
11285 PL_cryptseen = proto_perl->Icryptseen;
11286#endif
11287
11288 PL_hints = proto_perl->Ihints;
11289
11290 PL_amagic_generation = proto_perl->Iamagic_generation;
11291
11292#ifdef USE_LOCALE_COLLATE
11293 PL_collation_ix = proto_perl->Icollation_ix;
11294 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11295 PL_collation_standard = proto_perl->Icollation_standard;
11296 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11297 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11298#endif /* USE_LOCALE_COLLATE */
11299
11300#ifdef USE_LOCALE_NUMERIC
11301 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11302 PL_numeric_standard = proto_perl->Inumeric_standard;
11303 PL_numeric_local = proto_perl->Inumeric_local;
11304 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11305#endif /* !USE_LOCALE_NUMERIC */
11306
11307 /* utf8 character classes */
11308 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11309 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11310 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11311 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11312 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11313 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11314 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11315 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11316 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11317 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11318 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11319 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11320 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11321 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11322 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11323 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11324 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11325 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11326 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11327 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11328
11329 /* Did the locale setup indicate UTF-8? */
11330 PL_utf8locale = proto_perl->Iutf8locale;
11331 /* Unicode features (see perlrun/-C) */
11332 PL_unicode = proto_perl->Iunicode;
11333
11334 /* Pre-5.8 signals control */
11335 PL_signals = proto_perl->Isignals;
11336
11337 /* times() ticks per second */
11338 PL_clocktick = proto_perl->Iclocktick;
11339
11340 /* Recursion stopper for PerlIO_find_layer */
11341 PL_in_load_module = proto_perl->Iin_load_module;
11342
11343 /* sort() routine */
11344 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
11345
11346 /* Not really needed/useful since the reenrant_retint is "volatile",
11347 * but do it for consistency's sake. */
11348 PL_reentrant_retint = proto_perl->Ireentrant_retint;
11349
11350 /* Hooks to shared SVs and locks. */
11351 PL_sharehook = proto_perl->Isharehook;
11352 PL_lockhook = proto_perl->Ilockhook;
11353 PL_unlockhook = proto_perl->Iunlockhook;
11354 PL_threadhook = proto_perl->Ithreadhook;
11355
11356#ifdef THREADS_HAVE_PIDS
11357 PL_ppid = proto_perl->Ippid;
11358#endif
11359
11360 /* swatch cache */
11361 PL_last_swash_hv = NULL; /* reinits on demand */
11362 PL_last_swash_klen = 0;
11363 PL_last_swash_key[0]= '\0';
11364 PL_last_swash_tmps = (U8*)NULL;
11365 PL_last_swash_slen = 0;
11366
11367 PL_glob_index = proto_perl->Iglob_index;
11368 PL_srand_called = proto_perl->Isrand_called;
11369 PL_bitcount = NULL; /* reinits on demand */
11370
11371 if (proto_perl->Ipsig_pend) {
11372 Newxz(PL_psig_pend, SIG_SIZE, int);
11373 }
11374 else {
11375 PL_psig_pend = (int*)NULL;
11376 }
11377
11378 if (proto_perl->Ipsig_ptr) {
11379 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
11380 Newxz(PL_psig_name, SIG_SIZE, SV*);
11381 for (i = 1; i < SIG_SIZE; i++) {
11382 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11383 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11384 }
11385 }
11386 else {
11387 PL_psig_ptr = (SV**)NULL;
11388 PL_psig_name = (SV**)NULL;
11389 }
11390
11391 /* intrpvar.h stuff */
11392
11393 if (flags & CLONEf_COPY_STACKS) {
11394 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11395 PL_tmps_ix = proto_perl->Itmps_ix;
11396 PL_tmps_max = proto_perl->Itmps_max;
11397 PL_tmps_floor = proto_perl->Itmps_floor;
11398 Newxz(PL_tmps_stack, PL_tmps_max, SV*);
11399 i = 0;
11400 while (i <= PL_tmps_ix) {
11401 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Itmps_stack[i], param);
11402 ++i;
11403 }
11404
11405 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11406 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
11407 Newxz(PL_markstack, i, I32);
11408 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
11409 - proto_perl->Imarkstack);
11410 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
11411 - proto_perl->Imarkstack);
11412 Copy(proto_perl->Imarkstack, PL_markstack,
11413 PL_markstack_ptr - PL_markstack + 1, I32);
11414
11415 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11416 * NOTE: unlike the others! */
11417 PL_scopestack_ix = proto_perl->Iscopestack_ix;
11418 PL_scopestack_max = proto_perl->Iscopestack_max;
11419 Newxz(PL_scopestack, PL_scopestack_max, I32);
11420 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
11421
11422 /* NOTE: si_dup() looks at PL_markstack */
11423 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
11424
11425 /* PL_curstack = PL_curstackinfo->si_stack; */
11426 PL_curstack = av_dup(proto_perl->Icurstack, param);
11427 PL_mainstack = av_dup(proto_perl->Imainstack, param);
11428
11429 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11430 PL_stack_base = AvARRAY(PL_curstack);
11431 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
11432 - proto_perl->Istack_base);
11433 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
11434
11435 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11436 * NOTE: unlike the others! */
11437 PL_savestack_ix = proto_perl->Isavestack_ix;
11438 PL_savestack_max = proto_perl->Isavestack_max;
11439 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
11440 PL_savestack = ss_dup(proto_perl, param);
11441 }
11442 else {
11443 init_stacks();
11444 ENTER; /* perl_destruct() wants to LEAVE; */
11445
11446 /* although we're not duplicating the tmps stack, we should still
11447 * add entries for any SVs on the tmps stack that got cloned by a
11448 * non-refcount means (eg a temp in @_); otherwise they will be
11449 * orphaned
11450 */
11451 for (i = 0; i<= proto_perl->Itmps_ix; i++) {
11452 SV * const nsv = (SV*)ptr_table_fetch(PL_ptr_table,
11453 proto_perl->Itmps_stack[i]);
11454 if (nsv && !SvREFCNT(nsv)) {
11455 EXTEND_MORTAL(1);
11456 PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple(nsv);
11457 }
11458 }
11459 }
11460
11461 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
11462 PL_top_env = &PL_start_env;
11463
11464 PL_op = proto_perl->Iop;
11465
11466 PL_Sv = NULL;
11467 PL_Xpv = (XPV*)NULL;
11468 PL_na = proto_perl->Ina;
11469
11470 PL_statbuf = proto_perl->Istatbuf;
11471 PL_statcache = proto_perl->Istatcache;
11472 PL_statgv = gv_dup(proto_perl->Istatgv, param);
11473 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
11474#ifdef HAS_TIMES
11475 PL_timesbuf = proto_perl->Itimesbuf;
11476#endif
11477
11478 PL_tainted = proto_perl->Itainted;
11479 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
11480 PL_rs = sv_dup_inc(proto_perl->Irs, param);
11481 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
11482 PL_ofs_sv = sv_dup_inc(proto_perl->Iofs_sv, param);
11483 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
11484 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
11485 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
11486 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
11487 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
11488
11489 PL_restartop = proto_perl->Irestartop;
11490 PL_in_eval = proto_perl->Iin_eval;
11491 PL_delaymagic = proto_perl->Idelaymagic;
11492 PL_dirty = proto_perl->Idirty;
11493 PL_localizing = proto_perl->Ilocalizing;
11494
11495 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
11496 PL_hv_fetch_ent_mh = NULL;
11497 PL_modcount = proto_perl->Imodcount;
11498 PL_lastgotoprobe = NULL;
11499 PL_dumpindent = proto_perl->Idumpindent;
11500
11501 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
11502 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
11503 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
11504 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
11505 PL_efloatbuf = NULL; /* reinits on demand */
11506 PL_efloatsize = 0; /* reinits on demand */
11507
11508 /* regex stuff */
11509
11510 PL_screamfirst = NULL;
11511 PL_screamnext = NULL;
11512 PL_maxscream = -1; /* reinits on demand */
11513 PL_lastscream = NULL;
11514
11515
11516 PL_regdummy = proto_perl->Iregdummy;
11517 PL_colorset = 0; /* reinits PL_colors[] */
11518 /*PL_colors[6] = {0,0,0,0,0,0};*/
11519
11520
11521
11522 /* Pluggable optimizer */
11523 PL_peepp = proto_perl->Ipeepp;
11524
11525 PL_stashcache = newHV();
11526
11527 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
11528 proto_perl->Iwatchaddr);
11529 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
11530 if (PL_debug && PL_watchaddr) {
11531 PerlIO_printf(Perl_debug_log,
11532 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
11533 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
11534 PTR2UV(PL_watchok));
11535 }
11536
11537 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11538 ptr_table_free(PL_ptr_table);
11539 PL_ptr_table = NULL;
11540 }
11541
11542 /* Call the ->CLONE method, if it exists, for each of the stashes
11543 identified by sv_dup() above.
11544 */
11545 while(av_len(param->stashes) != -1) {
11546 HV* const stash = (HV*) av_shift(param->stashes);
11547 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11548 if (cloner && GvCV(cloner)) {
11549 dSP;
11550 ENTER;
11551 SAVETMPS;
11552 PUSHMARK(SP);
11553 XPUSHs(sv_2mortal(newSVhek(HvNAME_HEK(stash))));
11554 PUTBACK;
11555 call_sv((SV*)GvCV(cloner), G_DISCARD);
11556 FREETMPS;
11557 LEAVE;
11558 }
11559 }
11560
11561 SvREFCNT_dec(param->stashes);
11562
11563 /* orphaned? eg threads->new inside BEGIN or use */
11564 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
11565 SvREFCNT_inc_simple_void(PL_compcv);
11566 SAVEFREESV(PL_compcv);
11567 }
11568
11569 return my_perl;
11570}
11571
11572#endif /* USE_ITHREADS */
11573
11574/*
11575=head1 Unicode Support
11576
11577=for apidoc sv_recode_to_utf8
11578
11579The encoding is assumed to be an Encode object, on entry the PV
11580of the sv is assumed to be octets in that encoding, and the sv
11581will be converted into Unicode (and UTF-8).
11582
11583If the sv already is UTF-8 (or if it is not POK), or if the encoding
11584is not a reference, nothing is done to the sv. If the encoding is not
11585an C<Encode::XS> Encoding object, bad things will happen.
11586(See F<lib/encoding.pm> and L<Encode>).
11587
11588The PV of the sv is returned.
11589
11590=cut */
11591
11592char *
11593Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11594{
11595 dVAR;
11596 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11597 SV *uni;
11598 STRLEN len;
11599 const char *s;
11600 dSP;
11601 ENTER;
11602 SAVETMPS;
11603 save_re_context();
11604 PUSHMARK(sp);
11605 EXTEND(SP, 3);
11606 XPUSHs(encoding);
11607 XPUSHs(sv);
11608/*
11609 NI-S 2002/07/09
11610 Passing sv_yes is wrong - it needs to be or'ed set of constants
11611 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11612 remove converted chars from source.
11613
11614 Both will default the value - let them.
11615
11616 XPUSHs(&PL_sv_yes);
11617*/
11618 PUTBACK;
11619 call_method("decode", G_SCALAR);
11620 SPAGAIN;
11621 uni = POPs;
11622 PUTBACK;
11623 s = SvPV_const(uni, len);
11624 if (s != SvPVX_const(sv)) {
11625 SvGROW(sv, len + 1);
11626 Move(s, SvPVX(sv), len + 1, char);
11627 SvCUR_set(sv, len);
11628 }
11629 FREETMPS;
11630 LEAVE;
11631 SvUTF8_on(sv);
11632 return SvPVX(sv);
11633 }
11634 return SvPOKp(sv) ? SvPVX(sv) : NULL;
11635}
11636
11637/*
11638=for apidoc sv_cat_decode
11639
11640The encoding is assumed to be an Encode object, the PV of the ssv is
11641assumed to be octets in that encoding and decoding the input starts
11642from the position which (PV + *offset) pointed to. The dsv will be
11643concatenated the decoded UTF-8 string from ssv. Decoding will terminate
11644when the string tstr appears in decoding output or the input ends on
11645the PV of the ssv. The value which the offset points will be modified
11646to the last input position on the ssv.
11647
11648Returns TRUE if the terminator was found, else returns FALSE.
11649
11650=cut */
11651
11652bool
11653Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11654 SV *ssv, int *offset, char *tstr, int tlen)
11655{
11656 dVAR;
11657 bool ret = FALSE;
11658 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11659 SV *offsv;
11660 dSP;
11661 ENTER;
11662 SAVETMPS;
11663 save_re_context();
11664 PUSHMARK(sp);
11665 EXTEND(SP, 6);
11666 XPUSHs(encoding);
11667 XPUSHs(dsv);
11668 XPUSHs(ssv);
11669 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11670 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11671 PUTBACK;
11672 call_method("cat_decode", G_SCALAR);
11673 SPAGAIN;
11674 ret = SvTRUE(TOPs);
11675 *offset = SvIV(offsv);
11676 PUTBACK;
11677 FREETMPS;
11678 LEAVE;
11679 }
11680 else
11681 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
11682 return ret;
11683
11684}
11685
11686/* ---------------------------------------------------------------------
11687 *
11688 * support functions for report_uninit()
11689 */
11690
11691/* the maxiumum size of array or hash where we will scan looking
11692 * for the undefined element that triggered the warning */
11693
11694#define FUV_MAX_SEARCH_SIZE 1000
11695
11696/* Look for an entry in the hash whose value has the same SV as val;
11697 * If so, return a mortal copy of the key. */
11698
11699STATIC SV*
11700S_find_hash_subscript(pTHX_ HV *hv, SV* val)
11701{
11702 dVAR;
11703 register HE **array;
11704 I32 i;
11705
11706 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
11707 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
11708 return NULL;
11709
11710 array = HvARRAY(hv);
11711
11712 for (i=HvMAX(hv); i>0; i--) {
11713 register HE *entry;
11714 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
11715 if (HeVAL(entry) != val)
11716 continue;
11717 if ( HeVAL(entry) == &PL_sv_undef ||
11718 HeVAL(entry) == &PL_sv_placeholder)
11719 continue;
11720 if (!HeKEY(entry))
11721 return NULL;
11722 if (HeKLEN(entry) == HEf_SVKEY)
11723 return sv_mortalcopy(HeKEY_sv(entry));
11724 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
11725 }
11726 }
11727 return NULL;
11728}
11729
11730/* Look for an entry in the array whose value has the same SV as val;
11731 * If so, return the index, otherwise return -1. */
11732
11733STATIC I32
11734S_find_array_subscript(pTHX_ AV *av, SV* val)
11735{
11736 dVAR;
11737 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
11738 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
11739 return -1;
11740
11741 if (val != &PL_sv_undef) {
11742 SV ** const svp = AvARRAY(av);
11743 I32 i;
11744
11745 for (i=AvFILLp(av); i>=0; i--)
11746 if (svp[i] == val)
11747 return i;
11748 }
11749 return -1;
11750}
11751
11752/* S_varname(): return the name of a variable, optionally with a subscript.
11753 * If gv is non-zero, use the name of that global, along with gvtype (one
11754 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
11755 * targ. Depending on the value of the subscript_type flag, return:
11756 */
11757
11758#define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
11759#define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
11760#define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
11761#define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
11762
11763STATIC SV*
11764S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
11765 SV* keyname, I32 aindex, int subscript_type)
11766{
11767
11768 SV * const name = sv_newmortal();
11769 if (gv) {
11770 char buffer[2];
11771 buffer[0] = gvtype;
11772 buffer[1] = 0;
11773
11774 /* as gv_fullname4(), but add literal '^' for $^FOO names */
11775
11776 gv_fullname4(name, gv, buffer, 0);
11777
11778 if ((unsigned int)SvPVX(name)[1] <= 26) {
11779 buffer[0] = '^';
11780 buffer[1] = SvPVX(name)[1] + 'A' - 1;
11781
11782 /* Swap the 1 unprintable control character for the 2 byte pretty
11783 version - ie substr($name, 1, 1) = $buffer; */
11784 sv_insert(name, 1, 1, buffer, 2);
11785 }
11786 }
11787 else {
11788 CV * const cv = find_runcv(NULL);
11789 SV *sv;
11790 AV *av;
11791
11792 if (!cv || !CvPADLIST(cv))
11793 return NULL;
11794 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
11795 sv = *av_fetch(av, targ, FALSE);
11796 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
11797 }
11798
11799 if (subscript_type == FUV_SUBSCRIPT_HASH) {
11800 SV * const sv = newSV(0);
11801 *SvPVX(name) = '$';
11802 Perl_sv_catpvf(aTHX_ name, "{%s}",
11803 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
11804 SvREFCNT_dec(sv);
11805 }
11806 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
11807 *SvPVX(name) = '$';
11808 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
11809 }
11810 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
11811 Perl_sv_insert(aTHX_ name, 0, 0, STR_WITH_LEN("within "));
11812
11813 return name;
11814}
11815
11816
11817/*
11818=for apidoc find_uninit_var
11819
11820Find the name of the undefined variable (if any) that caused the operator o
11821to issue a "Use of uninitialized value" warning.
11822If match is true, only return a name if it's value matches uninit_sv.
11823So roughly speaking, if a unary operator (such as OP_COS) generates a
11824warning, then following the direct child of the op may yield an
11825OP_PADSV or OP_GV that gives the name of the undefined variable. On the
11826other hand, with OP_ADD there are two branches to follow, so we only print
11827the variable name if we get an exact match.
11828
11829The name is returned as a mortal SV.
11830
11831Assumes that PL_op is the op that originally triggered the error, and that
11832PL_comppad/PL_curpad points to the currently executing pad.
11833
11834=cut
11835*/
11836
11837STATIC SV *
11838S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
11839{
11840 dVAR;
11841 SV *sv;
11842 AV *av;
11843 GV *gv;
11844 OP *o, *o2, *kid;
11845
11846 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
11847 uninit_sv == &PL_sv_placeholder)))
11848 return NULL;
11849
11850 switch (obase->op_type) {
11851
11852 case OP_RV2AV:
11853 case OP_RV2HV:
11854 case OP_PADAV:
11855 case OP_PADHV:
11856 {
11857 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
11858 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
11859 I32 index = 0;
11860 SV *keysv = NULL;
11861 int subscript_type = FUV_SUBSCRIPT_WITHIN;
11862
11863 if (pad) { /* @lex, %lex */
11864 sv = PAD_SVl(obase->op_targ);
11865 gv = NULL;
11866 }
11867 else {
11868 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
11869 /* @global, %global */
11870 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
11871 if (!gv)
11872 break;
11873 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
11874 }
11875 else /* @{expr}, %{expr} */
11876 return find_uninit_var(cUNOPx(obase)->op_first,
11877 uninit_sv, match);
11878 }
11879
11880 /* attempt to find a match within the aggregate */
11881 if (hash) {
11882 keysv = find_hash_subscript((HV*)sv, uninit_sv);
11883 if (keysv)
11884 subscript_type = FUV_SUBSCRIPT_HASH;
11885 }
11886 else {
11887 index = find_array_subscript((AV*)sv, uninit_sv);
11888 if (index >= 0)
11889 subscript_type = FUV_SUBSCRIPT_ARRAY;
11890 }
11891
11892 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
11893 break;
11894
11895 return varname(gv, hash ? '%' : '@', obase->op_targ,
11896 keysv, index, subscript_type);
11897 }
11898
11899 case OP_PADSV:
11900 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
11901 break;
11902 return varname(NULL, '$', obase->op_targ,
11903 NULL, 0, FUV_SUBSCRIPT_NONE);
11904
11905 case OP_GVSV:
11906 gv = cGVOPx_gv(obase);
11907 if (!gv || (match && GvSV(gv) != uninit_sv))
11908 break;
11909 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
11910
11911 case OP_AELEMFAST:
11912 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
11913 if (match) {
11914 SV **svp;
11915 av = (AV*)PAD_SV(obase->op_targ);
11916 if (!av || SvRMAGICAL(av))
11917 break;
11918 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11919 if (!svp || *svp != uninit_sv)
11920 break;
11921 }
11922 return varname(NULL, '$', obase->op_targ,
11923 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
11924 }
11925 else {
11926 gv = cGVOPx_gv(obase);
11927 if (!gv)
11928 break;
11929 if (match) {
11930 SV **svp;
11931 av = GvAV(gv);
11932 if (!av || SvRMAGICAL(av))
11933 break;
11934 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11935 if (!svp || *svp != uninit_sv)
11936 break;
11937 }
11938 return varname(gv, '$', 0,
11939 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
11940 }
11941 break;
11942
11943 case OP_EXISTS:
11944 o = cUNOPx(obase)->op_first;
11945 if (!o || o->op_type != OP_NULL ||
11946 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
11947 break;
11948 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
11949
11950 case OP_AELEM:
11951 case OP_HELEM:
11952 if (PL_op == obase)
11953 /* $a[uninit_expr] or $h{uninit_expr} */
11954 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
11955
11956 gv = NULL;
11957 o = cBINOPx(obase)->op_first;
11958 kid = cBINOPx(obase)->op_last;
11959
11960 /* get the av or hv, and optionally the gv */
11961 sv = NULL;
11962 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
11963 sv = PAD_SV(o->op_targ);
11964 }
11965 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
11966 && cUNOPo->op_first->op_type == OP_GV)
11967 {
11968 gv = cGVOPx_gv(cUNOPo->op_first);
11969 if (!gv)
11970 break;
11971 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
11972 }
11973 if (!sv)
11974 break;
11975
11976 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
11977 /* index is constant */
11978 if (match) {
11979 if (SvMAGICAL(sv))
11980 break;
11981 if (obase->op_type == OP_HELEM) {
11982 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
11983 if (!he || HeVAL(he) != uninit_sv)
11984 break;
11985 }
11986 else {
11987 SV * const * const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
11988 if (!svp || *svp != uninit_sv)
11989 break;
11990 }
11991 }
11992 if (obase->op_type == OP_HELEM)
11993 return varname(gv, '%', o->op_targ,
11994 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
11995 else
11996 return varname(gv, '@', o->op_targ, NULL,
11997 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
11998 }
11999 else {
12000 /* index is an expression;
12001 * attempt to find a match within the aggregate */
12002 if (obase->op_type == OP_HELEM) {
12003 SV * const keysv = find_hash_subscript((HV*)sv, uninit_sv);
12004 if (keysv)
12005 return varname(gv, '%', o->op_targ,
12006 keysv, 0, FUV_SUBSCRIPT_HASH);
12007 }
12008 else {
12009 const I32 index = find_array_subscript((AV*)sv, uninit_sv);
12010 if (index >= 0)
12011 return varname(gv, '@', o->op_targ,
12012 NULL, index, FUV_SUBSCRIPT_ARRAY);
12013 }
12014 if (match)
12015 break;
12016 return varname(gv,
12017 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
12018 ? '@' : '%',
12019 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
12020 }
12021 break;
12022
12023 case OP_AASSIGN:
12024 /* only examine RHS */
12025 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
12026
12027 case OP_OPEN:
12028 o = cUNOPx(obase)->op_first;
12029 if (o->op_type == OP_PUSHMARK)
12030 o = o->op_sibling;
12031
12032 if (!o->op_sibling) {
12033 /* one-arg version of open is highly magical */
12034
12035 if (o->op_type == OP_GV) { /* open FOO; */
12036 gv = cGVOPx_gv(o);
12037 if (match && GvSV(gv) != uninit_sv)
12038 break;
12039 return varname(gv, '$', 0,
12040 NULL, 0, FUV_SUBSCRIPT_NONE);
12041 }
12042 /* other possibilities not handled are:
12043 * open $x; or open my $x; should return '${*$x}'
12044 * open expr; should return '$'.expr ideally
12045 */
12046 break;
12047 }
12048 goto do_op;
12049
12050 /* ops where $_ may be an implicit arg */
12051 case OP_TRANS:
12052 case OP_SUBST:
12053 case OP_MATCH:
12054 if ( !(obase->op_flags & OPf_STACKED)) {
12055 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
12056 ? PAD_SVl(obase->op_targ)
12057 : DEFSV))
12058 {
12059 sv = sv_newmortal();
12060 sv_setpvn(sv, "$_", 2);
12061 return sv;
12062 }
12063 }
12064 goto do_op;
12065
12066 case OP_PRTF:
12067 case OP_PRINT:
12068 case OP_SAY:
12069 /* skip filehandle as it can't produce 'undef' warning */
12070 o = cUNOPx(obase)->op_first;
12071 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
12072 o = o->op_sibling->op_sibling;
12073 goto do_op2;
12074
12075
12076 case OP_RV2SV:
12077 case OP_CUSTOM:
12078 case OP_ENTERSUB:
12079 match = 1; /* XS or custom code could trigger random warnings */
12080 goto do_op;
12081
12082 case OP_POS:
12083 /* def-ness of rval pos() is independent of the def-ness of its arg */
12084 if ( !(obase->op_flags & OPf_MOD))
12085 break;
12086
12087 case OP_SCHOMP:
12088 case OP_CHOMP:
12089 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
12090 return sv_2mortal(newSVpvs("${$/}"));
12091 /*FALLTHROUGH*/
12092
12093 default:
12094 do_op:
12095 if (!(obase->op_flags & OPf_KIDS))
12096 break;
12097 o = cUNOPx(obase)->op_first;
12098
12099 do_op2:
12100 if (!o)
12101 break;
12102
12103 /* if all except one arg are constant, or have no side-effects,
12104 * or are optimized away, then it's unambiguous */
12105 o2 = NULL;
12106 for (kid=o; kid; kid = kid->op_sibling) {
12107 if (kid) {
12108 const OPCODE type = kid->op_type;
12109 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
12110 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
12111 || (type == OP_PUSHMARK)
12112 )
12113 continue;
12114 }
12115 if (o2) { /* more than one found */
12116 o2 = NULL;
12117 break;
12118 }
12119 o2 = kid;
12120 }
12121 if (o2)
12122 return find_uninit_var(o2, uninit_sv, match);
12123
12124 /* scan all args */
12125 while (o) {
12126 sv = find_uninit_var(o, uninit_sv, 1);
12127 if (sv)
12128 return sv;
12129 o = o->op_sibling;
12130 }
12131 break;
12132 }
12133 return NULL;
12134}
12135
12136
12137/*
12138=for apidoc report_uninit
12139
12140Print appropriate "Use of uninitialized variable" warning
12141
12142=cut
12143*/
12144
12145void
12146Perl_report_uninit(pTHX_ SV* uninit_sv)
12147{
12148 dVAR;
12149 if (PL_op) {
12150 SV* varname = NULL;
12151 if (uninit_sv) {
12152 varname = find_uninit_var(PL_op, uninit_sv,0);
12153 if (varname)
12154 sv_insert(varname, 0, 0, " ", 1);
12155 }
12156 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12157 varname ? SvPV_nolen_const(varname) : "",
12158 " in ", OP_DESC(PL_op));
12159 }
12160 else
12161 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12162 "", "", "");
12163}
12164
12165/*
12166 * Local variables:
12167 * c-indentation-style: bsd
12168 * c-basic-offset: 4
12169 * indent-tabs-mode: t
12170 * End:
12171 *
12172 * ex: set ts=8 sts=4 sw=4 noet:
12173 */