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
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.
9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
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
28 /* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
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
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]);} \
44 # define ASSERT_UTF8_CACHE(cache) NOOP
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-
54 /* ============================================================================
56 =head1 Allocation and deallocation of SVs.
58 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
59 sv, av, hv...) contains type and reference count information, and for
60 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
61 contains fields specific to each type. Some types store all they need
62 in the head, so don't have a body.
64 In all but the most memory-paranoid configuations (ex: PURIFY), heads
65 and bodies are allocated out of arenas, which by default are
66 approximately 4K chunks of memory parcelled up into N heads or bodies.
67 Sv-bodies are allocated by their sv-type, guaranteeing size
68 consistency needed to allocate safely from arrays.
70 For SV-heads, the first slot in each arena is reserved, and holds a
71 link to the next arena, some flags, and a note of the number of slots.
72 Snaked through each arena chain is a linked list of free items; when
73 this becomes empty, an extra arena is allocated and divided up into N
74 items which are threaded into the free list.
76 SV-bodies are similar, but they use arena-sets by default, which
77 separate the link and info from the arena itself, and reclaim the 1st
78 slot in the arena. SV-bodies are further described later.
80 The following global variables are associated with arenas:
82 PL_sv_arenaroot pointer to list of SV arenas
83 PL_sv_root pointer to list of free SV structures
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
89 A few special SV heads are not allocated from an arena, but are
90 instead directly created in the interpreter structure, eg PL_sv_undef.
91 The size of arenas can be changed from the default by setting
92 PERL_ARENA_SIZE appropriately at compile time.
94 The SV arena serves the secondary purpose of allowing still-live SVs
95 to be located and destroyed during final cleanup.
97 At the lowest level, the macros new_SV() and del_SV() grab and free
98 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
99 to return the SV to the free list with error checking.) new_SV() calls
100 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
101 SVs in the free list have their SvTYPE field set to all ones.
103 At the time of very final cleanup, sv_free_arenas() is called from
104 perl_destruct() to physically free all the arenas allocated since the
105 start of the interpreter.
107 The function visit() scans the SV arenas list, and calls a specified
108 function for each SV it finds which is still live - ie which has an SvTYPE
109 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
110 following functions (specified as [function that calls visit()] / [function
111 called by visit() for each SV]):
113 sv_report_used() / do_report_used()
114 dump all remaining SVs (debugging aid)
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()
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.
134 =head2 Arena allocator API Summary
136 Private API to rest of sv.c
140 new_XIV(), del_XIV(),
141 new_XNV(), del_XNV(),
146 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
150 ============================================================================ */
153 * "A time to plant, and a time to uproot what was planted..."
157 Perl_offer_nice_chunk(pTHX_ void *const chunk, const U32 chunk_size)
163 PERL_ARGS_ASSERT_OFFER_NICE_CHUNK;
165 new_chunk = (void *)(chunk);
166 new_chunk_size = (chunk_size);
167 if (new_chunk_size > PL_nice_chunk_size) {
168 Safefree(PL_nice_chunk);
169 PL_nice_chunk = (char *) new_chunk;
170 PL_nice_chunk_size = new_chunk_size;
176 #ifdef DEBUG_LEAKING_SCALARS
177 # define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
179 # define FREE_SV_DEBUG_FILE(sv)
183 # define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
184 /* Whilst I'd love to do this, it seems that things like to check on
186 # define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
188 # define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
189 PoisonNew(&SvREFCNT(sv), 1, U32)
191 # define SvARENA_CHAIN(sv) SvANY(sv)
192 # define POSION_SV_HEAD(sv)
195 /* Mark an SV head as unused, and add to free list.
197 * If SVf_BREAK is set, skip adding it to the free list, as this SV had
198 * its refcount artificially decremented during global destruction, so
199 * there may be dangling pointers to it. The last thing we want in that
200 * case is for it to be reused. */
202 #define plant_SV(p) \
204 const U32 old_flags = SvFLAGS(p); \
205 FREE_SV_DEBUG_FILE(p); \
207 SvFLAGS(p) = SVTYPEMASK; \
208 if (!(old_flags & SVf_BREAK)) { \
209 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
215 #define uproot_SV(p) \
218 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
223 /* make some more SVs by adding another arena */
232 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
233 PL_nice_chunk = NULL;
234 PL_nice_chunk_size = 0;
237 char *chunk; /* must use New here to match call to */
238 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
239 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
245 /* new_SV(): return a new, empty SV head */
247 #ifdef DEBUG_LEAKING_SCALARS
248 /* provide a real function for a debugger to play with */
257 sv = S_more_sv(aTHX);
261 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
262 sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
268 sv->sv_debug_inpad = 0;
269 sv->sv_debug_cloned = 0;
270 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
274 # define new_SV(p) (p)=S_new_SV(aTHX)
282 (p) = S_more_sv(aTHX); \
290 /* del_SV(): return an empty SV head to the free list */
303 S_del_sv(pTHX_ SV *p)
307 PERL_ARGS_ASSERT_DEL_SV;
312 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
313 const SV * const sv = sva + 1;
314 const SV * const svend = &sva[SvREFCNT(sva)];
315 if (p >= sv && p < svend) {
321 if (ckWARN_d(WARN_INTERNAL))
322 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
323 "Attempt to free non-arena SV: 0x%"UVxf
324 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
331 #else /* ! DEBUGGING */
333 #define del_SV(p) plant_SV(p)
335 #endif /* DEBUGGING */
339 =head1 SV Manipulation Functions
341 =for apidoc sv_add_arena
343 Given a chunk of memory, link it to the head of the list of arenas,
344 and split it into a list of free SVs.
350 Perl_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
353 SV* const sva = (SV*)ptr;
357 PERL_ARGS_ASSERT_SV_ADD_ARENA;
359 /* The first SV in an arena isn't an SV. */
360 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
361 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
362 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
364 PL_sv_arenaroot = sva;
365 PL_sv_root = sva + 1;
367 svend = &sva[SvREFCNT(sva) - 1];
370 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
374 /* Must always set typemask because it's always checked in on cleanup
375 when the arenas are walked looking for objects. */
376 SvFLAGS(sv) = SVTYPEMASK;
379 SvARENA_CHAIN(sv) = 0;
383 SvFLAGS(sv) = SVTYPEMASK;
386 /* visit(): call the named function for each non-free SV in the arenas
387 * whose flags field matches the flags/mask args. */
390 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
396 PERL_ARGS_ASSERT_VISIT;
398 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
399 register const SV * const svend = &sva[SvREFCNT(sva)];
401 for (sv = sva + 1; sv < svend; ++sv) {
402 if (SvTYPE(sv) != SVTYPEMASK
403 && (sv->sv_flags & mask) == flags
416 /* called by sv_report_used() for each live SV */
419 do_report_used(pTHX_ SV *const sv)
421 if (SvTYPE(sv) != SVTYPEMASK) {
422 PerlIO_printf(Perl_debug_log, "****\n");
429 =for apidoc sv_report_used
431 Dump the contents of all SVs not yet freed. (Debugging aid).
437 Perl_sv_report_used(pTHX)
440 visit(do_report_used, 0, 0);
446 /* called by sv_clean_objs() for each live SV */
449 do_clean_objs(pTHX_ SV *const ref)
454 SV * const target = SvRV(ref);
455 if (SvOBJECT(target)) {
456 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
457 if (SvWEAKREF(ref)) {
458 sv_del_backref(target, ref);
464 SvREFCNT_dec(target);
469 /* XXX Might want to check arrays, etc. */
472 /* called by sv_clean_objs() for each live SV */
474 #ifndef DISABLE_DESTRUCTOR_KLUDGE
476 do_clean_named_objs(pTHX_ SV *const sv)
479 assert(SvTYPE(sv) == SVt_PVGV);
480 assert(isGV_with_GP(sv));
483 #ifdef PERL_DONT_CREATE_GVSV
486 SvOBJECT(GvSV(sv))) ||
487 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
488 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
489 /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
490 (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
491 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
493 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
494 SvFLAGS(sv) |= SVf_BREAK;
502 =for apidoc sv_clean_objs
504 Attempt to destroy all objects not yet freed
510 Perl_sv_clean_objs(pTHX)
513 PL_in_clean_objs = TRUE;
514 visit(do_clean_objs, SVf_ROK, SVf_ROK);
515 #ifndef DISABLE_DESTRUCTOR_KLUDGE
516 /* some barnacles may yet remain, clinging to typeglobs */
517 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
519 PL_in_clean_objs = FALSE;
522 /* called by sv_clean_all() for each live SV */
525 do_clean_all(pTHX_ SV *const sv)
528 if (sv == (SV*) PL_fdpid || sv == (SV *)PL_strtab) {
529 /* don't clean pid table and strtab */
532 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
533 SvFLAGS(sv) |= SVf_BREAK;
538 =for apidoc sv_clean_all
540 Decrement the refcnt of each remaining SV, possibly triggering a
541 cleanup. This function may have to be called multiple times to free
542 SVs which are in complex self-referential hierarchies.
548 Perl_sv_clean_all(pTHX)
552 PL_in_clean_all = TRUE;
553 cleaned = visit(do_clean_all, 0,0);
554 PL_in_clean_all = FALSE;
559 ARENASETS: a meta-arena implementation which separates arena-info
560 into struct arena_set, which contains an array of struct
561 arena_descs, each holding info for a single arena. By separating
562 the meta-info from the arena, we recover the 1st slot, formerly
563 borrowed for list management. The arena_set is about the size of an
564 arena, avoiding the needless malloc overhead of a naive linked-list.
566 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
567 memory in the last arena-set (1/2 on average). In trade, we get
568 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
569 smaller types). The recovery of the wasted space allows use of
570 small arenas for large, rare body types, by changing array* fields
571 in body_details_by_type[] below.
574 char *arena; /* the raw storage, allocated aligned */
575 size_t size; /* its size ~4k typ */
576 U32 misc; /* type, and in future other things. */
581 /* Get the maximum number of elements in set[] such that struct arena_set
582 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
583 therefore likely to be 1 aligned memory page. */
585 #define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
586 - 2 * sizeof(int)) / sizeof (struct arena_desc))
589 struct arena_set* next;
590 unsigned int set_size; /* ie ARENAS_PER_SET */
591 unsigned int curr; /* index of next available arena-desc */
592 struct arena_desc set[ARENAS_PER_SET];
596 =for apidoc sv_free_arenas
598 Deallocate the memory used by all arenas. Note that all the individual SV
599 heads and bodies within the arenas must already have been freed.
604 Perl_sv_free_arenas(pTHX)
611 /* Free arenas here, but be careful about fake ones. (We assume
612 contiguity of the fake ones with the corresponding real ones.) */
614 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
615 svanext = (SV*) SvANY(sva);
616 while (svanext && SvFAKE(svanext))
617 svanext = (SV*) SvANY(svanext);
624 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
627 struct arena_set *current = aroot;
630 assert(aroot->set[i].arena);
631 Safefree(aroot->set[i].arena);
639 i = PERL_ARENA_ROOTS_SIZE;
641 PL_body_roots[i] = 0;
643 Safefree(PL_nice_chunk);
644 PL_nice_chunk = NULL;
645 PL_nice_chunk_size = 0;
651 Here are mid-level routines that manage the allocation of bodies out
652 of the various arenas. There are 5 kinds of arenas:
654 1. SV-head arenas, which are discussed and handled above
655 2. regular body arenas
656 3. arenas for reduced-size bodies
658 5. pte arenas (thread related)
660 Arena types 2 & 3 are chained by body-type off an array of
661 arena-root pointers, which is indexed by svtype. Some of the
662 larger/less used body types are malloced singly, since a large
663 unused block of them is wasteful. Also, several svtypes dont have
664 bodies; the data fits into the sv-head itself. The arena-root
665 pointer thus has a few unused root-pointers (which may be hijacked
666 later for arena types 4,5)
668 3 differs from 2 as an optimization; some body types have several
669 unused fields in the front of the structure (which are kept in-place
670 for consistency). These bodies can be allocated in smaller chunks,
671 because the leading fields arent accessed. Pointers to such bodies
672 are decremented to point at the unused 'ghost' memory, knowing that
673 the pointers are used with offsets to the real memory.
675 HE, HEK arenas are managed separately, with separate code, but may
676 be merge-able later..
678 PTE arenas are not sv-bodies, but they share these mid-level
679 mechanics, so are considered here. The new mid-level mechanics rely
680 on the sv_type of the body being allocated, so we just reserve one
681 of the unused body-slots for PTEs, then use it in those (2) PTE
682 contexts below (line ~10k)
685 /* get_arena(size): this creates custom-sized arenas
686 TBD: export properly for hv.c: S_more_he().
689 Perl_get_arena(pTHX_ const size_t arena_size, const U32 misc)
692 struct arena_desc* adesc;
693 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
696 /* shouldnt need this
697 if (!arena_size) arena_size = PERL_ARENA_SIZE;
700 /* may need new arena-set to hold new arena */
701 if (!aroot || aroot->curr >= aroot->set_size) {
702 struct arena_set *newroot;
703 Newxz(newroot, 1, struct arena_set);
704 newroot->set_size = ARENAS_PER_SET;
705 newroot->next = aroot;
707 PL_body_arenas = (void *) newroot;
708 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
711 /* ok, now have arena-set with at least 1 empty/available arena-desc */
712 curr = aroot->curr++;
713 adesc = &(aroot->set[curr]);
714 assert(!adesc->arena);
716 Newx(adesc->arena, arena_size, char);
717 adesc->size = arena_size;
719 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
720 curr, (void*)adesc->arena, (UV)arena_size));
726 /* return a thing to the free list */
728 #define del_body(thing, root) \
730 void ** const thing_copy = (void **)thing;\
731 *thing_copy = *root; \
732 *root = (void*)thing_copy; \
737 =head1 SV-Body Allocation
739 Allocation of SV-bodies is similar to SV-heads, differing as follows;
740 the allocation mechanism is used for many body types, so is somewhat
741 more complicated, it uses arena-sets, and has no need for still-live
744 At the outermost level, (new|del)_X*V macros return bodies of the
745 appropriate type. These macros call either (new|del)_body_type or
746 (new|del)_body_allocated macro pairs, depending on specifics of the
747 type. Most body types use the former pair, the latter pair is used to
748 allocate body types with "ghost fields".
750 "ghost fields" are fields that are unused in certain types, and
751 consequently dont need to actually exist. They are declared because
752 they're part of a "base type", which allows use of functions as
753 methods. The simplest examples are AVs and HVs, 2 aggregate types
754 which don't use the fields which support SCALAR semantics.
756 For these types, the arenas are carved up into *_allocated size
757 chunks, we thus avoid wasted memory for those unaccessed members.
758 When bodies are allocated, we adjust the pointer back in memory by the
759 size of the bit not allocated, so it's as if we allocated the full
760 structure. (But things will all go boom if you write to the part that
761 is "not there", because you'll be overwriting the last members of the
762 preceding structure in memory.)
764 We calculate the correction using the STRUCT_OFFSET macro. For
765 example, if xpv_allocated is the same structure as XPV then the two
766 OFFSETs sum to zero, and the pointer is unchanged. If the allocated
767 structure is smaller (no initial NV actually allocated) then the net
768 effect is to subtract the size of the NV from the pointer, to return a
769 new pointer as if an initial NV were actually allocated.
771 This is the same trick as was used for NV and IV bodies. Ironically it
772 doesn't need to be used for NV bodies any more, because NV is now at
773 the start of the structure. IV bodies don't need it either, because
774 they are no longer allocated.
776 In turn, the new_body_* allocators call S_new_body(), which invokes
777 new_body_inline macro, which takes a lock, and takes a body off the
778 linked list at PL_body_roots[sv_type], calling S_more_bodies() if
779 necessary to refresh an empty list. Then the lock is released, and
780 the body is returned.
782 S_more_bodies calls get_arena(), and carves it up into an array of N
783 bodies, which it strings into a linked list. It looks up arena-size
784 and body-size from the body_details table described below, thus
785 supporting the multiple body-types.
787 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
788 the (new|del)_X*V macros are mapped directly to malloc/free.
794 For each sv-type, struct body_details bodies_by_type[] carries
795 parameters which control these aspects of SV handling:
797 Arena_size determines whether arenas are used for this body type, and if
798 so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
799 zero, forcing individual mallocs and frees.
801 Body_size determines how big a body is, and therefore how many fit into
802 each arena. Offset carries the body-pointer adjustment needed for
803 *_allocated body types, and is used in *_allocated macros.
805 But its main purpose is to parameterize info needed in
806 Perl_sv_upgrade(). The info here dramatically simplifies the function
807 vs the implementation in 5.8.7, making it table-driven. All fields
808 are used for this, except for arena_size.
810 For the sv-types that have no bodies, arenas are not used, so those
811 PL_body_roots[sv_type] are unused, and can be overloaded. In
812 something of a special case, SVt_NULL is borrowed for HE arenas;
813 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
814 bodies_by_type[SVt_NULL] slot is not used, as the table is not
817 PTEs also use arenas, but are never seen in Perl_sv_upgrade. Nonetheless,
818 they get their own slot in bodies_by_type[PTE_SVSLOT =SVt_IV], so they can
819 just use the same allocation semantics. At first, PTEs were also
820 overloaded to a non-body sv-type, but this yielded hard-to-find malloc
821 bugs, so was simplified by claiming a new slot. This choice has no
822 consequence at this time.
826 struct body_details {
827 U8 body_size; /* Size to allocate */
828 U8 copy; /* Size of structure to copy (may be shorter) */
830 unsigned int type : 4; /* We have space for a sanity check. */
831 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
832 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
833 unsigned int arena : 1; /* Allocated from an arena */
834 size_t arena_size; /* Size of arena to allocate */
842 /* With -DPURFIY we allocate everything directly, and don't use arenas.
843 This seems a rather elegant way to simplify some of the code below. */
844 #define HASARENA FALSE
846 #define HASARENA TRUE
848 #define NOARENA FALSE
850 /* Size the arenas to exactly fit a given number of bodies. A count
851 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
852 simplifying the default. If count > 0, the arena is sized to fit
853 only that many bodies, allowing arenas to be used for large, rare
854 bodies (XPVFM, XPVIO) without undue waste. The arena size is
855 limited by PERL_ARENA_SIZE, so we can safely oversize the
858 #define FIT_ARENA0(body_size) \
859 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
860 #define FIT_ARENAn(count,body_size) \
861 ( count * body_size <= PERL_ARENA_SIZE) \
862 ? count * body_size \
863 : FIT_ARENA0 (body_size)
864 #define FIT_ARENA(count,body_size) \
866 ? FIT_ARENAn (count, body_size) \
867 : FIT_ARENA0 (body_size)
869 /* A macro to work out the offset needed to subtract from a pointer to (say)
876 to make its members accessible via a pointer to (say)
886 #define relative_STRUCT_OFFSET(longer, shorter, member) \
887 (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
889 /* Calculate the length to copy. Specifically work out the length less any
890 final padding the compiler needed to add. See the comment in sv_upgrade
891 for why copying the padding proved to be a bug. */
893 #define copy_length(type, last_member) \
894 STRUCT_OFFSET(type, last_member) \
895 + sizeof (((type*)SvANY((SV*)0))->last_member)
897 static const struct body_details bodies_by_type[] = {
898 { sizeof(HE), 0, 0, SVt_NULL,
899 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
901 /* The bind placeholder pretends to be an RV for now.
902 Also it's marked as "can't upgrade" to stop anyone using it before it's
904 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
906 /* IVs are in the head, so the allocation size is 0.
907 However, the slot is overloaded for PTEs. */
908 { sizeof(struct ptr_tbl_ent), /* This is used for PTEs. */
909 sizeof(IV), /* This is used to copy out the IV body. */
910 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
911 NOARENA /* IVS don't need an arena */,
912 /* But PTEs need to know the size of their arena */
913 FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
916 /* 8 bytes on most ILP32 with IEEE doubles */
917 { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
918 FIT_ARENA(0, sizeof(NV)) },
920 /* 8 bytes on most ILP32 with IEEE doubles */
921 { sizeof(xpv_allocated),
922 copy_length(XPV, xpv_len)
923 - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
924 + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
925 SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
928 { sizeof(xpviv_allocated),
929 copy_length(XPVIV, xiv_u)
930 - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
931 + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
932 SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
935 { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
936 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
939 { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
940 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
943 { sizeof(struct regexp_allocated), sizeof(struct regexp_allocated),
944 + relative_STRUCT_OFFSET(struct regexp_allocated, regexp, xpv_cur),
945 SVt_REGEXP, FALSE, NONV, HASARENA,
946 FIT_ARENA(0, sizeof(struct regexp_allocated))
950 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
951 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
954 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
955 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
957 { sizeof(xpvav_allocated),
958 copy_length(XPVAV, xmg_stash)
959 - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
960 + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
961 SVt_PVAV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
963 { sizeof(xpvhv_allocated),
964 copy_length(XPVHV, xmg_stash)
965 - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
966 + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
967 SVt_PVHV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
970 { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
971 + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
972 SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
974 { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
975 + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
976 SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
978 /* XPVIO is 84 bytes, fits 48x */
979 { sizeof(xpvio_allocated), sizeof(xpvio_allocated),
980 + relative_STRUCT_OFFSET(xpvio_allocated, XPVIO, xpv_cur),
981 SVt_PVIO, TRUE, NONV, HASARENA, FIT_ARENA(24, sizeof(xpvio_allocated)) },
984 #define new_body_type(sv_type) \
985 (void *)((char *)S_new_body(aTHX_ sv_type))
987 #define del_body_type(p, sv_type) \
988 del_body(p, &PL_body_roots[sv_type])
991 #define new_body_allocated(sv_type) \
992 (void *)((char *)S_new_body(aTHX_ sv_type) \
993 - bodies_by_type[sv_type].offset)
995 #define del_body_allocated(p, sv_type) \
996 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
999 #define my_safemalloc(s) (void*)safemalloc(s)
1000 #define my_safecalloc(s) (void*)safecalloc(s, 1)
1001 #define my_safefree(p) safefree((char*)p)
1005 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1006 #define del_XNV(p) my_safefree(p)
1008 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1009 #define del_XPVNV(p) my_safefree(p)
1011 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1012 #define del_XPVAV(p) my_safefree(p)
1014 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1015 #define del_XPVHV(p) my_safefree(p)
1017 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1018 #define del_XPVMG(p) my_safefree(p)
1020 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1021 #define del_XPVGV(p) my_safefree(p)
1025 #define new_XNV() new_body_type(SVt_NV)
1026 #define del_XNV(p) del_body_type(p, SVt_NV)
1028 #define new_XPVNV() new_body_type(SVt_PVNV)
1029 #define del_XPVNV(p) del_body_type(p, SVt_PVNV)
1031 #define new_XPVAV() new_body_allocated(SVt_PVAV)
1032 #define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
1034 #define new_XPVHV() new_body_allocated(SVt_PVHV)
1035 #define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
1037 #define new_XPVMG() new_body_type(SVt_PVMG)
1038 #define del_XPVMG(p) del_body_type(p, SVt_PVMG)
1040 #define new_XPVGV() new_body_type(SVt_PVGV)
1041 #define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1045 /* no arena for you! */
1047 #define new_NOARENA(details) \
1048 my_safemalloc((details)->body_size + (details)->offset)
1049 #define new_NOARENAZ(details) \
1050 my_safecalloc((details)->body_size + (details)->offset)
1053 S_more_bodies (pTHX_ const svtype sv_type)
1056 void ** const root = &PL_body_roots[sv_type];
1057 const struct body_details * const bdp = &bodies_by_type[sv_type];
1058 const size_t body_size = bdp->body_size;
1061 const size_t arena_size = Perl_malloc_good_size(bdp->arena_size);
1062 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1063 static bool done_sanity_check;
1065 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1066 * variables like done_sanity_check. */
1067 if (!done_sanity_check) {
1068 unsigned int i = SVt_LAST;
1070 done_sanity_check = TRUE;
1073 assert (bodies_by_type[i].type == i);
1077 assert(bdp->arena_size);
1079 start = (char*) Perl_get_arena(aTHX_ arena_size, sv_type);
1081 end = start + arena_size - 2 * body_size;
1083 /* computed count doesnt reflect the 1st slot reservation */
1084 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1085 DEBUG_m(PerlIO_printf(Perl_debug_log,
1086 "arena %p end %p arena-size %d (from %d) type %d "
1088 (void*)start, (void*)end, (int)arena_size,
1089 (int)bdp->arena_size, sv_type, (int)body_size,
1090 (int)arena_size / (int)body_size));
1092 DEBUG_m(PerlIO_printf(Perl_debug_log,
1093 "arena %p end %p arena-size %d type %d size %d ct %d\n",
1094 (void*)start, (void*)end,
1095 (int)bdp->arena_size, sv_type, (int)body_size,
1096 (int)bdp->arena_size / (int)body_size));
1098 *root = (void *)start;
1100 while (start <= end) {
1101 char * const next = start + body_size;
1102 *(void**) start = (void *)next;
1105 *(void **)start = 0;
1110 /* grab a new thing from the free list, allocating more if necessary.
1111 The inline version is used for speed in hot routines, and the
1112 function using it serves the rest (unless PURIFY).
1114 #define new_body_inline(xpv, sv_type) \
1116 void ** const r3wt = &PL_body_roots[sv_type]; \
1117 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1118 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
1119 *(r3wt) = *(void**)(xpv); \
1125 S_new_body(pTHX_ const svtype sv_type)
1129 new_body_inline(xpv, sv_type);
1135 static const struct body_details fake_rv =
1136 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1139 =for apidoc sv_upgrade
1141 Upgrade an SV to a more complex form. Generally adds a new body type to the
1142 SV, then copies across as much information as possible from the old body.
1143 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1149 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1154 const svtype old_type = SvTYPE(sv);
1155 const struct body_details *new_type_details;
1156 const struct body_details *old_type_details
1157 = bodies_by_type + old_type;
1158 SV *referant = NULL;
1160 PERL_ARGS_ASSERT_SV_UPGRADE;
1162 if (new_type != SVt_PV && SvIsCOW(sv)) {
1163 sv_force_normal_flags(sv, 0);
1166 if (old_type == new_type)
1169 old_body = SvANY(sv);
1171 /* Copying structures onto other structures that have been neatly zeroed
1172 has a subtle gotcha. Consider XPVMG
1174 +------+------+------+------+------+-------+-------+
1175 | NV | CUR | LEN | IV | MAGIC | STASH |
1176 +------+------+------+------+------+-------+-------+
1177 0 4 8 12 16 20 24 28
1179 where NVs are aligned to 8 bytes, so that sizeof that structure is
1180 actually 32 bytes long, with 4 bytes of padding at the end:
1182 +------+------+------+------+------+-------+-------+------+
1183 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1184 +------+------+------+------+------+-------+-------+------+
1185 0 4 8 12 16 20 24 28 32
1187 so what happens if you allocate memory for this structure:
1189 +------+------+------+------+------+-------+-------+------+------+...
1190 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1191 +------+------+------+------+------+-------+-------+------+------+...
1192 0 4 8 12 16 20 24 28 32 36
1194 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1195 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1196 started out as zero once, but it's quite possible that it isn't. So now,
1197 rather than a nicely zeroed GP, you have it pointing somewhere random.
1200 (In fact, GP ends up pointing at a previous GP structure, because the
1201 principle cause of the padding in XPVMG getting garbage is a copy of
1202 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1203 this happens to be moot because XPVGV has been re-ordered, with GP
1204 no longer after STASH)
1206 So we are careful and work out the size of used parts of all the
1214 referant = SvRV(sv);
1215 old_type_details = &fake_rv;
1216 if (new_type == SVt_NV)
1217 new_type = SVt_PVNV;
1219 if (new_type < SVt_PVIV) {
1220 new_type = (new_type == SVt_NV)
1221 ? SVt_PVNV : SVt_PVIV;
1226 if (new_type < SVt_PVNV) {
1227 new_type = SVt_PVNV;
1231 assert(new_type > SVt_PV);
1232 assert(SVt_IV < SVt_PV);
1233 assert(SVt_NV < SVt_PV);
1240 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1241 there's no way that it can be safely upgraded, because perl.c
1242 expects to Safefree(SvANY(PL_mess_sv)) */
1243 assert(sv != PL_mess_sv);
1244 /* This flag bit is used to mean other things in other scalar types.
1245 Given that it only has meaning inside the pad, it shouldn't be set
1246 on anything that can get upgraded. */
1247 assert(!SvPAD_TYPED(sv));
1250 if (old_type_details->cant_upgrade)
1251 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1252 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1255 if (old_type > new_type)
1256 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1257 (int)old_type, (int)new_type);
1259 new_type_details = bodies_by_type + new_type;
1261 SvFLAGS(sv) &= ~SVTYPEMASK;
1262 SvFLAGS(sv) |= new_type;
1264 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1265 the return statements above will have triggered. */
1266 assert (new_type != SVt_NULL);
1269 assert(old_type == SVt_NULL);
1270 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1274 assert(old_type == SVt_NULL);
1275 SvANY(sv) = new_XNV();
1280 assert(new_type_details->body_size);
1283 assert(new_type_details->arena);
1284 assert(new_type_details->arena_size);
1285 /* This points to the start of the allocated area. */
1286 new_body_inline(new_body, new_type);
1287 Zero(new_body, new_type_details->body_size, char);
1288 new_body = ((char *)new_body) - new_type_details->offset;
1290 /* We always allocated the full length item with PURIFY. To do this
1291 we fake things so that arena is false for all 16 types.. */
1292 new_body = new_NOARENAZ(new_type_details);
1294 SvANY(sv) = new_body;
1295 if (new_type == SVt_PVAV) {
1299 if (old_type_details->body_size) {
1302 /* It will have been zeroed when the new body was allocated.
1303 Lets not write to it, in case it confuses a write-back
1309 #ifndef NODEFAULT_SHAREKEYS
1310 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1312 HvMAX(sv) = 7; /* (start with 8 buckets) */
1313 if (old_type_details->body_size) {
1316 /* It will have been zeroed when the new body was allocated.
1317 Lets not write to it, in case it confuses a write-back
1322 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1323 The target created by newSVrv also is, and it can have magic.
1324 However, it never has SvPVX set.
1326 if (old_type == SVt_IV) {
1328 } else if (old_type >= SVt_PV) {
1329 assert(SvPVX_const(sv) == 0);
1332 if (old_type >= SVt_PVMG) {
1333 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1334 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1336 sv->sv_u.svu_array = NULL; /* or svu_hash */
1342 /* XXX Is this still needed? Was it ever needed? Surely as there is
1343 no route from NV to PVIV, NOK can never be true */
1344 assert(!SvNOKp(sv));
1356 assert(new_type_details->body_size);
1357 /* We always allocated the full length item with PURIFY. To do this
1358 we fake things so that arena is false for all 16 types.. */
1359 if(new_type_details->arena) {
1360 /* This points to the start of the allocated area. */
1361 new_body_inline(new_body, new_type);
1362 Zero(new_body, new_type_details->body_size, char);
1363 new_body = ((char *)new_body) - new_type_details->offset;
1365 new_body = new_NOARENAZ(new_type_details);
1367 SvANY(sv) = new_body;
1369 if (old_type_details->copy) {
1370 /* There is now the potential for an upgrade from something without
1371 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1372 int offset = old_type_details->offset;
1373 int length = old_type_details->copy;
1375 if (new_type_details->offset > old_type_details->offset) {
1376 const int difference
1377 = new_type_details->offset - old_type_details->offset;
1378 offset += difference;
1379 length -= difference;
1381 assert (length >= 0);
1383 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1387 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1388 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1389 * correct 0.0 for us. Otherwise, if the old body didn't have an
1390 * NV slot, but the new one does, then we need to initialise the
1391 * freshly created NV slot with whatever the correct bit pattern is
1393 if (old_type_details->zero_nv && !new_type_details->zero_nv
1394 && !isGV_with_GP(sv))
1398 if (new_type == SVt_PVIO)
1399 IoPAGE_LEN(sv) = 60;
1400 if (old_type < SVt_PV) {
1401 /* referant will be NULL unless the old type was SVt_IV emulating
1403 sv->sv_u.svu_rv = referant;
1407 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1408 (unsigned long)new_type);
1411 if (old_type_details->arena) {
1412 /* If there was an old body, then we need to free it.
1413 Note that there is an assumption that all bodies of types that
1414 can be upgraded came from arenas. Only the more complex non-
1415 upgradable types are allowed to be directly malloc()ed. */
1417 my_safefree(old_body);
1419 del_body((void*)((char*)old_body + old_type_details->offset),
1420 &PL_body_roots[old_type]);
1426 =for apidoc sv_backoff
1428 Remove any string offset. You should normally use the C<SvOOK_off> macro
1435 Perl_sv_backoff(pTHX_ register SV *const sv)
1438 const char * const s = SvPVX_const(sv);
1440 PERL_ARGS_ASSERT_SV_BACKOFF;
1441 PERL_UNUSED_CONTEXT;
1444 assert(SvTYPE(sv) != SVt_PVHV);
1445 assert(SvTYPE(sv) != SVt_PVAV);
1447 SvOOK_offset(sv, delta);
1449 SvLEN_set(sv, SvLEN(sv) + delta);
1450 SvPV_set(sv, SvPVX(sv) - delta);
1451 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1452 SvFLAGS(sv) &= ~SVf_OOK;
1459 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1460 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1461 Use the C<SvGROW> wrapper instead.
1467 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1471 PERL_ARGS_ASSERT_SV_GROW;
1473 if (PL_madskills && newlen >= 0x100000) {
1474 PerlIO_printf(Perl_debug_log,
1475 "Allocation too large: %"UVxf"\n", (UV)newlen);
1477 #ifdef HAS_64K_LIMIT
1478 if (newlen >= 0x10000) {
1479 PerlIO_printf(Perl_debug_log,
1480 "Allocation too large: %"UVxf"\n", (UV)newlen);
1483 #endif /* HAS_64K_LIMIT */
1486 if (SvTYPE(sv) < SVt_PV) {
1487 sv_upgrade(sv, SVt_PV);
1488 s = SvPVX_mutable(sv);
1490 else if (SvOOK(sv)) { /* pv is offset? */
1492 s = SvPVX_mutable(sv);
1493 if (newlen > SvLEN(sv))
1494 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1495 #ifdef HAS_64K_LIMIT
1496 if (newlen >= 0x10000)
1501 s = SvPVX_mutable(sv);
1503 if (newlen > SvLEN(sv)) { /* need more room? */
1504 #ifndef Perl_safesysmalloc_size
1505 newlen = PERL_STRLEN_ROUNDUP(newlen);
1507 if (SvLEN(sv) && s) {
1508 s = (char*)saferealloc(s, newlen);
1511 s = (char*)safemalloc(newlen);
1512 if (SvPVX_const(sv) && SvCUR(sv)) {
1513 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1517 #ifdef Perl_safesysmalloc_size
1518 /* Do this here, do it once, do it right, and then we will never get
1519 called back into sv_grow() unless there really is some growing
1521 SvLEN_set(sv, Perl_safesysmalloc_size(s));
1523 SvLEN_set(sv, newlen);
1530 =for apidoc sv_setiv
1532 Copies an integer into the given SV, upgrading first if necessary.
1533 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1539 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1543 PERL_ARGS_ASSERT_SV_SETIV;
1545 SV_CHECK_THINKFIRST_COW_DROP(sv);
1546 switch (SvTYPE(sv)) {
1549 sv_upgrade(sv, SVt_IV);
1552 sv_upgrade(sv, SVt_PVIV);
1556 if (!isGV_with_GP(sv))
1563 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1567 (void)SvIOK_only(sv); /* validate number */
1573 =for apidoc sv_setiv_mg
1575 Like C<sv_setiv>, but also handles 'set' magic.
1581 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1583 PERL_ARGS_ASSERT_SV_SETIV_MG;
1590 =for apidoc sv_setuv
1592 Copies an unsigned integer into the given SV, upgrading first if necessary.
1593 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1599 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1601 PERL_ARGS_ASSERT_SV_SETUV;
1603 /* With these two if statements:
1604 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1607 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1609 If you wish to remove them, please benchmark to see what the effect is
1611 if (u <= (UV)IV_MAX) {
1612 sv_setiv(sv, (IV)u);
1621 =for apidoc sv_setuv_mg
1623 Like C<sv_setuv>, but also handles 'set' magic.
1629 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1631 PERL_ARGS_ASSERT_SV_SETUV_MG;
1638 =for apidoc sv_setnv
1640 Copies a double into the given SV, upgrading first if necessary.
1641 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1647 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1651 PERL_ARGS_ASSERT_SV_SETNV;
1653 SV_CHECK_THINKFIRST_COW_DROP(sv);
1654 switch (SvTYPE(sv)) {
1657 sv_upgrade(sv, SVt_NV);
1661 sv_upgrade(sv, SVt_PVNV);
1665 if (!isGV_with_GP(sv))
1672 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1677 (void)SvNOK_only(sv); /* validate number */
1682 =for apidoc sv_setnv_mg
1684 Like C<sv_setnv>, but also handles 'set' magic.
1690 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1692 PERL_ARGS_ASSERT_SV_SETNV_MG;
1698 /* Print an "isn't numeric" warning, using a cleaned-up,
1699 * printable version of the offending string
1703 S_not_a_number(pTHX_ SV *const sv)
1710 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1713 dsv = newSVpvs_flags("", SVs_TEMP);
1714 pv = sv_uni_display(dsv, sv, 10, 0);
1717 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1718 /* each *s can expand to 4 chars + "...\0",
1719 i.e. need room for 8 chars */
1721 const char *s = SvPVX_const(sv);
1722 const char * const end = s + SvCUR(sv);
1723 for ( ; s < end && d < limit; s++ ) {
1725 if (ch & 128 && !isPRINT_LC(ch)) {
1734 else if (ch == '\r') {
1738 else if (ch == '\f') {
1742 else if (ch == '\\') {
1746 else if (ch == '\0') {
1750 else if (isPRINT_LC(ch))
1767 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1768 "Argument \"%s\" isn't numeric in %s", pv,
1771 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1772 "Argument \"%s\" isn't numeric", pv);
1776 =for apidoc looks_like_number
1778 Test if the content of an SV looks like a number (or is a number).
1779 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1780 non-numeric warning), even if your atof() doesn't grok them.
1786 Perl_looks_like_number(pTHX_ SV *const sv)
1788 register const char *sbegin;
1791 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1794 sbegin = SvPVX_const(sv);
1797 else if (SvPOKp(sv))
1798 sbegin = SvPV_const(sv, len);
1800 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1801 return grok_number(sbegin, len, NULL);
1805 S_glob_2number(pTHX_ GV * const gv)
1807 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1808 SV *const buffer = sv_newmortal();
1810 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1812 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1815 gv_efullname3(buffer, gv, "*");
1816 SvFLAGS(gv) |= wasfake;
1818 /* We know that all GVs stringify to something that is not-a-number,
1819 so no need to test that. */
1820 if (ckWARN(WARN_NUMERIC))
1821 not_a_number(buffer);
1822 /* We just want something true to return, so that S_sv_2iuv_common
1823 can tail call us and return true. */
1828 S_glob_2pv(pTHX_ GV * const gv, STRLEN * const len)
1830 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1831 SV *const buffer = sv_newmortal();
1833 PERL_ARGS_ASSERT_GLOB_2PV;
1835 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1838 gv_efullname3(buffer, gv, "*");
1839 SvFLAGS(gv) |= wasfake;
1841 assert(SvPOK(buffer));
1843 *len = SvCUR(buffer);
1845 return SvPVX(buffer);
1848 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1849 until proven guilty, assume that things are not that bad... */
1854 As 64 bit platforms often have an NV that doesn't preserve all bits of
1855 an IV (an assumption perl has been based on to date) it becomes necessary
1856 to remove the assumption that the NV always carries enough precision to
1857 recreate the IV whenever needed, and that the NV is the canonical form.
1858 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1859 precision as a side effect of conversion (which would lead to insanity
1860 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1861 1) to distinguish between IV/UV/NV slots that have cached a valid
1862 conversion where precision was lost and IV/UV/NV slots that have a
1863 valid conversion which has lost no precision
1864 2) to ensure that if a numeric conversion to one form is requested that
1865 would lose precision, the precise conversion (or differently
1866 imprecise conversion) is also performed and cached, to prevent
1867 requests for different numeric formats on the same SV causing
1868 lossy conversion chains. (lossless conversion chains are perfectly
1873 SvIOKp is true if the IV slot contains a valid value
1874 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1875 SvNOKp is true if the NV slot contains a valid value
1876 SvNOK is true only if the NV value is accurate
1879 while converting from PV to NV, check to see if converting that NV to an
1880 IV(or UV) would lose accuracy over a direct conversion from PV to
1881 IV(or UV). If it would, cache both conversions, return NV, but mark
1882 SV as IOK NOKp (ie not NOK).
1884 While converting from PV to IV, check to see if converting that IV to an
1885 NV would lose accuracy over a direct conversion from PV to NV. If it
1886 would, cache both conversions, flag similarly.
1888 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1889 correctly because if IV & NV were set NV *always* overruled.
1890 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1891 changes - now IV and NV together means that the two are interchangeable:
1892 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1894 The benefit of this is that operations such as pp_add know that if
1895 SvIOK is true for both left and right operands, then integer addition
1896 can be used instead of floating point (for cases where the result won't
1897 overflow). Before, floating point was always used, which could lead to
1898 loss of precision compared with integer addition.
1900 * making IV and NV equal status should make maths accurate on 64 bit
1902 * may speed up maths somewhat if pp_add and friends start to use
1903 integers when possible instead of fp. (Hopefully the overhead in
1904 looking for SvIOK and checking for overflow will not outweigh the
1905 fp to integer speedup)
1906 * will slow down integer operations (callers of SvIV) on "inaccurate"
1907 values, as the change from SvIOK to SvIOKp will cause a call into
1908 sv_2iv each time rather than a macro access direct to the IV slot
1909 * should speed up number->string conversion on integers as IV is
1910 favoured when IV and NV are equally accurate
1912 ####################################################################
1913 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1914 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1915 On the other hand, SvUOK is true iff UV.
1916 ####################################################################
1918 Your mileage will vary depending your CPU's relative fp to integer
1922 #ifndef NV_PRESERVES_UV
1923 # define IS_NUMBER_UNDERFLOW_IV 1
1924 # define IS_NUMBER_UNDERFLOW_UV 2
1925 # define IS_NUMBER_IV_AND_UV 2
1926 # define IS_NUMBER_OVERFLOW_IV 4
1927 # define IS_NUMBER_OVERFLOW_UV 5
1929 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1931 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1933 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1941 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1943 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));
1944 if (SvNVX(sv) < (NV)IV_MIN) {
1945 (void)SvIOKp_on(sv);
1947 SvIV_set(sv, IV_MIN);
1948 return IS_NUMBER_UNDERFLOW_IV;
1950 if (SvNVX(sv) > (NV)UV_MAX) {
1951 (void)SvIOKp_on(sv);
1954 SvUV_set(sv, UV_MAX);
1955 return IS_NUMBER_OVERFLOW_UV;
1957 (void)SvIOKp_on(sv);
1959 /* Can't use strtol etc to convert this string. (See truth table in
1961 if (SvNVX(sv) <= (UV)IV_MAX) {
1962 SvIV_set(sv, I_V(SvNVX(sv)));
1963 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1964 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1966 /* Integer is imprecise. NOK, IOKp */
1968 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1971 SvUV_set(sv, U_V(SvNVX(sv)));
1972 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1973 if (SvUVX(sv) == UV_MAX) {
1974 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1975 possibly be preserved by NV. Hence, it must be overflow.
1977 return IS_NUMBER_OVERFLOW_UV;
1979 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1981 /* Integer is imprecise. NOK, IOKp */
1983 return IS_NUMBER_OVERFLOW_IV;
1985 #endif /* !NV_PRESERVES_UV*/
1988 S_sv_2iuv_common(pTHX_ SV *const sv)
1992 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1995 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1996 * without also getting a cached IV/UV from it at the same time
1997 * (ie PV->NV conversion should detect loss of accuracy and cache
1998 * IV or UV at same time to avoid this. */
1999 /* IV-over-UV optimisation - choose to cache IV if possible */
2001 if (SvTYPE(sv) == SVt_NV)
2002 sv_upgrade(sv, SVt_PVNV);
2004 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2005 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2006 certainly cast into the IV range at IV_MAX, whereas the correct
2007 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2009 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2010 if (Perl_isnan(SvNVX(sv))) {
2016 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2017 SvIV_set(sv, I_V(SvNVX(sv)));
2018 if (SvNVX(sv) == (NV) SvIVX(sv)
2019 #ifndef NV_PRESERVES_UV
2020 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2021 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2022 /* Don't flag it as "accurately an integer" if the number
2023 came from a (by definition imprecise) NV operation, and
2024 we're outside the range of NV integer precision */
2028 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2030 /* scalar has trailing garbage, eg "42a" */
2032 DEBUG_c(PerlIO_printf(Perl_debug_log,
2033 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2039 /* IV not precise. No need to convert from PV, as NV
2040 conversion would already have cached IV if it detected
2041 that PV->IV would be better than PV->NV->IV
2042 flags already correct - don't set public IOK. */
2043 DEBUG_c(PerlIO_printf(Perl_debug_log,
2044 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2049 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2050 but the cast (NV)IV_MIN rounds to a the value less (more
2051 negative) than IV_MIN which happens to be equal to SvNVX ??
2052 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2053 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2054 (NV)UVX == NVX are both true, but the values differ. :-(
2055 Hopefully for 2s complement IV_MIN is something like
2056 0x8000000000000000 which will be exact. NWC */
2059 SvUV_set(sv, U_V(SvNVX(sv)));
2061 (SvNVX(sv) == (NV) SvUVX(sv))
2062 #ifndef NV_PRESERVES_UV
2063 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2064 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2065 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2066 /* Don't flag it as "accurately an integer" if the number
2067 came from a (by definition imprecise) NV operation, and
2068 we're outside the range of NV integer precision */
2074 DEBUG_c(PerlIO_printf(Perl_debug_log,
2075 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2081 else if (SvPOKp(sv) && SvLEN(sv)) {
2083 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2084 /* We want to avoid a possible problem when we cache an IV/ a UV which
2085 may be later translated to an NV, and the resulting NV is not
2086 the same as the direct translation of the initial string
2087 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2088 be careful to ensure that the value with the .456 is around if the
2089 NV value is requested in the future).
2091 This means that if we cache such an IV/a UV, we need to cache the
2092 NV as well. Moreover, we trade speed for space, and do not
2093 cache the NV if we are sure it's not needed.
2096 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2097 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2098 == IS_NUMBER_IN_UV) {
2099 /* It's definitely an integer, only upgrade to PVIV */
2100 if (SvTYPE(sv) < SVt_PVIV)
2101 sv_upgrade(sv, SVt_PVIV);
2103 } else if (SvTYPE(sv) < SVt_PVNV)
2104 sv_upgrade(sv, SVt_PVNV);
2106 /* If NVs preserve UVs then we only use the UV value if we know that
2107 we aren't going to call atof() below. If NVs don't preserve UVs
2108 then the value returned may have more precision than atof() will
2109 return, even though value isn't perfectly accurate. */
2110 if ((numtype & (IS_NUMBER_IN_UV
2111 #ifdef NV_PRESERVES_UV
2114 )) == IS_NUMBER_IN_UV) {
2115 /* This won't turn off the public IOK flag if it was set above */
2116 (void)SvIOKp_on(sv);
2118 if (!(numtype & IS_NUMBER_NEG)) {
2120 if (value <= (UV)IV_MAX) {
2121 SvIV_set(sv, (IV)value);
2123 /* it didn't overflow, and it was positive. */
2124 SvUV_set(sv, value);
2128 /* 2s complement assumption */
2129 if (value <= (UV)IV_MIN) {
2130 SvIV_set(sv, -(IV)value);
2132 /* Too negative for an IV. This is a double upgrade, but
2133 I'm assuming it will be rare. */
2134 if (SvTYPE(sv) < SVt_PVNV)
2135 sv_upgrade(sv, SVt_PVNV);
2139 SvNV_set(sv, -(NV)value);
2140 SvIV_set(sv, IV_MIN);
2144 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2145 will be in the previous block to set the IV slot, and the next
2146 block to set the NV slot. So no else here. */
2148 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2149 != IS_NUMBER_IN_UV) {
2150 /* It wasn't an (integer that doesn't overflow the UV). */
2151 SvNV_set(sv, Atof(SvPVX_const(sv)));
2153 if (! numtype && ckWARN(WARN_NUMERIC))
2156 #if defined(USE_LONG_DOUBLE)
2157 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2158 PTR2UV(sv), SvNVX(sv)));
2160 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2161 PTR2UV(sv), SvNVX(sv)));
2164 #ifdef NV_PRESERVES_UV
2165 (void)SvIOKp_on(sv);
2167 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2168 SvIV_set(sv, I_V(SvNVX(sv)));
2169 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2172 NOOP; /* Integer is imprecise. NOK, IOKp */
2174 /* UV will not work better than IV */
2176 if (SvNVX(sv) > (NV)UV_MAX) {
2178 /* Integer is inaccurate. NOK, IOKp, is UV */
2179 SvUV_set(sv, UV_MAX);
2181 SvUV_set(sv, U_V(SvNVX(sv)));
2182 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2183 NV preservse UV so can do correct comparison. */
2184 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2187 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
2192 #else /* NV_PRESERVES_UV */
2193 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2194 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2195 /* The IV/UV slot will have been set from value returned by
2196 grok_number above. The NV slot has just been set using
2199 assert (SvIOKp(sv));
2201 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2202 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2203 /* Small enough to preserve all bits. */
2204 (void)SvIOKp_on(sv);
2206 SvIV_set(sv, I_V(SvNVX(sv)));
2207 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2209 /* Assumption: first non-preserved integer is < IV_MAX,
2210 this NV is in the preserved range, therefore: */
2211 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2213 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);
2217 0 0 already failed to read UV.
2218 0 1 already failed to read UV.
2219 1 0 you won't get here in this case. IV/UV
2220 slot set, public IOK, Atof() unneeded.
2221 1 1 already read UV.
2222 so there's no point in sv_2iuv_non_preserve() attempting
2223 to use atol, strtol, strtoul etc. */
2225 sv_2iuv_non_preserve (sv, numtype);
2227 sv_2iuv_non_preserve (sv);
2231 #endif /* NV_PRESERVES_UV */
2232 /* It might be more code efficient to go through the entire logic above
2233 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2234 gets complex and potentially buggy, so more programmer efficient
2235 to do it this way, by turning off the public flags: */
2237 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2241 if (isGV_with_GP(sv))
2242 return glob_2number((GV *)sv);
2244 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2245 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2248 if (SvTYPE(sv) < SVt_IV)
2249 /* Typically the caller expects that sv_any is not NULL now. */
2250 sv_upgrade(sv, SVt_IV);
2251 /* Return 0 from the caller. */
2258 =for apidoc sv_2iv_flags
2260 Return the integer value of an SV, doing any necessary string
2261 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2262 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2268 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2273 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2274 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2275 cache IVs just in case. In practice it seems that they never
2276 actually anywhere accessible by user Perl code, let alone get used
2277 in anything other than a string context. */
2278 if (flags & SV_GMAGIC)
2283 return I_V(SvNVX(sv));
2285 if (SvPOKp(sv) && SvLEN(sv)) {
2288 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2290 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2291 == IS_NUMBER_IN_UV) {
2292 /* It's definitely an integer */
2293 if (numtype & IS_NUMBER_NEG) {
2294 if (value < (UV)IV_MIN)
2297 if (value < (UV)IV_MAX)
2302 if (ckWARN(WARN_NUMERIC))
2305 return I_V(Atof(SvPVX_const(sv)));
2310 assert(SvTYPE(sv) >= SVt_PVMG);
2311 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2312 } else if (SvTHINKFIRST(sv)) {
2316 SV * const tmpstr=AMG_CALLun(sv,numer);
2317 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2318 return SvIV(tmpstr);
2321 return PTR2IV(SvRV(sv));
2324 sv_force_normal_flags(sv, 0);
2326 if (SvREADONLY(sv) && !SvOK(sv)) {
2327 if (ckWARN(WARN_UNINITIALIZED))
2333 if (S_sv_2iuv_common(aTHX_ sv))
2336 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2337 PTR2UV(sv),SvIVX(sv)));
2338 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2342 =for apidoc sv_2uv_flags
2344 Return the unsigned integer value of an SV, doing any necessary string
2345 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2346 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2352 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2357 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2358 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2359 cache IVs just in case. */
2360 if (flags & SV_GMAGIC)
2365 return U_V(SvNVX(sv));
2366 if (SvPOKp(sv) && SvLEN(sv)) {
2369 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2371 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2372 == IS_NUMBER_IN_UV) {
2373 /* It's definitely an integer */
2374 if (!(numtype & IS_NUMBER_NEG))
2378 if (ckWARN(WARN_NUMERIC))
2381 return U_V(Atof(SvPVX_const(sv)));
2386 assert(SvTYPE(sv) >= SVt_PVMG);
2387 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2388 } else if (SvTHINKFIRST(sv)) {
2392 SV *const tmpstr = AMG_CALLun(sv,numer);
2393 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2394 return SvUV(tmpstr);
2397 return PTR2UV(SvRV(sv));
2400 sv_force_normal_flags(sv, 0);
2402 if (SvREADONLY(sv) && !SvOK(sv)) {
2403 if (ckWARN(WARN_UNINITIALIZED))
2409 if (S_sv_2iuv_common(aTHX_ sv))
2413 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2414 PTR2UV(sv),SvUVX(sv)));
2415 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2421 Return the num value of an SV, doing any necessary string or integer
2422 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2429 Perl_sv_2nv(pTHX_ register SV *const sv)
2434 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2435 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2436 cache IVs just in case. */
2440 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2441 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2442 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2444 return Atof(SvPVX_const(sv));
2448 return (NV)SvUVX(sv);
2450 return (NV)SvIVX(sv);
2455 assert(SvTYPE(sv) >= SVt_PVMG);
2456 /* This falls through to the report_uninit near the end of the
2458 } else if (SvTHINKFIRST(sv)) {
2462 SV *const tmpstr = AMG_CALLun(sv,numer);
2463 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2464 return SvNV(tmpstr);
2467 return PTR2NV(SvRV(sv));
2470 sv_force_normal_flags(sv, 0);
2472 if (SvREADONLY(sv) && !SvOK(sv)) {
2473 if (ckWARN(WARN_UNINITIALIZED))
2478 if (SvTYPE(sv) < SVt_NV) {
2479 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2480 sv_upgrade(sv, SVt_NV);
2481 #ifdef USE_LONG_DOUBLE
2483 STORE_NUMERIC_LOCAL_SET_STANDARD();
2484 PerlIO_printf(Perl_debug_log,
2485 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2486 PTR2UV(sv), SvNVX(sv));
2487 RESTORE_NUMERIC_LOCAL();
2491 STORE_NUMERIC_LOCAL_SET_STANDARD();
2492 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2493 PTR2UV(sv), SvNVX(sv));
2494 RESTORE_NUMERIC_LOCAL();
2498 else if (SvTYPE(sv) < SVt_PVNV)
2499 sv_upgrade(sv, SVt_PVNV);
2504 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2505 #ifdef NV_PRESERVES_UV
2511 /* Only set the public NV OK flag if this NV preserves the IV */
2512 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2514 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2515 : (SvIVX(sv) == I_V(SvNVX(sv))))
2521 else if (SvPOKp(sv) && SvLEN(sv)) {
2523 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2524 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2526 #ifdef NV_PRESERVES_UV
2527 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2528 == IS_NUMBER_IN_UV) {
2529 /* It's definitely an integer */
2530 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2532 SvNV_set(sv, Atof(SvPVX_const(sv)));
2538 SvNV_set(sv, Atof(SvPVX_const(sv)));
2539 /* Only set the public NV OK flag if this NV preserves the value in
2540 the PV at least as well as an IV/UV would.
2541 Not sure how to do this 100% reliably. */
2542 /* if that shift count is out of range then Configure's test is
2543 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2545 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2546 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2547 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2548 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2549 /* Can't use strtol etc to convert this string, so don't try.
2550 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2553 /* value has been set. It may not be precise. */
2554 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2555 /* 2s complement assumption for (UV)IV_MIN */
2556 SvNOK_on(sv); /* Integer is too negative. */
2561 if (numtype & IS_NUMBER_NEG) {
2562 SvIV_set(sv, -(IV)value);
2563 } else if (value <= (UV)IV_MAX) {
2564 SvIV_set(sv, (IV)value);
2566 SvUV_set(sv, value);
2570 if (numtype & IS_NUMBER_NOT_INT) {
2571 /* I believe that even if the original PV had decimals,
2572 they are lost beyond the limit of the FP precision.
2573 However, neither is canonical, so both only get p
2574 flags. NWC, 2000/11/25 */
2575 /* Both already have p flags, so do nothing */
2577 const NV nv = SvNVX(sv);
2578 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2579 if (SvIVX(sv) == I_V(nv)) {
2582 /* It had no "." so it must be integer. */
2586 /* between IV_MAX and NV(UV_MAX).
2587 Could be slightly > UV_MAX */
2589 if (numtype & IS_NUMBER_NOT_INT) {
2590 /* UV and NV both imprecise. */
2592 const UV nv_as_uv = U_V(nv);
2594 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2603 /* It might be more code efficient to go through the entire logic above
2604 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2605 gets complex and potentially buggy, so more programmer efficient
2606 to do it this way, by turning off the public flags: */
2608 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2609 #endif /* NV_PRESERVES_UV */
2612 if (isGV_with_GP(sv)) {
2613 glob_2number((GV *)sv);
2617 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2619 assert (SvTYPE(sv) >= SVt_NV);
2620 /* Typically the caller expects that sv_any is not NULL now. */
2621 /* XXX Ilya implies that this is a bug in callers that assume this
2622 and ideally should be fixed. */
2625 #if defined(USE_LONG_DOUBLE)
2627 STORE_NUMERIC_LOCAL_SET_STANDARD();
2628 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2629 PTR2UV(sv), SvNVX(sv));
2630 RESTORE_NUMERIC_LOCAL();
2634 STORE_NUMERIC_LOCAL_SET_STANDARD();
2635 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2636 PTR2UV(sv), SvNVX(sv));
2637 RESTORE_NUMERIC_LOCAL();
2646 Return an SV with the numeric value of the source SV, doing any necessary
2647 reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2648 access this function.
2654 Perl_sv_2num(pTHX_ register SV *const sv)
2656 PERL_ARGS_ASSERT_SV_2NUM;
2661 SV * const tmpsv = AMG_CALLun(sv,numer);
2662 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2663 return sv_2num(tmpsv);
2665 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2668 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2669 * UV as a string towards the end of buf, and return pointers to start and
2672 * We assume that buf is at least TYPE_CHARS(UV) long.
2676 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2678 char *ptr = buf + TYPE_CHARS(UV);
2679 char * const ebuf = ptr;
2682 PERL_ARGS_ASSERT_UIV_2BUF;
2694 *--ptr = '0' + (char)(uv % 10);
2703 =for apidoc sv_2pv_flags
2705 Returns a pointer to the string value of an SV, and sets *lp to its length.
2706 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2708 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2709 usually end up here too.
2715 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2725 if (SvGMAGICAL(sv)) {
2726 if (flags & SV_GMAGIC)
2731 if (flags & SV_MUTABLE_RETURN)
2732 return SvPVX_mutable(sv);
2733 if (flags & SV_CONST_RETURN)
2734 return (char *)SvPVX_const(sv);
2737 if (SvIOKp(sv) || SvNOKp(sv)) {
2738 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2743 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2744 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2746 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2753 #ifdef FIXNEGATIVEZERO
2754 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2760 SvUPGRADE(sv, SVt_PV);
2763 s = SvGROW_mutable(sv, len + 1);
2766 return (char*)memcpy(s, tbuf, len + 1);
2772 assert(SvTYPE(sv) >= SVt_PVMG);
2773 /* This falls through to the report_uninit near the end of the
2775 } else if (SvTHINKFIRST(sv)) {
2779 SV *const tmpstr = AMG_CALLun(sv,string);
2780 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2782 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2786 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2787 if (flags & SV_CONST_RETURN) {
2788 pv = (char *) SvPVX_const(tmpstr);
2790 pv = (flags & SV_MUTABLE_RETURN)
2791 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2794 *lp = SvCUR(tmpstr);
2796 pv = sv_2pv_flags(tmpstr, lp, flags);
2809 const SV *const referent = (SV*)SvRV(sv);
2813 retval = buffer = savepvn("NULLREF", len);
2814 } else if (SvTYPE(referent) == SVt_REGEXP) {
2815 const REGEXP * const re = (REGEXP *)referent;
2820 /* If the regex is UTF-8 we want the containing scalar to
2821 have an UTF-8 flag too */
2827 if ((seen_evals = RX_SEEN_EVALS(re)))
2828 PL_reginterp_cnt += seen_evals;
2831 *lp = RX_WRAPLEN(re);
2833 return RX_WRAPPED(re);
2835 const char *const typestr = sv_reftype(referent, 0);
2836 const STRLEN typelen = strlen(typestr);
2837 UV addr = PTR2UV(referent);
2838 const char *stashname = NULL;
2839 STRLEN stashnamelen = 0; /* hush, gcc */
2840 const char *buffer_end;
2842 if (SvOBJECT(referent)) {
2843 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2846 stashname = HEK_KEY(name);
2847 stashnamelen = HEK_LEN(name);
2849 if (HEK_UTF8(name)) {
2855 stashname = "__ANON__";
2858 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2859 + 2 * sizeof(UV) + 2 /* )\0 */;
2861 len = typelen + 3 /* (0x */
2862 + 2 * sizeof(UV) + 2 /* )\0 */;
2865 Newx(buffer, len, char);
2866 buffer_end = retval = buffer + len;
2868 /* Working backwards */
2872 *--retval = PL_hexdigit[addr & 15];
2873 } while (addr >>= 4);
2879 memcpy(retval, typestr, typelen);
2883 retval -= stashnamelen;
2884 memcpy(retval, stashname, stashnamelen);
2886 /* retval may not neccesarily have reached the start of the
2888 assert (retval >= buffer);
2890 len = buffer_end - retval - 1; /* -1 for that \0 */
2898 if (SvREADONLY(sv) && !SvOK(sv)) {
2901 if (flags & SV_UNDEF_RETURNS_NULL)
2903 if (ckWARN(WARN_UNINITIALIZED))
2908 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2909 /* I'm assuming that if both IV and NV are equally valid then
2910 converting the IV is going to be more efficient */
2911 const U32 isUIOK = SvIsUV(sv);
2912 char buf[TYPE_CHARS(UV)];
2916 if (SvTYPE(sv) < SVt_PVIV)
2917 sv_upgrade(sv, SVt_PVIV);
2918 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2920 /* inlined from sv_setpvn */
2921 s = SvGROW_mutable(sv, len + 1);
2922 Move(ptr, s, len, char);
2926 else if (SvNOKp(sv)) {
2927 const int olderrno = errno;
2928 if (SvTYPE(sv) < SVt_PVNV)
2929 sv_upgrade(sv, SVt_PVNV);
2930 /* The +20 is pure guesswork. Configure test needed. --jhi */
2931 s = SvGROW_mutable(sv, NV_DIG + 20);
2932 /* some Xenix systems wipe out errno here */
2934 if (SvNVX(sv) == 0.0)
2935 my_strlcpy(s, "0", SvLEN(sv));
2939 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2942 #ifdef FIXNEGATIVEZERO
2943 if (*s == '-' && s[1] == '0' && !s[2]) {
2955 if (isGV_with_GP(sv))
2956 return glob_2pv((GV *)sv, lp);
2960 if (flags & SV_UNDEF_RETURNS_NULL)
2962 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2964 if (SvTYPE(sv) < SVt_PV)
2965 /* Typically the caller expects that sv_any is not NULL now. */
2966 sv_upgrade(sv, SVt_PV);
2970 const STRLEN len = s - SvPVX_const(sv);
2976 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2977 PTR2UV(sv),SvPVX_const(sv)));
2978 if (flags & SV_CONST_RETURN)
2979 return (char *)SvPVX_const(sv);
2980 if (flags & SV_MUTABLE_RETURN)
2981 return SvPVX_mutable(sv);
2986 =for apidoc sv_copypv
2988 Copies a stringified representation of the source SV into the
2989 destination SV. Automatically performs any necessary mg_get and
2990 coercion of numeric values into strings. Guaranteed to preserve
2991 UTF8 flag even from overloaded objects. Similar in nature to
2992 sv_2pv[_flags] but operates directly on an SV instead of just the
2993 string. Mostly uses sv_2pv_flags to do its work, except when that
2994 would lose the UTF-8'ness of the PV.
3000 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3003 const char * const s = SvPV_const(ssv,len);
3005 PERL_ARGS_ASSERT_SV_COPYPV;
3007 sv_setpvn(dsv,s,len);
3015 =for apidoc sv_2pvbyte
3017 Return a pointer to the byte-encoded representation of the SV, and set *lp
3018 to its length. May cause the SV to be downgraded from UTF-8 as a
3021 Usually accessed via the C<SvPVbyte> macro.
3027 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3029 PERL_ARGS_ASSERT_SV_2PVBYTE;
3031 sv_utf8_downgrade(sv,0);
3032 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3036 =for apidoc sv_2pvutf8
3038 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3039 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3041 Usually accessed via the C<SvPVutf8> macro.
3047 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3049 PERL_ARGS_ASSERT_SV_2PVUTF8;
3051 sv_utf8_upgrade(sv);
3052 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3057 =for apidoc sv_2bool
3059 This function is only called on magical items, and is only used by
3060 sv_true() or its macro equivalent.
3066 Perl_sv_2bool(pTHX_ register SV *const sv)
3070 PERL_ARGS_ASSERT_SV_2BOOL;
3078 SV * const tmpsv = AMG_CALLun(sv,bool_);
3079 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3080 return (bool)SvTRUE(tmpsv);
3082 return SvRV(sv) != 0;
3085 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3087 (*sv->sv_u.svu_pv > '0' ||
3088 Xpvtmp->xpv_cur > 1 ||
3089 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3096 return SvIVX(sv) != 0;
3099 return SvNVX(sv) != 0.0;
3101 if (isGV_with_GP(sv))
3111 =for apidoc sv_utf8_upgrade
3113 Converts the PV of an SV to its UTF-8-encoded form.
3114 Forces the SV to string form if it is not already.
3115 Always sets the SvUTF8 flag to avoid future validity checks even
3116 if all the bytes have hibit clear.
3118 This is not as a general purpose byte encoding to Unicode interface:
3119 use the Encode extension for that.
3121 =for apidoc sv_utf8_upgrade_flags
3123 Converts the PV of an SV to its UTF-8-encoded form.
3124 Forces the SV to string form if it is not already.
3125 Always sets the SvUTF8 flag to avoid future validity checks even
3126 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3127 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3128 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3130 This is not as a general purpose byte encoding to Unicode interface:
3131 use the Encode extension for that.
3137 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *const sv, const I32 flags)
3141 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS;
3143 if (sv == &PL_sv_undef)
3147 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3148 (void) sv_2pv_flags(sv,&len, flags);
3152 (void) SvPV_force(sv,len);
3161 sv_force_normal_flags(sv, 0);
3164 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3165 sv_recode_to_utf8(sv, PL_encoding);
3166 else { /* Assume Latin-1/EBCDIC */
3167 /* This function could be much more efficient if we
3168 * had a FLAG in SVs to signal if there are any hibit
3169 * chars in the PV. Given that there isn't such a flag
3170 * make the loop as fast as possible. */
3171 const U8 * const s = (U8 *) SvPVX_const(sv);
3172 const U8 * const e = (U8 *) SvEND(sv);
3177 /* Check for hi bit */
3178 if (!NATIVE_IS_INVARIANT(ch)) {
3179 STRLEN len = SvCUR(sv);
3180 /* *Currently* bytes_to_utf8() adds a '\0' after every string
3181 it converts. This isn't documented. It's not clear if it's
3182 a bad thing to be doing, and should be changed to do exactly
3183 what the documentation says. If so, this code will have to
3185 As is, we mustn't rely on our incoming SV being well formed
3186 and having a trailing '\0', as certain code in pp_formline
3187 can send us partially built SVs. */
3188 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3190 SvPV_free(sv); /* No longer using what was there before. */
3191 SvPV_set(sv, (char*)recoded);
3193 SvLEN_set(sv, len + 1); /* No longer know the real size. */
3197 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3204 =for apidoc sv_utf8_downgrade
3206 Attempts to convert the PV of an SV from characters to bytes.
3207 If the PV contains a character beyond byte, this conversion will fail;
3208 in this case, either returns false or, if C<fail_ok> is not
3211 This is not as a general purpose Unicode to byte encoding interface:
3212 use the Encode extension for that.
3218 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3222 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3224 if (SvPOKp(sv) && SvUTF8(sv)) {
3230 sv_force_normal_flags(sv, 0);
3232 s = (U8 *) SvPV(sv, len);
3233 if (!utf8_to_bytes(s, &len)) {
3238 Perl_croak(aTHX_ "Wide character in %s",
3241 Perl_croak(aTHX_ "Wide character");
3252 =for apidoc sv_utf8_encode
3254 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3255 flag off so that it looks like octets again.
3261 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3263 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3266 sv_force_normal_flags(sv, 0);
3268 if (SvREADONLY(sv)) {
3269 Perl_croak(aTHX_ PL_no_modify);
3271 (void) sv_utf8_upgrade(sv);
3276 =for apidoc sv_utf8_decode
3278 If the PV of the SV is an octet sequence in UTF-8
3279 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3280 so that it looks like a character. If the PV contains only single-byte
3281 characters, the C<SvUTF8> flag stays being off.
3282 Scans PV for validity and returns false if the PV is invalid UTF-8.
3288 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3290 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3296 /* The octets may have got themselves encoded - get them back as
3299 if (!sv_utf8_downgrade(sv, TRUE))
3302 /* it is actually just a matter of turning the utf8 flag on, but
3303 * we want to make sure everything inside is valid utf8 first.
3305 c = (const U8 *) SvPVX_const(sv);
3306 if (!is_utf8_string(c, SvCUR(sv)+1))
3308 e = (const U8 *) SvEND(sv);
3311 if (!UTF8_IS_INVARIANT(ch)) {
3321 =for apidoc sv_setsv
3323 Copies the contents of the source SV C<ssv> into the destination SV
3324 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3325 function if the source SV needs to be reused. Does not handle 'set' magic.
3326 Loosely speaking, it performs a copy-by-value, obliterating any previous
3327 content of the destination.
3329 You probably want to use one of the assortment of wrappers, such as
3330 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3331 C<SvSetMagicSV_nosteal>.
3333 =for apidoc sv_setsv_flags
3335 Copies the contents of the source SV C<ssv> into the destination SV
3336 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3337 function if the source SV needs to be reused. Does not handle 'set' magic.
3338 Loosely speaking, it performs a copy-by-value, obliterating any previous
3339 content of the destination.
3340 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3341 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3342 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3343 and C<sv_setsv_nomg> are implemented in terms of this function.
3345 You probably want to use one of the assortment of wrappers, such as
3346 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3347 C<SvSetMagicSV_nosteal>.
3349 This is the primary function for copying scalars, and most other
3350 copy-ish functions and macros use this underneath.
3356 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3358 I32 mro_changes = 0; /* 1 = method, 2 = isa */
3360 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3362 if (dtype != SVt_PVGV) {
3363 const char * const name = GvNAME(sstr);
3364 const STRLEN len = GvNAMELEN(sstr);
3366 if (dtype >= SVt_PV) {
3372 SvUPGRADE(dstr, SVt_PVGV);
3373 (void)SvOK_off(dstr);
3374 /* FIXME - why are we doing this, then turning it off and on again
3376 isGV_with_GP_on(dstr);
3378 GvSTASH(dstr) = GvSTASH(sstr);
3380 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
3381 gv_name_set((GV *)dstr, name, len, GV_ADD);
3382 SvFAKE_on(dstr); /* can coerce to non-glob */
3385 #ifdef GV_UNIQUE_CHECK
3386 if (GvUNIQUE((GV*)dstr)) {
3387 Perl_croak(aTHX_ PL_no_modify);
3391 if(GvGP((GV*)sstr)) {
3392 /* If source has method cache entry, clear it */
3394 SvREFCNT_dec(GvCV(sstr));
3398 /* If source has a real method, then a method is
3400 else if(GvCV((GV*)sstr)) {
3405 /* If dest already had a real method, that's a change as well */
3406 if(!mro_changes && GvGP((GV*)dstr) && GvCVu((GV*)dstr)) {
3410 if(strEQ(GvNAME((GV*)dstr),"ISA"))
3414 isGV_with_GP_off(dstr);
3415 (void)SvOK_off(dstr);
3416 isGV_with_GP_on(dstr);
3417 GvINTRO_off(dstr); /* one-shot flag */
3418 GvGP(dstr) = gp_ref(GvGP(sstr));
3419 if (SvTAINTED(sstr))
3421 if (GvIMPORTED(dstr) != GVf_IMPORTED
3422 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3424 GvIMPORTED_on(dstr);
3427 if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3428 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3433 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3435 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3437 const int intro = GvINTRO(dstr);
3440 const U32 stype = SvTYPE(sref);
3442 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3444 #ifdef GV_UNIQUE_CHECK
3445 if (GvUNIQUE((GV*)dstr)) {
3446 Perl_croak(aTHX_ PL_no_modify);
3451 GvINTRO_off(dstr); /* one-shot flag */
3452 GvLINE(dstr) = CopLINE(PL_curcop);
3453 GvEGV(dstr) = (GV*)dstr;
3458 location = (SV **) &GvCV(dstr);
3459 import_flag = GVf_IMPORTED_CV;
3462 location = (SV **) &GvHV(dstr);
3463 import_flag = GVf_IMPORTED_HV;
3466 location = (SV **) &GvAV(dstr);
3467 import_flag = GVf_IMPORTED_AV;
3470 location = (SV **) &GvIOp(dstr);
3473 location = (SV **) &GvFORM(dstr);
3475 location = &GvSV(dstr);
3476 import_flag = GVf_IMPORTED_SV;
3479 if (stype == SVt_PVCV) {
3480 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (CV*)sref || GvCVGEN(dstr))) {*/
3481 if (GvCVGEN(dstr)) {
3482 SvREFCNT_dec(GvCV(dstr));
3484 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3487 SAVEGENERICSV(*location);
3491 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3492 CV* const cv = (CV*)*location;
3494 if (!GvCVGEN((GV*)dstr) &&
3495 (CvROOT(cv) || CvXSUB(cv)))
3497 /* Redefining a sub - warning is mandatory if
3498 it was a const and its value changed. */
3499 if (CvCONST(cv) && CvCONST((CV*)sref)
3500 && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
3502 /* They are 2 constant subroutines generated from
3503 the same constant. This probably means that
3504 they are really the "same" proxy subroutine
3505 instantiated in 2 places. Most likely this is
3506 when a constant is exported twice. Don't warn.
3509 else if (ckWARN(WARN_REDEFINE)
3511 && (!CvCONST((CV*)sref)
3512 || sv_cmp(cv_const_sv(cv),
3513 cv_const_sv((CV*)sref))))) {
3514 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3517 ? "Constant subroutine %s::%s redefined"
3518 : "Subroutine %s::%s redefined"),
3519 HvNAME_get(GvSTASH((GV*)dstr)),
3520 GvENAME((GV*)dstr));
3524 cv_ckproto_len(cv, (GV*)dstr,
3525 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3526 SvPOK(sref) ? SvCUR(sref) : 0);
3528 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3529 GvASSUMECV_on(dstr);
3530 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3533 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3534 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3535 GvFLAGS(dstr) |= import_flag;
3540 if (SvTAINTED(sstr))
3546 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3549 register U32 sflags;
3551 register svtype stype;
3553 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3558 if (SvIS_FREED(dstr)) {
3559 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3560 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3562 SV_CHECK_THINKFIRST_COW_DROP(dstr);
3564 sstr = &PL_sv_undef;
3565 if (SvIS_FREED(sstr)) {
3566 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3567 (void*)sstr, (void*)dstr);
3569 stype = SvTYPE(sstr);
3570 dtype = SvTYPE(dstr);
3572 (void)SvAMAGIC_off(dstr);
3575 /* need to nuke the magic */
3579 /* There's a lot of redundancy below but we're going for speed here */
3584 if (dtype != SVt_PVGV) {
3585 (void)SvOK_off(dstr);
3593 sv_upgrade(dstr, SVt_IV);
3597 sv_upgrade(dstr, SVt_PVIV);
3600 goto end_of_first_switch;
3602 (void)SvIOK_only(dstr);
3603 SvIV_set(dstr, SvIVX(sstr));
3606 /* SvTAINTED can only be true if the SV has taint magic, which in
3607 turn means that the SV type is PVMG (or greater). This is the
3608 case statement for SVt_IV, so this cannot be true (whatever gcov
3610 assert(!SvTAINTED(sstr));
3615 if (dtype < SVt_PV && dtype != SVt_IV)
3616 sv_upgrade(dstr, SVt_IV);
3624 sv_upgrade(dstr, SVt_NV);
3628 sv_upgrade(dstr, SVt_PVNV);
3631 goto end_of_first_switch;
3633 SvNV_set(dstr, SvNVX(sstr));
3634 (void)SvNOK_only(dstr);
3635 /* SvTAINTED can only be true if the SV has taint magic, which in
3636 turn means that the SV type is PVMG (or greater). This is the
3637 case statement for SVt_NV, so this cannot be true (whatever gcov
3639 assert(!SvTAINTED(sstr));
3645 #ifdef PERL_OLD_COPY_ON_WRITE
3646 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3647 if (dtype < SVt_PVIV)
3648 sv_upgrade(dstr, SVt_PVIV);
3656 sv_upgrade(dstr, SVt_PV);
3659 if (dtype < SVt_PVIV)
3660 sv_upgrade(dstr, SVt_PVIV);
3663 if (dtype < SVt_PVNV)
3664 sv_upgrade(dstr, SVt_PVNV);
3668 const char * const type = sv_reftype(sstr,0);
3670 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3672 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3676 /* case SVt_BIND: */
3679 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
3680 glob_assign_glob(dstr, sstr, dtype);
3683 /* SvVALID means that this PVGV is playing at being an FBM. */
3687 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3689 if (SvTYPE(sstr) != stype) {
3690 stype = SvTYPE(sstr);
3691 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
3692 glob_assign_glob(dstr, sstr, dtype);
3697 if (stype == SVt_PVLV)
3698 SvUPGRADE(dstr, SVt_PVNV);
3700 SvUPGRADE(dstr, (svtype)stype);
3702 end_of_first_switch:
3704 /* dstr may have been upgraded. */
3705 dtype = SvTYPE(dstr);
3706 sflags = SvFLAGS(sstr);
3708 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
3709 /* Assigning to a subroutine sets the prototype. */
3712 const char *const ptr = SvPV_const(sstr, len);
3714 SvGROW(dstr, len + 1);
3715 Copy(ptr, SvPVX(dstr), len + 1, char);
3716 SvCUR_set(dstr, len);
3718 SvFLAGS(dstr) |= sflags & SVf_UTF8;
3722 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3723 const char * const type = sv_reftype(dstr,0);
3725 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_NAME(PL_op));
3727 Perl_croak(aTHX_ "Cannot copy to %s", type);
3728 } else if (sflags & SVf_ROK) {
3729 if (isGV_with_GP(dstr) && dtype == SVt_PVGV
3730 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
3733 if (GvIMPORTED(dstr) != GVf_IMPORTED
3734 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3736 GvIMPORTED_on(dstr);
3741 glob_assign_glob(dstr, sstr, dtype);
3745 if (dtype >= SVt_PV) {
3746 if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
3747 glob_assign_ref(dstr, sstr);
3750 if (SvPVX_const(dstr)) {
3756 (void)SvOK_off(dstr);
3757 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3758 SvFLAGS(dstr) |= sflags & SVf_ROK;
3759 assert(!(sflags & SVp_NOK));
3760 assert(!(sflags & SVp_IOK));
3761 assert(!(sflags & SVf_NOK));
3762 assert(!(sflags & SVf_IOK));
3764 else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
3765 if (!(sflags & SVf_OK)) {
3766 if (ckWARN(WARN_MISC))
3767 Perl_warner(aTHX_ packWARN(WARN_MISC),
3768 "Undefined value assigned to typeglob");
3771 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3772 if (dstr != (SV*)gv) {
3775 GvGP(dstr) = gp_ref(GvGP(gv));
3779 else if (sflags & SVp_POK) {
3783 * Check to see if we can just swipe the string. If so, it's a
3784 * possible small lose on short strings, but a big win on long ones.
3785 * It might even be a win on short strings if SvPVX_const(dstr)
3786 * has to be allocated and SvPVX_const(sstr) has to be freed.
3787 * Likewise if we can set up COW rather than doing an actual copy, we
3788 * drop to the else clause, as the swipe code and the COW setup code
3789 * have much in common.
3792 /* Whichever path we take through the next code, we want this true,
3793 and doing it now facilitates the COW check. */
3794 (void)SvPOK_only(dstr);
3797 /* If we're already COW then this clause is not true, and if COW
3798 is allowed then we drop down to the else and make dest COW
3799 with us. If caller hasn't said that we're allowed to COW
3800 shared hash keys then we don't do the COW setup, even if the
3801 source scalar is a shared hash key scalar. */
3802 (((flags & SV_COW_SHARED_HASH_KEYS)
3803 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
3804 : 1 /* If making a COW copy is forbidden then the behaviour we
3805 desire is as if the source SV isn't actually already
3806 COW, even if it is. So we act as if the source flags
3807 are not COW, rather than actually testing them. */
3809 #ifndef PERL_OLD_COPY_ON_WRITE
3810 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
3811 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
3812 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
3813 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
3814 but in turn, it's somewhat dead code, never expected to go
3815 live, but more kept as a placeholder on how to do it better
3816 in a newer implementation. */
3817 /* If we are COW and dstr is a suitable target then we drop down
3818 into the else and make dest a COW of us. */
3819 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3824 (sflags & SVs_TEMP) && /* slated for free anyway? */
3825 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3826 (!(flags & SV_NOSTEAL)) &&
3827 /* and we're allowed to steal temps */
3828 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3829 SvLEN(sstr) && /* and really is a string */
3830 /* and won't be needed again, potentially */
3831 !(PL_op && PL_op->op_type == OP_AASSIGN))
3832 #ifdef PERL_OLD_COPY_ON_WRITE
3833 && ((flags & SV_COW_SHARED_HASH_KEYS)
3834 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3835 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
3836 && SvTYPE(sstr) >= SVt_PVIV))
3840 /* Failed the swipe test, and it's not a shared hash key either.
3841 Have to copy the string. */
3842 STRLEN len = SvCUR(sstr);
3843 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3844 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
3845 SvCUR_set(dstr, len);
3846 *SvEND(dstr) = '\0';
3848 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
3850 /* Either it's a shared hash key, or it's suitable for
3851 copy-on-write or we can swipe the string. */
3853 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
3857 #ifdef PERL_OLD_COPY_ON_WRITE
3859 /* I believe I should acquire a global SV mutex if
3860 it's a COW sv (not a shared hash key) to stop
3861 it going un copy-on-write.
3862 If the source SV has gone un copy on write between up there
3863 and down here, then (assert() that) it is of the correct
3864 form to make it copy on write again */
3865 if ((sflags & (SVf_FAKE | SVf_READONLY))
3866 != (SVf_FAKE | SVf_READONLY)) {
3867 SvREADONLY_on(sstr);
3869 /* Make the source SV into a loop of 1.
3870 (about to become 2) */
3871 SV_COW_NEXT_SV_SET(sstr, sstr);
3875 /* Initial code is common. */
3876 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
3881 /* making another shared SV. */
3882 STRLEN cur = SvCUR(sstr);
3883 STRLEN len = SvLEN(sstr);
3884 #ifdef PERL_OLD_COPY_ON_WRITE
3886 assert (SvTYPE(dstr) >= SVt_PVIV);
3887 /* SvIsCOW_normal */
3888 /* splice us in between source and next-after-source. */
3889 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3890 SV_COW_NEXT_SV_SET(sstr, dstr);
3891 SvPV_set(dstr, SvPVX_mutable(sstr));
3895 /* SvIsCOW_shared_hash */
3896 DEBUG_C(PerlIO_printf(Perl_debug_log,
3897 "Copy on write: Sharing hash\n"));
3899 assert (SvTYPE(dstr) >= SVt_PV);
3901 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
3903 SvLEN_set(dstr, len);
3904 SvCUR_set(dstr, cur);
3905 SvREADONLY_on(dstr);
3907 /* Relesase a global SV mutex. */
3910 { /* Passes the swipe test. */
3911 SvPV_set(dstr, SvPVX_mutable(sstr));
3912 SvLEN_set(dstr, SvLEN(sstr));
3913 SvCUR_set(dstr, SvCUR(sstr));
3916 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3917 SvPV_set(sstr, NULL);
3923 if (sflags & SVp_NOK) {
3924 SvNV_set(dstr, SvNVX(sstr));
3926 if (sflags & SVp_IOK) {
3927 SvIV_set(dstr, SvIVX(sstr));
3928 /* Must do this otherwise some other overloaded use of 0x80000000
3929 gets confused. I guess SVpbm_VALID */
3930 if (sflags & SVf_IVisUV)
3933 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
3935 const MAGIC * const smg = SvVSTRING_mg(sstr);
3937 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3938 smg->mg_ptr, smg->mg_len);
3939 SvRMAGICAL_on(dstr);
3943 else if (sflags & (SVp_IOK|SVp_NOK)) {
3944 (void)SvOK_off(dstr);
3945 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
3946 if (sflags & SVp_IOK) {
3947 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3948 SvIV_set(dstr, SvIVX(sstr));
3950 if (sflags & SVp_NOK) {
3951 SvNV_set(dstr, SvNVX(sstr));
3955 if (isGV_with_GP(sstr)) {
3956 /* This stringification rule for globs is spread in 3 places.
3957 This feels bad. FIXME. */
3958 const U32 wasfake = sflags & SVf_FAKE;
3960 /* FAKE globs can get coerced, so need to turn this off
3961 temporarily if it is on. */
3963 gv_efullname3(dstr, (GV *)sstr, "*");
3964 SvFLAGS(sstr) |= wasfake;
3967 (void)SvOK_off(dstr);
3969 if (SvTAINTED(sstr))
3974 =for apidoc sv_setsv_mg
3976 Like C<sv_setsv>, but also handles 'set' magic.
3982 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
3984 PERL_ARGS_ASSERT_SV_SETSV_MG;
3986 sv_setsv(dstr,sstr);
3990 #ifdef PERL_OLD_COPY_ON_WRITE
3992 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3994 STRLEN cur = SvCUR(sstr);
3995 STRLEN len = SvLEN(sstr);
3996 register char *new_pv;
3998 PERL_ARGS_ASSERT_SV_SETSV_COW;
4001 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4002 (void*)sstr, (void*)dstr);
4009 if (SvTHINKFIRST(dstr))
4010 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4011 else if (SvPVX_const(dstr))
4012 Safefree(SvPVX_const(dstr));
4016 SvUPGRADE(dstr, SVt_PVIV);
4018 assert (SvPOK(sstr));
4019 assert (SvPOKp(sstr));
4020 assert (!SvIOK(sstr));
4021 assert (!SvIOKp(sstr));
4022 assert (!SvNOK(sstr));
4023 assert (!SvNOKp(sstr));
4025 if (SvIsCOW(sstr)) {
4027 if (SvLEN(sstr) == 0) {
4028 /* source is a COW shared hash key. */
4029 DEBUG_C(PerlIO_printf(Perl_debug_log,
4030 "Fast copy on write: Sharing hash\n"));
4031 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4034 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4036 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4037 SvUPGRADE(sstr, SVt_PVIV);
4038 SvREADONLY_on(sstr);
4040 DEBUG_C(PerlIO_printf(Perl_debug_log,
4041 "Fast copy on write: Converting sstr to COW\n"));
4042 SV_COW_NEXT_SV_SET(dstr, sstr);
4044 SV_COW_NEXT_SV_SET(sstr, dstr);
4045 new_pv = SvPVX_mutable(sstr);
4048 SvPV_set(dstr, new_pv);
4049 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4052 SvLEN_set(dstr, len);
4053 SvCUR_set(dstr, cur);
4062 =for apidoc sv_setpvn
4064 Copies a string into an SV. The C<len> parameter indicates the number of
4065 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4066 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4072 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4075 register char *dptr;
4077 PERL_ARGS_ASSERT_SV_SETPVN;
4079 SV_CHECK_THINKFIRST_COW_DROP(sv);
4085 /* len is STRLEN which is unsigned, need to copy to signed */
4088 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4090 SvUPGRADE(sv, SVt_PV);
4092 dptr = SvGROW(sv, len + 1);
4093 Move(ptr,dptr,len,char);
4096 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4101 =for apidoc sv_setpvn_mg
4103 Like C<sv_setpvn>, but also handles 'set' magic.
4109 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4111 PERL_ARGS_ASSERT_SV_SETPVN_MG;
4113 sv_setpvn(sv,ptr,len);
4118 =for apidoc sv_setpv
4120 Copies a string into an SV. The string must be null-terminated. Does not
4121 handle 'set' magic. See C<sv_setpv_mg>.
4127 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4130 register STRLEN len;
4132 PERL_ARGS_ASSERT_SV_SETPV;
4134 SV_CHECK_THINKFIRST_COW_DROP(sv);
4140 SvUPGRADE(sv, SVt_PV);
4142 SvGROW(sv, len + 1);
4143 Move(ptr,SvPVX(sv),len+1,char);
4145 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4150 =for apidoc sv_setpv_mg
4152 Like C<sv_setpv>, but also handles 'set' magic.
4158 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4160 PERL_ARGS_ASSERT_SV_SETPV_MG;
4167 =for apidoc sv_usepvn_flags
4169 Tells an SV to use C<ptr> to find its string value. Normally the
4170 string is stored inside the SV but sv_usepvn allows the SV to use an
4171 outside string. The C<ptr> should point to memory that was allocated
4172 by C<malloc>. The string length, C<len>, must be supplied. By default
4173 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4174 so that pointer should not be freed or used by the programmer after
4175 giving it to sv_usepvn, and neither should any pointers from "behind"
4176 that pointer (e.g. ptr + 1) be used.
4178 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4179 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4180 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4181 C<len>, and already meets the requirements for storing in C<SvPVX>)
4187 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4192 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4194 SV_CHECK_THINKFIRST_COW_DROP(sv);
4195 SvUPGRADE(sv, SVt_PV);
4198 if (flags & SV_SMAGIC)
4202 if (SvPVX_const(sv))
4206 if (flags & SV_HAS_TRAILING_NUL)
4207 assert(ptr[len] == '\0');
4210 allocate = (flags & SV_HAS_TRAILING_NUL)
4212 #ifdef Perl_safesysmalloc_size
4215 PERL_STRLEN_ROUNDUP(len + 1);
4217 if (flags & SV_HAS_TRAILING_NUL) {
4218 /* It's long enough - do nothing.
4219 Specfically Perl_newCONSTSUB is relying on this. */
4222 /* Force a move to shake out bugs in callers. */
4223 char *new_ptr = (char*)safemalloc(allocate);
4224 Copy(ptr, new_ptr, len, char);
4225 PoisonFree(ptr,len,char);
4229 ptr = (char*) saferealloc (ptr, allocate);
4232 #ifdef Perl_safesysmalloc_size
4233 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4235 SvLEN_set(sv, allocate);
4239 if (!(flags & SV_HAS_TRAILING_NUL)) {
4242 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4244 if (flags & SV_SMAGIC)
4248 #ifdef PERL_OLD_COPY_ON_WRITE
4249 /* Need to do this *after* making the SV normal, as we need the buffer
4250 pointer to remain valid until after we've copied it. If we let go too early,
4251 another thread could invalidate it by unsharing last of the same hash key
4252 (which it can do by means other than releasing copy-on-write Svs)
4253 or by changing the other copy-on-write SVs in the loop. */
4255 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4257 PERL_ARGS_ASSERT_SV_RELEASE_COW;
4259 { /* this SV was SvIsCOW_normal(sv) */
4260 /* we need to find the SV pointing to us. */
4261 SV *current = SV_COW_NEXT_SV(after);
4263 if (current == sv) {
4264 /* The SV we point to points back to us (there were only two of us
4266 Hence other SV is no longer copy on write either. */
4268 SvREADONLY_off(after);
4270 /* We need to follow the pointers around the loop. */
4272 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4275 /* don't loop forever if the structure is bust, and we have
4276 a pointer into a closed loop. */
4277 assert (current != after);
4278 assert (SvPVX_const(current) == pvx);
4280 /* Make the SV before us point to the SV after us. */
4281 SV_COW_NEXT_SV_SET(current, after);
4287 =for apidoc sv_force_normal_flags
4289 Undo various types of fakery on an SV: if the PV is a shared string, make
4290 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4291 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4292 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4293 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4294 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4295 set to some other value.) In addition, the C<flags> parameter gets passed to
4296 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4297 with flags set to 0.
4303 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4307 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4309 #ifdef PERL_OLD_COPY_ON_WRITE
4310 if (SvREADONLY(sv)) {
4311 /* At this point I believe I should acquire a global SV mutex. */
4313 const char * const pvx = SvPVX_const(sv);
4314 const STRLEN len = SvLEN(sv);
4315 const STRLEN cur = SvCUR(sv);
4316 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4317 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4318 we'll fail an assertion. */
4319 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4322 PerlIO_printf(Perl_debug_log,
4323 "Copy on write: Force normal %ld\n",
4329 /* This SV doesn't own the buffer, so need to Newx() a new one: */
4332 if (flags & SV_COW_DROP_PV) {
4333 /* OK, so we don't need to copy our buffer. */
4336 SvGROW(sv, cur + 1);
4337 Move(pvx,SvPVX(sv),cur,char);
4342 sv_release_COW(sv, pvx, next);
4344 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4350 else if (IN_PERL_RUNTIME)
4351 Perl_croak(aTHX_ PL_no_modify);
4352 /* At this point I believe that I can drop the global SV mutex. */
4355 if (SvREADONLY(sv)) {
4357 const char * const pvx = SvPVX_const(sv);
4358 const STRLEN len = SvCUR(sv);
4363 SvGROW(sv, len + 1);
4364 Move(pvx,SvPVX(sv),len,char);
4366 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4368 else if (IN_PERL_RUNTIME)
4369 Perl_croak(aTHX_ PL_no_modify);
4373 sv_unref_flags(sv, flags);
4374 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4381 Efficient removal of characters from the beginning of the string buffer.
4382 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4383 the string buffer. The C<ptr> becomes the first character of the adjusted
4384 string. Uses the "OOK hack".
4385 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4386 refer to the same chunk of data.
4392 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4398 const U8 *real_start;
4402 PERL_ARGS_ASSERT_SV_CHOP;
4404 if (!ptr || !SvPOKp(sv))
4406 delta = ptr - SvPVX_const(sv);
4408 /* Nothing to do. */
4411 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4412 nothing uses the value of ptr any more. */
4413 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4414 if (ptr <= SvPVX_const(sv))
4415 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4416 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4417 SV_CHECK_THINKFIRST(sv);
4418 if (delta > max_delta)
4419 Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4420 SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4421 SvPVX_const(sv) + max_delta);
4424 if (!SvLEN(sv)) { /* make copy of shared string */
4425 const char *pvx = SvPVX_const(sv);
4426 const STRLEN len = SvCUR(sv);
4427 SvGROW(sv, len + 1);
4428 Move(pvx,SvPVX(sv),len,char);
4431 SvFLAGS(sv) |= SVf_OOK;
4434 SvOOK_offset(sv, old_delta);
4436 SvLEN_set(sv, SvLEN(sv) - delta);
4437 SvCUR_set(sv, SvCUR(sv) - delta);
4438 SvPV_set(sv, SvPVX(sv) + delta);
4440 p = (U8 *)SvPVX_const(sv);
4445 real_start = p - delta;
4449 if (delta < 0x100) {
4453 p -= sizeof(STRLEN);
4454 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4458 /* Fill the preceding buffer with sentinals to verify that no-one is
4460 while (p > real_start) {
4468 =for apidoc sv_catpvn
4470 Concatenates the string onto the end of the string which is in the SV. The
4471 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4472 status set, then the bytes appended should be valid UTF-8.
4473 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4475 =for apidoc sv_catpvn_flags
4477 Concatenates the string onto the end of the string which is in the SV. The
4478 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4479 status set, then the bytes appended should be valid UTF-8.
4480 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4481 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4482 in terms of this function.
4488 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4492 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4494 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4496 SvGROW(dsv, dlen + slen + 1);
4498 sstr = SvPVX_const(dsv);
4499 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4500 SvCUR_set(dsv, SvCUR(dsv) + slen);
4502 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4504 if (flags & SV_SMAGIC)
4509 =for apidoc sv_catsv
4511 Concatenates the string from SV C<ssv> onto the end of the string in
4512 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4513 not 'set' magic. See C<sv_catsv_mg>.
4515 =for apidoc sv_catsv_flags
4517 Concatenates the string from SV C<ssv> onto the end of the string in
4518 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4519 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4520 and C<sv_catsv_nomg> are implemented in terms of this function.
4525 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
4529 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4533 const char *spv = SvPV_const(ssv, slen);
4535 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4536 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4537 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4538 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4539 dsv->sv_flags doesn't have that bit set.
4540 Andy Dougherty 12 Oct 2001
4542 const I32 sutf8 = DO_UTF8(ssv);
4545 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4547 dutf8 = DO_UTF8(dsv);
4549 if (dutf8 != sutf8) {
4551 /* Not modifying source SV, so taking a temporary copy. */
4552 SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
4554 sv_utf8_upgrade(csv);
4555 spv = SvPV_const(csv, slen);
4558 sv_utf8_upgrade_nomg(dsv);
4560 sv_catpvn_nomg(dsv, spv, slen);
4563 if (flags & SV_SMAGIC)
4568 =for apidoc sv_catpv
4570 Concatenates the string onto the end of the string which is in the SV.
4571 If the SV has the UTF-8 status set, then the bytes appended should be
4572 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4577 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
4580 register STRLEN len;
4584 PERL_ARGS_ASSERT_SV_CATPV;
4588 junk = SvPV_force(sv, tlen);
4590 SvGROW(sv, tlen + len + 1);
4592 ptr = SvPVX_const(sv);
4593 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4594 SvCUR_set(sv, SvCUR(sv) + len);
4595 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4600 =for apidoc sv_catpv_mg
4602 Like C<sv_catpv>, but also handles 'set' magic.
4608 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4610 PERL_ARGS_ASSERT_SV_CATPV_MG;
4619 Creates a new SV. A non-zero C<len> parameter indicates the number of
4620 bytes of preallocated string space the SV should have. An extra byte for a
4621 trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4622 space is allocated.) The reference count for the new SV is set to 1.
4624 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4625 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4626 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4627 L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4628 modules supporting older perls.
4634 Perl_newSV(pTHX_ const STRLEN len)
4641 sv_upgrade(sv, SVt_PV);
4642 SvGROW(sv, len + 1);
4647 =for apidoc sv_magicext
4649 Adds magic to an SV, upgrading it if necessary. Applies the
4650 supplied vtable and returns a pointer to the magic added.
4652 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4653 In particular, you can add magic to SvREADONLY SVs, and add more than
4654 one instance of the same 'how'.
4656 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4657 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4658 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4659 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4661 (This is now used as a subroutine by C<sv_magic>.)
4666 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
4667 const MGVTBL *const vtable, const char *const name, const I32 namlen)
4672 PERL_ARGS_ASSERT_SV_MAGICEXT;
4674 SvUPGRADE(sv, SVt_PVMG);
4675 Newxz(mg, 1, MAGIC);
4676 mg->mg_moremagic = SvMAGIC(sv);
4677 SvMAGIC_set(sv, mg);
4679 /* Sometimes a magic contains a reference loop, where the sv and
4680 object refer to each other. To prevent a reference loop that
4681 would prevent such objects being freed, we look for such loops
4682 and if we find one we avoid incrementing the object refcount.
4684 Note we cannot do this to avoid self-tie loops as intervening RV must
4685 have its REFCNT incremented to keep it in existence.
4688 if (!obj || obj == sv ||
4689 how == PERL_MAGIC_arylen ||
4690 how == PERL_MAGIC_symtab ||
4691 (SvTYPE(obj) == SVt_PVGV &&
4692 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4693 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4694 GvFORM(obj) == (CV*)sv)))
4699 mg->mg_obj = SvREFCNT_inc_simple(obj);
4700 mg->mg_flags |= MGf_REFCOUNTED;
4703 /* Normal self-ties simply pass a null object, and instead of
4704 using mg_obj directly, use the SvTIED_obj macro to produce a
4705 new RV as needed. For glob "self-ties", we are tieing the PVIO
4706 with an RV obj pointing to the glob containing the PVIO. In
4707 this case, to avoid a reference loop, we need to weaken the
4711 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4712 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4718 mg->mg_len = namlen;
4721 mg->mg_ptr = savepvn(name, namlen);
4722 else if (namlen == HEf_SVKEY)
4723 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV*)name);
4725 mg->mg_ptr = (char *) name;
4727 mg->mg_virtual = (MGVTBL *) vtable;
4731 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4736 =for apidoc sv_magic
4738 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4739 then adds a new magic item of type C<how> to the head of the magic list.
4741 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4742 handling of the C<name> and C<namlen> arguments.
4744 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4745 to add more than one instance of the same 'how'.
4751 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how,
4752 const char *const name, const I32 namlen)
4755 const MGVTBL *vtable;
4758 PERL_ARGS_ASSERT_SV_MAGIC;
4760 #ifdef PERL_OLD_COPY_ON_WRITE
4762 sv_force_normal_flags(sv, 0);
4764 if (SvREADONLY(sv)) {
4766 /* its okay to attach magic to shared strings; the subsequent
4767 * upgrade to PVMG will unshare the string */
4768 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4771 && how != PERL_MAGIC_regex_global
4772 && how != PERL_MAGIC_bm
4773 && how != PERL_MAGIC_fm
4774 && how != PERL_MAGIC_sv
4775 && how != PERL_MAGIC_backref
4778 Perl_croak(aTHX_ PL_no_modify);
4781 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4782 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4783 /* sv_magic() refuses to add a magic of the same 'how' as an
4786 if (how == PERL_MAGIC_taint) {
4788 /* Any scalar which already had taint magic on which someone
4789 (erroneously?) did SvIOK_on() or similar will now be
4790 incorrectly sporting public "OK" flags. */
4791 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4799 vtable = &PL_vtbl_sv;
4801 case PERL_MAGIC_overload:
4802 vtable = &PL_vtbl_amagic;
4804 case PERL_MAGIC_overload_elem:
4805 vtable = &PL_vtbl_amagicelem;
4807 case PERL_MAGIC_overload_table:
4808 vtable = &PL_vtbl_ovrld;
4811 vtable = &PL_vtbl_bm;
4813 case PERL_MAGIC_regdata:
4814 vtable = &PL_vtbl_regdata;
4816 case PERL_MAGIC_regdatum:
4817 vtable = &PL_vtbl_regdatum;
4819 case PERL_MAGIC_env:
4820 vtable = &PL_vtbl_env;
4823 vtable = &PL_vtbl_fm;
4825 case PERL_MAGIC_envelem:
4826 vtable = &PL_vtbl_envelem;
4828 case PERL_MAGIC_regex_global:
4829 vtable = &PL_vtbl_mglob;
4831 case PERL_MAGIC_isa:
4832 vtable = &PL_vtbl_isa;
4834 case PERL_MAGIC_isaelem:
4835 vtable = &PL_vtbl_isaelem;
4837 case PERL_MAGIC_nkeys:
4838 vtable = &PL_vtbl_nkeys;
4840 case PERL_MAGIC_dbfile:
4843 case PERL_MAGIC_dbline:
4844 vtable = &PL_vtbl_dbline;
4846 #ifdef USE_LOCALE_COLLATE
4847 case PERL_MAGIC_collxfrm:
4848 vtable = &PL_vtbl_collxfrm;
4850 #endif /* USE_LOCALE_COLLATE */
4851 case PERL_MAGIC_tied:
4852 vtable = &PL_vtbl_pack;
4854 case PERL_MAGIC_tiedelem:
4855 case PERL_MAGIC_tiedscalar:
4856 vtable = &PL_vtbl_packelem;
4859 vtable = &PL_vtbl_regexp;
4861 case PERL_MAGIC_hints:
4862 /* As this vtable is all NULL, we can reuse it. */
4863 case PERL_MAGIC_sig:
4864 vtable = &PL_vtbl_sig;
4866 case PERL_MAGIC_sigelem:
4867 vtable = &PL_vtbl_sigelem;
4869 case PERL_MAGIC_taint:
4870 vtable = &PL_vtbl_taint;
4872 case PERL_MAGIC_uvar:
4873 vtable = &PL_vtbl_uvar;
4875 case PERL_MAGIC_vec:
4876 vtable = &PL_vtbl_vec;
4878 case PERL_MAGIC_arylen_p:
4879 case PERL_MAGIC_rhash:
4880 case PERL_MAGIC_symtab:
4881 case PERL_MAGIC_vstring:
4884 case PERL_MAGIC_utf8:
4885 vtable = &PL_vtbl_utf8;
4887 case PERL_MAGIC_substr:
4888 vtable = &PL_vtbl_substr;
4890 case PERL_MAGIC_defelem:
4891 vtable = &PL_vtbl_defelem;
4893 case PERL_MAGIC_arylen:
4894 vtable = &PL_vtbl_arylen;
4896 case PERL_MAGIC_pos:
4897 vtable = &PL_vtbl_pos;
4899 case PERL_MAGIC_backref:
4900 vtable = &PL_vtbl_backref;
4902 case PERL_MAGIC_hintselem:
4903 vtable = &PL_vtbl_hintselem;
4905 case PERL_MAGIC_ext:
4906 /* Reserved for use by extensions not perl internals. */
4907 /* Useful for attaching extension internal data to perl vars. */
4908 /* Note that multiple extensions may clash if magical scalars */
4909 /* etc holding private data from one are passed to another. */
4913 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4916 /* Rest of work is done else where */
4917 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4920 case PERL_MAGIC_taint:
4923 case PERL_MAGIC_ext:
4924 case PERL_MAGIC_dbfile:
4931 =for apidoc sv_unmagic
4933 Removes all magic of type C<type> from an SV.
4939 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
4944 PERL_ARGS_ASSERT_SV_UNMAGIC;
4946 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4948 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
4949 for (mg = *mgp; mg; mg = *mgp) {
4950 if (mg->mg_type == type) {
4951 const MGVTBL* const vtbl = mg->mg_virtual;
4952 *mgp = mg->mg_moremagic;
4953 if (vtbl && vtbl->svt_free)
4954 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4955 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4957 Safefree(mg->mg_ptr);
4958 else if (mg->mg_len == HEf_SVKEY)
4959 SvREFCNT_dec((SV*)mg->mg_ptr);
4960 else if (mg->mg_type == PERL_MAGIC_utf8)
4961 Safefree(mg->mg_ptr);
4963 if (mg->mg_flags & MGf_REFCOUNTED)
4964 SvREFCNT_dec(mg->mg_obj);
4968 mgp = &mg->mg_moremagic;
4972 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4973 SvMAGIC_set(sv, NULL);
4980 =for apidoc sv_rvweaken
4982 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4983 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4984 push a back-reference to this RV onto the array of backreferences
4985 associated with that magic. If the RV is magical, set magic will be
4986 called after the RV is cleared.
4992 Perl_sv_rvweaken(pTHX_ SV *const sv)
4996 PERL_ARGS_ASSERT_SV_RVWEAKEN;
4998 if (!SvOK(sv)) /* let undefs pass */
5001 Perl_croak(aTHX_ "Can't weaken a nonreference");
5002 else if (SvWEAKREF(sv)) {
5003 if (ckWARN(WARN_MISC))
5004 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5008 Perl_sv_add_backref(aTHX_ tsv, sv);
5014 /* Give tsv backref magic if it hasn't already got it, then push a
5015 * back-reference to sv onto the array associated with the backref magic.
5018 /* A discussion about the backreferences array and its refcount:
5020 * The AV holding the backreferences is pointed to either as the mg_obj of
5021 * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5022 * structure, from the xhv_backreferences field. (A HV without hv_aux will
5023 * have the standard magic instead.) The array is created with a refcount
5024 * of 2. This means that if during global destruction the array gets
5025 * picked on first to have its refcount decremented by the random zapper,
5026 * it won't actually be freed, meaning it's still theere for when its
5027 * parent gets freed.
5028 * When the parent SV is freed, in the case of magic, the magic is freed,
5029 * Perl_magic_killbackrefs is called which decrements one refcount, then
5030 * mg_obj is freed which kills the second count.
5031 * In the vase of a HV being freed, one ref is removed by
5032 * Perl_hv_kill_backrefs, the other by Perl_sv_kill_backrefs, which it
5037 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5042 PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5044 if (SvTYPE(tsv) == SVt_PVHV) {
5045 AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
5049 /* There is no AV in the offical place - try a fixup. */
5050 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
5053 /* Aha. They've got it stowed in magic. Bring it back. */
5054 av = (AV*)mg->mg_obj;
5055 /* Stop mg_free decreasing the refernce count. */
5057 /* Stop mg_free even calling the destructor, given that
5058 there's no AV to free up. */
5060 sv_unmagic(tsv, PERL_MAGIC_backref);
5064 SvREFCNT_inc_simple_void(av); /* see discussion above */
5069 const MAGIC *const mg
5070 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5072 av = (AV*)mg->mg_obj;
5076 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
5077 /* av now has a refcnt of 2; see discussion above */
5080 if (AvFILLp(av) >= AvMAX(av)) {
5081 av_extend(av, AvFILLp(av)+1);
5083 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5086 /* delete a back-reference to ourselves from the backref magic associated
5087 * with the SV we point to.
5091 S_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5098 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5100 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
5101 av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
5102 /* We mustn't attempt to "fix up" the hash here by moving the
5103 backreference array back to the hv_aux structure, as that is stored
5104 in the main HvARRAY(), and hfreentries assumes that no-one
5105 reallocates HvARRAY() while it is running. */
5108 const MAGIC *const mg
5109 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5111 av = (AV *)mg->mg_obj;
5115 Perl_croak(aTHX_ "panic: del_backref");
5117 assert(!SvIS_FREED(av));
5120 /* We shouldn't be in here more than once, but for paranoia reasons lets
5122 for (i = AvFILLp(av); i >= 0; i--) {
5124 const SSize_t fill = AvFILLp(av);
5126 /* We weren't the last entry.
5127 An unordered list has this property that you can take the
5128 last element off the end to fill the hole, and it's still
5129 an unordered list :-)
5134 AvFILLp(av) = fill - 1;
5140 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5142 SV **svp = AvARRAY(av);
5144 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5145 PERL_UNUSED_ARG(sv);
5147 assert(!svp || !SvIS_FREED(av));
5149 SV *const *const last = svp + AvFILLp(av);
5151 while (svp <= last) {
5153 SV *const referrer = *svp;
5154 if (SvWEAKREF(referrer)) {
5155 /* XXX Should we check that it hasn't changed? */
5156 SvRV_set(referrer, 0);
5158 SvWEAKREF_off(referrer);
5159 SvSETMAGIC(referrer);
5160 } else if (SvTYPE(referrer) == SVt_PVGV ||
5161 SvTYPE(referrer) == SVt_PVLV) {
5162 /* You lookin' at me? */
5163 assert(GvSTASH(referrer));
5164 assert(GvSTASH(referrer) == (HV*)sv);
5165 GvSTASH(referrer) = 0;
5168 "panic: magic_killbackrefs (flags=%"UVxf")",
5169 (UV)SvFLAGS(referrer));
5177 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5182 =for apidoc sv_insert
5184 Inserts a string at the specified offset/length within the SV. Similar to
5185 the Perl substr() function. Handles get magic.
5187 =for apidoc sv_insert_flags
5189 Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5195 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5200 register char *midend;
5201 register char *bigend;
5205 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5208 Perl_croak(aTHX_ "Can't modify non-existent substring");
5209 SvPV_force_flags(bigstr, curlen, flags);
5210 (void)SvPOK_only_UTF8(bigstr);
5211 if (offset + len > curlen) {
5212 SvGROW(bigstr, offset+len+1);
5213 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5214 SvCUR_set(bigstr, offset+len);
5218 i = littlelen - len;
5219 if (i > 0) { /* string might grow */
5220 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5221 mid = big + offset + len;
5222 midend = bigend = big + SvCUR(bigstr);
5225 while (midend > mid) /* shove everything down */
5226 *--bigend = *--midend;
5227 Move(little,big+offset,littlelen,char);
5228 SvCUR_set(bigstr, SvCUR(bigstr) + i);
5233 Move(little,SvPVX(bigstr)+offset,len,char);
5238 big = SvPVX(bigstr);
5241 bigend = big + SvCUR(bigstr);
5243 if (midend > bigend)
5244 Perl_croak(aTHX_ "panic: sv_insert");
5246 if (mid - big > bigend - midend) { /* faster to shorten from end */
5248 Move(little, mid, littlelen,char);
5251 i = bigend - midend;
5253 Move(midend, mid, i,char);
5257 SvCUR_set(bigstr, mid - big);
5259 else if ((i = mid - big)) { /* faster from front */
5260 midend -= littlelen;
5262 Move(big, midend - i, i, char);
5263 sv_chop(bigstr,midend-i);
5265 Move(little, mid, littlelen,char);
5267 else if (littlelen) {
5268 midend -= littlelen;
5269 sv_chop(bigstr,midend);
5270 Move(little,midend,littlelen,char);
5273 sv_chop(bigstr,midend);
5279 =for apidoc sv_replace
5281 Make the first argument a copy of the second, then delete the original.
5282 The target SV physically takes over ownership of the body of the source SV
5283 and inherits its flags; however, the target keeps any magic it owns,
5284 and any magic in the source is discarded.
5285 Note that this is a rather specialist SV copying operation; most of the
5286 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5292 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5295 const U32 refcnt = SvREFCNT(sv);
5297 PERL_ARGS_ASSERT_SV_REPLACE;
5299 SV_CHECK_THINKFIRST_COW_DROP(sv);
5300 if (SvREFCNT(nsv) != 1) {
5301 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
5302 UVuf " != 1)", (UV) SvREFCNT(nsv));
5304 if (SvMAGICAL(sv)) {
5308 sv_upgrade(nsv, SVt_PVMG);
5309 SvMAGIC_set(nsv, SvMAGIC(sv));
5310 SvFLAGS(nsv) |= SvMAGICAL(sv);
5312 SvMAGIC_set(sv, NULL);
5316 assert(!SvREFCNT(sv));
5317 #ifdef DEBUG_LEAKING_SCALARS
5318 sv->sv_flags = nsv->sv_flags;
5319 sv->sv_any = nsv->sv_any;
5320 sv->sv_refcnt = nsv->sv_refcnt;
5321 sv->sv_u = nsv->sv_u;
5323 StructCopy(nsv,sv,SV);
5325 if(SvTYPE(sv) == SVt_IV) {
5327 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5331 #ifdef PERL_OLD_COPY_ON_WRITE
5332 if (SvIsCOW_normal(nsv)) {
5333 /* We need to follow the pointers around the loop to make the
5334 previous SV point to sv, rather than nsv. */
5337 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5340 assert(SvPVX_const(current) == SvPVX_const(nsv));
5342 /* Make the SV before us point to the SV after us. */
5344 PerlIO_printf(Perl_debug_log, "previous is\n");
5346 PerlIO_printf(Perl_debug_log,
5347 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5348 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5350 SV_COW_NEXT_SV_SET(current, sv);
5353 SvREFCNT(sv) = refcnt;
5354 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5360 =for apidoc sv_clear
5362 Clear an SV: call any destructors, free up any memory used by the body,
5363 and free the body itself. The SV's head is I<not> freed, although
5364 its type is set to all 1's so that it won't inadvertently be assumed
5365 to be live during global destruction etc.
5366 This function should only be called when REFCNT is zero. Most of the time
5367 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5374 Perl_sv_clear(pTHX_ register SV *const sv)
5377 const U32 type = SvTYPE(sv);
5378 const struct body_details *const sv_type_details
5379 = bodies_by_type + type;
5382 PERL_ARGS_ASSERT_SV_CLEAR;
5383 assert(SvREFCNT(sv) == 0);
5384 assert(SvTYPE(sv) != SVTYPEMASK);
5386 if (type <= SVt_IV) {
5387 /* See the comment in sv.h about the collusion between this early
5388 return and the overloading of the NULL and IV slots in the size
5391 SV * const target = SvRV(sv);
5393 sv_del_backref(target, sv);
5395 SvREFCNT_dec(target);
5397 SvFLAGS(sv) &= SVf_BREAK;
5398 SvFLAGS(sv) |= SVTYPEMASK;
5403 if (PL_defstash && /* Still have a symbol table? */
5410 stash = SvSTASH(sv);
5411 destructor = StashHANDLER(stash,DESTROY);
5413 SV* const tmpref = newRV(sv);
5414 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5416 PUSHSTACKi(PERLSI_DESTROY);
5421 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5427 if(SvREFCNT(tmpref) < 2) {
5428 /* tmpref is not kept alive! */
5430 SvRV_set(tmpref, NULL);
5433 SvREFCNT_dec(tmpref);
5435 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5439 if (PL_in_clean_objs)
5440 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5442 /* DESTROY gave object new lease on life */
5448 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5449 SvOBJECT_off(sv); /* Curse the object. */
5450 if (type != SVt_PVIO)
5451 --PL_sv_objcount; /* XXX Might want something more general */
5454 if (type >= SVt_PVMG) {
5455 if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5456 SvREFCNT_dec(SvOURSTASH(sv));
5457 } else if (SvMAGIC(sv))
5459 if (type == SVt_PVMG && SvPAD_TYPED(sv))
5460 SvREFCNT_dec(SvSTASH(sv));
5463 /* case SVt_BIND: */
5466 IoIFP(sv) != PerlIO_stdin() &&
5467 IoIFP(sv) != PerlIO_stdout() &&
5468 IoIFP(sv) != PerlIO_stderr())
5470 io_close((IO*)sv, FALSE);
5472 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5473 PerlDir_close(IoDIRP(sv));
5474 IoDIRP(sv) = (DIR*)NULL;
5475 Safefree(IoTOP_NAME(sv));
5476 Safefree(IoFMT_NAME(sv));
5477 Safefree(IoBOTTOM_NAME(sv));
5480 /* FIXME for plugins */
5481 pregfree2((REGEXP*) sv);
5488 if (PL_last_swash_hv == (HV*)sv) {
5489 PL_last_swash_hv = NULL;
5491 Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
5495 if (PL_comppad == (AV*)sv) {
5502 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5503 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5504 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5505 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5507 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5508 SvREFCNT_dec(LvTARG(sv));
5510 if (isGV_with_GP(sv)) {
5511 if(GvCVu((GV*)sv) && (stash = GvSTASH((GV*)sv)) && HvNAME_get(stash))
5512 mro_method_changed_in(stash);
5515 unshare_hek(GvNAME_HEK(sv));
5516 /* If we're in a stash, we don't own a reference to it. However it does
5517 have a back reference to us, which needs to be cleared. */
5518 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
5519 sv_del_backref((SV*)stash, sv);
5521 /* FIXME. There are probably more unreferenced pointers to SVs in the
5522 interpreter struct that we should check and tidy in a similar
5524 if ((GV*)sv == PL_last_in_gv)
5525 PL_last_in_gv = NULL;
5531 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5534 SvOOK_offset(sv, offset);
5535 SvPV_set(sv, SvPVX_mutable(sv) - offset);
5536 /* Don't even bother with turning off the OOK flag. */
5539 SV * const target = SvRV(sv);
5541 sv_del_backref(target, sv);
5543 SvREFCNT_dec(target);
5545 #ifdef PERL_OLD_COPY_ON_WRITE
5546 else if (SvPVX_const(sv)) {
5548 /* I believe I need to grab the global SV mutex here and
5549 then recheck the COW status. */
5551 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
5555 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5557 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5560 /* And drop it here. */
5562 } else if (SvLEN(sv)) {
5563 Safefree(SvPVX_const(sv));
5567 else if (SvPVX_const(sv) && SvLEN(sv))
5568 Safefree(SvPVX_mutable(sv));
5569 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5570 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5579 SvFLAGS(sv) &= SVf_BREAK;
5580 SvFLAGS(sv) |= SVTYPEMASK;
5582 if (sv_type_details->arena) {
5583 del_body(((char *)SvANY(sv) + sv_type_details->offset),
5584 &PL_body_roots[type]);
5586 else if (sv_type_details->body_size) {
5587 my_safefree(SvANY(sv));
5592 =for apidoc sv_newref
5594 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5601 Perl_sv_newref(pTHX_ SV *const sv)
5603 PERL_UNUSED_CONTEXT;
5612 Decrement an SV's reference count, and if it drops to zero, call
5613 C<sv_clear> to invoke destructors and free up any memory used by
5614 the body; finally, deallocate the SV's head itself.
5615 Normally called via a wrapper macro C<SvREFCNT_dec>.
5621 Perl_sv_free(pTHX_ SV *const sv)
5626 if (SvREFCNT(sv) == 0) {
5627 if (SvFLAGS(sv) & SVf_BREAK)
5628 /* this SV's refcnt has been artificially decremented to
5629 * trigger cleanup */
5631 if (PL_in_clean_all) /* All is fair */
5633 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5634 /* make sure SvREFCNT(sv)==0 happens very seldom */
5635 SvREFCNT(sv) = (~(U32)0)/2;
5638 if (ckWARN_d(WARN_INTERNAL)) {
5639 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5640 Perl_dump_sv_child(aTHX_ sv);
5642 #ifdef DEBUG_LEAKING_SCALARS
5645 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5646 if (PL_warnhook == PERL_WARNHOOK_FATAL
5647 || ckDEAD(packWARN(WARN_INTERNAL))) {
5648 /* Don't let Perl_warner cause us to escape our fate: */
5652 /* This may not return: */
5653 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5654 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5655 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5658 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5663 if (--(SvREFCNT(sv)) > 0)
5665 Perl_sv_free2(aTHX_ sv);
5669 Perl_sv_free2(pTHX_ SV *const sv)
5673 PERL_ARGS_ASSERT_SV_FREE2;
5677 if (ckWARN_d(WARN_DEBUGGING))
5678 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5679 "Attempt to free temp prematurely: SV 0x%"UVxf
5680 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5684 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5685 /* make sure SvREFCNT(sv)==0 happens very seldom */
5686 SvREFCNT(sv) = (~(U32)0)/2;
5697 Returns the length of the string in the SV. Handles magic and type
5698 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5704 Perl_sv_len(pTHX_ register SV *const sv)
5712 len = mg_length(sv);
5714 (void)SvPV_const(sv, len);
5719 =for apidoc sv_len_utf8
5721 Returns the number of characters in the string in an SV, counting wide
5722 UTF-8 bytes as a single character. Handles magic and type coercion.
5728 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
5729 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
5730 * (Note that the mg_len is not the length of the mg_ptr field.
5731 * This allows the cache to store the character length of the string without
5732 * needing to malloc() extra storage to attach to the mg_ptr.)
5737 Perl_sv_len_utf8(pTHX_ register SV *const sv)
5743 return mg_length(sv);
5747 const U8 *s = (U8*)SvPV_const(sv, len);
5751 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
5753 if (mg && mg->mg_len != -1) {
5755 if (PL_utf8cache < 0) {
5756 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
5758 /* Need to turn the assertions off otherwise we may
5759 recurse infinitely while printing error messages.
5761 SAVEI8(PL_utf8cache);
5763 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
5764 " real %"UVuf" for %"SVf,
5765 (UV) ulen, (UV) real, SVfARG(sv));
5770 ulen = Perl_utf8_length(aTHX_ s, s + len);
5771 if (!SvREADONLY(sv)) {
5773 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
5774 &PL_vtbl_utf8, 0, 0);
5782 return Perl_utf8_length(aTHX_ s, s + len);
5786 /* Walk forwards to find the byte corresponding to the passed in UTF-8
5789 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
5792 const U8 *s = start;
5794 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
5796 while (s < send && uoffset--)
5799 /* This is the existing behaviour. Possibly it should be a croak, as
5800 it's actually a bounds error */
5806 /* Given the length of the string in both bytes and UTF-8 characters, decide
5807 whether to walk forwards or backwards to find the byte corresponding to
5808 the passed in UTF-8 offset. */
5810 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
5811 const STRLEN uoffset, const STRLEN uend)
5813 STRLEN backw = uend - uoffset;
5815 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
5817 if (uoffset < 2 * backw) {
5818 /* The assumption is that going forwards is twice the speed of going
5819 forward (that's where the 2 * backw comes from).
5820 (The real figure of course depends on the UTF-8 data.) */
5821 return sv_pos_u2b_forwards(start, send, uoffset);
5826 while (UTF8_IS_CONTINUATION(*send))
5829 return send - start;
5832 /* For the string representation of the given scalar, find the byte
5833 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
5834 give another position in the string, *before* the sought offset, which
5835 (which is always true, as 0, 0 is a valid pair of positions), which should
5836 help reduce the amount of linear searching.
5837 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
5838 will be used to reduce the amount of linear searching. The cache will be
5839 created if necessary, and the found value offered to it for update. */
5841 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
5842 const U8 *const send, const STRLEN uoffset,
5843 STRLEN uoffset0, STRLEN boffset0)
5845 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
5848 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
5850 assert (uoffset >= uoffset0);
5852 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5853 && (*mgp || (*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
5854 if ((*mgp)->mg_ptr) {
5855 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
5856 if (cache[0] == uoffset) {
5857 /* An exact match. */
5860 if (cache[2] == uoffset) {
5861 /* An exact match. */
5865 if (cache[0] < uoffset) {
5866 /* The cache already knows part of the way. */
5867 if (cache[0] > uoffset0) {
5868 /* The cache knows more than the passed in pair */
5869 uoffset0 = cache[0];
5870 boffset0 = cache[1];
5872 if ((*mgp)->mg_len != -1) {
5873 /* And we know the end too. */
5875 + sv_pos_u2b_midway(start + boffset0, send,
5877 (*mgp)->mg_len - uoffset0);
5880 + sv_pos_u2b_forwards(start + boffset0,
5881 send, uoffset - uoffset0);
5884 else if (cache[2] < uoffset) {
5885 /* We're between the two cache entries. */
5886 if (cache[2] > uoffset0) {
5887 /* and the cache knows more than the passed in pair */
5888 uoffset0 = cache[2];
5889 boffset0 = cache[3];
5893 + sv_pos_u2b_midway(start + boffset0,
5896 cache[0] - uoffset0);
5899 + sv_pos_u2b_midway(start + boffset0,
5902 cache[2] - uoffset0);
5906 else if ((*mgp)->mg_len != -1) {
5907 /* If we can take advantage of a passed in offset, do so. */
5908 /* In fact, offset0 is either 0, or less than offset, so don't
5909 need to worry about the other possibility. */
5911 + sv_pos_u2b_midway(start + boffset0, send,
5913 (*mgp)->mg_len - uoffset0);
5918 if (!found || PL_utf8cache < 0) {
5919 const STRLEN real_boffset
5920 = boffset0 + sv_pos_u2b_forwards(start + boffset0,
5921 send, uoffset - uoffset0);
5923 if (found && PL_utf8cache < 0) {
5924 if (real_boffset != boffset) {
5925 /* Need to turn the assertions off otherwise we may recurse
5926 infinitely while printing error messages. */
5927 SAVEI8(PL_utf8cache);
5929 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
5930 " real %"UVuf" for %"SVf,
5931 (UV) boffset, (UV) real_boffset, SVfARG(sv));
5934 boffset = real_boffset;
5938 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
5944 =for apidoc sv_pos_u2b
5946 Converts the value pointed to by offsetp from a count of UTF-8 chars from
5947 the start of the string, to a count of the equivalent number of bytes; if
5948 lenp is non-zero, it does the same to lenp, but this time starting from
5949 the offset, rather than from the start of the string. Handles magic and
5956 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5957 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5958 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
5963 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
5968 PERL_ARGS_ASSERT_SV_POS_U2B;
5973 start = (U8*)SvPV_const(sv, len);
5975 STRLEN uoffset = (STRLEN) *offsetp;
5976 const U8 * const send = start + len;
5978 const STRLEN boffset = sv_pos_u2b_cached(sv, &mg, start, send,
5981 *offsetp = (I32) boffset;
5984 /* Convert the relative offset to absolute. */
5985 const STRLEN uoffset2 = uoffset + (STRLEN) *lenp;
5986 const STRLEN boffset2
5987 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
5988 uoffset, boffset) - boffset;
6002 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6003 byte length pairing. The (byte) length of the total SV is passed in too,
6004 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6005 may not have updated SvCUR, so we can't rely on reading it directly.
6007 The proffered utf8/byte length pairing isn't used if the cache already has
6008 two pairs, and swapping either for the proffered pair would increase the
6009 RMS of the intervals between known byte offsets.
6011 The cache itself consists of 4 STRLEN values
6012 0: larger UTF-8 offset
6013 1: corresponding byte offset
6014 2: smaller UTF-8 offset
6015 3: corresponding byte offset
6017 Unused cache pairs have the value 0, 0.
6018 Keeping the cache "backwards" means that the invariant of
6019 cache[0] >= cache[2] is maintained even with empty slots, which means that
6020 the code that uses it doesn't need to worry if only 1 entry has actually
6021 been set to non-zero. It also makes the "position beyond the end of the
6022 cache" logic much simpler, as the first slot is always the one to start
6026 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6027 const STRLEN utf8, const STRLEN blen)
6031 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6037 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6039 (*mgp)->mg_len = -1;
6043 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6044 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6045 (*mgp)->mg_ptr = (char *) cache;
6049 if (PL_utf8cache < 0) {
6050 const U8 *start = (const U8 *) SvPVX_const(sv);
6051 const STRLEN realutf8 = utf8_length(start, start + byte);
6053 if (realutf8 != utf8) {
6054 /* Need to turn the assertions off otherwise we may recurse
6055 infinitely while printing error messages. */
6056 SAVEI8(PL_utf8cache);
6058 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
6059 " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
6063 /* Cache is held with the later position first, to simplify the code
6064 that deals with unbounded ends. */
6066 ASSERT_UTF8_CACHE(cache);
6067 if (cache[1] == 0) {
6068 /* Cache is totally empty */
6071 } else if (cache[3] == 0) {
6072 if (byte > cache[1]) {
6073 /* New one is larger, so goes first. */
6074 cache[2] = cache[0];
6075 cache[3] = cache[1];
6083 #define THREEWAY_SQUARE(a,b,c,d) \
6084 ((float)((d) - (c))) * ((float)((d) - (c))) \
6085 + ((float)((c) - (b))) * ((float)((c) - (b))) \
6086 + ((float)((b) - (a))) * ((float)((b) - (a)))
6088 /* Cache has 2 slots in use, and we know three potential pairs.
6089 Keep the two that give the lowest RMS distance. Do the
6090 calcualation in bytes simply because we always know the byte
6091 length. squareroot has the same ordering as the positive value,
6092 so don't bother with the actual square root. */
6093 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6094 if (byte > cache[1]) {
6095 /* New position is after the existing pair of pairs. */
6096 const float keep_earlier
6097 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6098 const float keep_later
6099 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6101 if (keep_later < keep_earlier) {
6102 if (keep_later < existing) {
6103 cache[2] = cache[0];
6104 cache[3] = cache[1];
6110 if (keep_earlier < existing) {
6116 else if (byte > cache[3]) {
6117 /* New position is between the existing pair of pairs. */
6118 const float keep_earlier
6119 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6120 const float keep_later
6121 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6123 if (keep_later < keep_earlier) {
6124 if (keep_later < existing) {
6130 if (keep_earlier < existing) {
6137 /* New position is before the existing pair of pairs. */
6138 const float keep_earlier
6139 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6140 const float keep_later
6141 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6143 if (keep_later < keep_earlier) {
6144 if (keep_later < existing) {
6150 if (keep_earlier < existing) {
6151 cache[0] = cache[2];
6152 cache[1] = cache[3];
6159 ASSERT_UTF8_CACHE(cache);
6162 /* We already know all of the way, now we may be able to walk back. The same
6163 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6164 backward is half the speed of walking forward. */
6166 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6167 const U8 *end, STRLEN endu)
6169 const STRLEN forw = target - s;
6170 STRLEN backw = end - target;
6172 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6174 if (forw < 2 * backw) {
6175 return utf8_length(s, target);
6178 while (end > target) {
6180 while (UTF8_IS_CONTINUATION(*end)) {
6189 =for apidoc sv_pos_b2u
6191 Converts the value pointed to by offsetp from a count of bytes from the
6192 start of the string, to a count of the equivalent number of UTF-8 chars.
6193 Handles magic and type coercion.
6199 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6200 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
6205 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
6208 const STRLEN byte = *offsetp;
6209 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
6215 PERL_ARGS_ASSERT_SV_POS_B2U;
6220 s = (const U8*)SvPV_const(sv, blen);
6223 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6227 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
6228 && (mg = mg_find(sv, PERL_MAGIC_utf8))) {
6230 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
6231 if (cache[1] == byte) {
6232 /* An exact match. */
6233 *offsetp = cache[0];
6236 if (cache[3] == byte) {
6237 /* An exact match. */
6238 *offsetp = cache[2];
6242 if (cache[1] < byte) {
6243 /* We already know part of the way. */
6244 if (mg->mg_len != -1) {
6245 /* Actually, we know the end too. */
6247 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
6248 s + blen, mg->mg_len - cache[0]);
6250 len = cache[0] + utf8_length(s + cache[1], send);
6253 else if (cache[3] < byte) {
6254 /* We're between the two cached pairs, so we do the calculation
6255 offset by the byte/utf-8 positions for the earlier pair,
6256 then add the utf-8 characters from the string start to
6258 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6259 s + cache[1], cache[0] - cache[2])
6263 else { /* cache[3] > byte */
6264 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6268 ASSERT_UTF8_CACHE(cache);
6270 } else if (mg->mg_len != -1) {
6271 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
6275 if (!found || PL_utf8cache < 0) {
6276 const STRLEN real_len = utf8_length(s, send);
6278 if (found && PL_utf8cache < 0) {
6279 if (len != real_len) {
6280 /* Need to turn the assertions off otherwise we may recurse
6281 infinitely while printing error messages. */
6282 SAVEI8(PL_utf8cache);
6284 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
6285 " real %"UVuf" for %"SVf,
6286 (UV) len, (UV) real_len, SVfARG(sv));
6294 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
6300 Returns a boolean indicating whether the strings in the two SVs are
6301 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6302 coerce its args to strings if necessary.
6308 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
6317 SV* svrecode = NULL;
6324 /* if pv1 and pv2 are the same, second SvPV_const call may
6325 * invalidate pv1, so we may need to make a copy */
6326 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6327 pv1 = SvPV_const(sv1, cur1);
6328 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
6330 pv1 = SvPV_const(sv1, cur1);
6338 pv2 = SvPV_const(sv2, cur2);
6340 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6341 /* Differing utf8ness.
6342 * Do not UTF8size the comparands as a side-effect. */
6345 svrecode = newSVpvn(pv2, cur2);
6346 sv_recode_to_utf8(svrecode, PL_encoding);
6347 pv2 = SvPV_const(svrecode, cur2);
6350 svrecode = newSVpvn(pv1, cur1);
6351 sv_recode_to_utf8(svrecode, PL_encoding);
6352 pv1 = SvPV_const(svrecode, cur1);
6354 /* Now both are in UTF-8. */
6356 SvREFCNT_dec(svrecode);
6361 bool is_utf8 = TRUE;
6364 /* sv1 is the UTF-8 one,
6365 * if is equal it must be downgrade-able */
6366 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
6372 /* sv2 is the UTF-8 one,
6373 * if is equal it must be downgrade-able */
6374 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
6380 /* Downgrade not possible - cannot be eq */
6388 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6390 SvREFCNT_dec(svrecode);
6400 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6401 string in C<sv1> is less than, equal to, or greater than the string in
6402 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6403 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
6409 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
6413 const char *pv1, *pv2;
6416 SV *svrecode = NULL;
6423 pv1 = SvPV_const(sv1, cur1);
6430 pv2 = SvPV_const(sv2, cur2);
6432 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6433 /* Differing utf8ness.
6434 * Do not UTF8size the comparands as a side-effect. */
6437 svrecode = newSVpvn(pv2, cur2);
6438 sv_recode_to_utf8(svrecode, PL_encoding);
6439 pv2 = SvPV_const(svrecode, cur2);
6442 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6447 svrecode = newSVpvn(pv1, cur1);
6448 sv_recode_to_utf8(svrecode, PL_encoding);
6449 pv1 = SvPV_const(svrecode, cur1);
6452 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6458 cmp = cur2 ? -1 : 0;
6462 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6465 cmp = retval < 0 ? -1 : 1;
6466 } else if (cur1 == cur2) {
6469 cmp = cur1 < cur2 ? -1 : 1;
6473 SvREFCNT_dec(svrecode);
6481 =for apidoc sv_cmp_locale
6483 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6484 'use bytes' aware, handles get magic, and will coerce its args to strings
6485 if necessary. See also C<sv_cmp>.
6491 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
6494 #ifdef USE_LOCALE_COLLATE
6500 if (PL_collation_standard)
6504 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6506 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6508 if (!pv1 || !len1) {
6519 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6522 return retval < 0 ? -1 : 1;
6525 * When the result of collation is equality, that doesn't mean
6526 * that there are no differences -- some locales exclude some
6527 * characters from consideration. So to avoid false equalities,
6528 * we use the raw string as a tiebreaker.
6534 #endif /* USE_LOCALE_COLLATE */
6536 return sv_cmp(sv1, sv2);
6540 #ifdef USE_LOCALE_COLLATE
6543 =for apidoc sv_collxfrm
6545 Add Collate Transform magic to an SV if it doesn't already have it.
6547 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6548 scalar data of the variable, but transformed to such a format that a normal
6549 memory comparison can be used to compare the data according to the locale
6556 Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
6561 PERL_ARGS_ASSERT_SV_COLLXFRM;
6563 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6564 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6570 Safefree(mg->mg_ptr);
6571 s = SvPV_const(sv, len);
6572 if ((xf = mem_collxfrm(s, len, &xlen))) {
6574 #ifdef PERL_OLD_COPY_ON_WRITE
6576 sv_force_normal_flags(sv, 0);
6578 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6592 if (mg && mg->mg_ptr) {
6594 return mg->mg_ptr + sizeof(PL_collation_ix);
6602 #endif /* USE_LOCALE_COLLATE */
6607 Get a line from the filehandle and store it into the SV, optionally
6608 appending to the currently-stored string.
6614 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
6619 register STDCHAR rslast;
6620 register STDCHAR *bp;
6625 PERL_ARGS_ASSERT_SV_GETS;
6627 if (SvTHINKFIRST(sv))
6628 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6629 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6631 However, perlbench says it's slower, because the existing swipe code
6632 is faster than copy on write.
6633 Swings and roundabouts. */
6634 SvUPGRADE(sv, SVt_PV);
6639 if (PerlIO_isutf8(fp)) {
6641 sv_utf8_upgrade_nomg(sv);
6642 sv_pos_u2b(sv,&append,0);
6644 } else if (SvUTF8(sv)) {
6645 SV * const tsv = newSV(0);
6646 sv_gets(tsv, fp, 0);
6647 sv_utf8_upgrade_nomg(tsv);
6648 SvCUR_set(sv,append);
6651 goto return_string_or_null;
6656 if (PerlIO_isutf8(fp))
6659 if (IN_PERL_COMPILETIME) {
6660 /* we always read code in line mode */
6664 else if (RsSNARF(PL_rs)) {
6665 /* If it is a regular disk file use size from stat() as estimate
6666 of amount we are going to read -- may result in mallocing
6667 more memory than we really need if the layers below reduce
6668 the size we read (e.g. CRLF or a gzip layer).
6671 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
6672 const Off_t offset = PerlIO_tell(fp);
6673 if (offset != (Off_t) -1 && st.st_size + append > offset) {
6674 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6680 else if (RsRECORD(PL_rs)) {
6688 /* Grab the size of the record we're getting */
6689 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
6690 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6693 /* VMS wants read instead of fread, because fread doesn't respect */
6694 /* RMS record boundaries. This is not necessarily a good thing to be */
6695 /* doing, but we've got no other real choice - except avoid stdio
6696 as implementation - perhaps write a :vms layer ?
6698 fd = PerlIO_fileno(fp);
6699 if (fd == -1) { /* in-memory file from PerlIO::Scalar */
6700 bytesread = PerlIO_read(fp, buffer, recsize);
6703 bytesread = PerlLIO_read(fd, buffer, recsize);
6706 bytesread = PerlIO_read(fp, buffer, recsize);
6710 SvCUR_set(sv, bytesread + append);
6711 buffer[bytesread] = '\0';
6712 goto return_string_or_null;
6714 else if (RsPARA(PL_rs)) {
6720 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6721 if (PerlIO_isutf8(fp)) {
6722 rsptr = SvPVutf8(PL_rs, rslen);
6725 if (SvUTF8(PL_rs)) {
6726 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6727 Perl_croak(aTHX_ "Wide character in $/");
6730 rsptr = SvPV_const(PL_rs, rslen);
6734 rslast = rslen ? rsptr[rslen - 1] : '\0';
6736 if (rspara) { /* have to do this both before and after */
6737 do { /* to make sure file boundaries work right */
6740 i = PerlIO_getc(fp);
6744 PerlIO_ungetc(fp,i);
6750 /* See if we know enough about I/O mechanism to cheat it ! */
6752 /* This used to be #ifdef test - it is made run-time test for ease
6753 of abstracting out stdio interface. One call should be cheap
6754 enough here - and may even be a macro allowing compile
6758 if (PerlIO_fast_gets(fp)) {
6761 * We're going to steal some values from the stdio struct
6762 * and put EVERYTHING in the innermost loop into registers.
6764 register STDCHAR *ptr;
6768 #if defined(VMS) && defined(PERLIO_IS_STDIO)
6769 /* An ungetc()d char is handled separately from the regular
6770 * buffer, so we getc() it back out and stuff it in the buffer.
6772 i = PerlIO_getc(fp);
6773 if (i == EOF) return 0;
6774 *(--((*fp)->_ptr)) = (unsigned char) i;
6778 /* Here is some breathtakingly efficient cheating */
6780 cnt = PerlIO_get_cnt(fp); /* get count into register */
6781 /* make sure we have the room */
6782 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6783 /* Not room for all of it
6784 if we are looking for a separator and room for some
6786 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6787 /* just process what we have room for */
6788 shortbuffered = cnt - SvLEN(sv) + append + 1;
6789 cnt -= shortbuffered;
6793 /* remember that cnt can be negative */
6794 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6799 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
6800 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6801 DEBUG_P(PerlIO_printf(Perl_debug_log,
6802 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6803 DEBUG_P(PerlIO_printf(Perl_debug_log,
6804 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6805 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6806 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6811 while (cnt > 0) { /* this | eat */
6813 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6814 goto thats_all_folks; /* screams | sed :-) */
6818 Copy(ptr, bp, cnt, char); /* this | eat */
6819 bp += cnt; /* screams | dust */
6820 ptr += cnt; /* louder | sed :-) */
6825 if (shortbuffered) { /* oh well, must extend */
6826 cnt = shortbuffered;
6828 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6830 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6831 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6835 DEBUG_P(PerlIO_printf(Perl_debug_log,
6836 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6837 PTR2UV(ptr),(long)cnt));
6838 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6840 DEBUG_P(PerlIO_printf(Perl_debug_log,
6841 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6842 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6843 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6845 /* This used to call 'filbuf' in stdio form, but as that behaves like
6846 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6847 another abstraction. */
6848 i = PerlIO_getc(fp); /* get more characters */
6850 DEBUG_P(PerlIO_printf(Perl_debug_log,
6851 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6852 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6853 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6855 cnt = PerlIO_get_cnt(fp);
6856 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
6857 DEBUG_P(PerlIO_printf(Perl_debug_log,
6858 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6860 if (i == EOF) /* all done for ever? */
6861 goto thats_really_all_folks;
6863 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6865 SvGROW(sv, bpx + cnt + 2);
6866 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6868 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
6870 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
6871 goto thats_all_folks;
6875 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6876 memNE((char*)bp - rslen, rsptr, rslen))
6877 goto screamer; /* go back to the fray */
6878 thats_really_all_folks:
6880 cnt += shortbuffered;
6881 DEBUG_P(PerlIO_printf(Perl_debug_log,
6882 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6883 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
6884 DEBUG_P(PerlIO_printf(Perl_debug_log,
6885 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6886 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6887 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6889 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
6890 DEBUG_P(PerlIO_printf(Perl_debug_log,
6891 "Screamer: done, len=%ld, string=|%.*s|\n",
6892 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6896 /*The big, slow, and stupid way. */
6897 #ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
6898 STDCHAR *buf = NULL;
6899 Newx(buf, 8192, STDCHAR);
6907 register const STDCHAR * const bpe = buf + sizeof(buf);
6909 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6910 ; /* keep reading */
6914 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6915 /* Accomodate broken VAXC compiler, which applies U8 cast to
6916 * both args of ?: operator, causing EOF to change into 255
6919 i = (U8)buf[cnt - 1];
6925 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6927 sv_catpvn(sv, (char *) buf, cnt);
6929 sv_setpvn(sv, (char *) buf, cnt);
6931 if (i != EOF && /* joy */
6933 SvCUR(sv) < rslen ||
6934 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6938 * If we're reading from a TTY and we get a short read,
6939 * indicating that the user hit his EOF character, we need
6940 * to notice it now, because if we try to read from the TTY
6941 * again, the EOF condition will disappear.
6943 * The comparison of cnt to sizeof(buf) is an optimization
6944 * that prevents unnecessary calls to feof().
6948 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
6952 #ifdef USE_HEAP_INSTEAD_OF_STACK
6957 if (rspara) { /* have to do this both before and after */
6958 while (i != EOF) { /* to make sure file boundaries work right */
6959 i = PerlIO_getc(fp);
6961 PerlIO_ungetc(fp,i);
6967 return_string_or_null:
6968 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
6974 Auto-increment of the value in the SV, doing string to numeric conversion
6975 if necessary. Handles 'get' magic.
6981 Perl_sv_inc(pTHX_ register SV *const sv)
6990 if (SvTHINKFIRST(sv)) {
6992 sv_force_normal_flags(sv, 0);
6993 if (SvREADONLY(sv)) {
6994 if (IN_PERL_RUNTIME)
6995 Perl_croak(aTHX_ PL_no_modify);
6999 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7001 i = PTR2IV(SvRV(sv));
7006 flags = SvFLAGS(sv);
7007 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7008 /* It's (privately or publicly) a float, but not tested as an
7009 integer, so test it to see. */
7011 flags = SvFLAGS(sv);
7013 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7014 /* It's publicly an integer, or privately an integer-not-float */
7015 #ifdef PERL_PRESERVE_IVUV
7019 if (SvUVX(sv) == UV_MAX)
7020 sv_setnv(sv, UV_MAX_P1);
7022 (void)SvIOK_only_UV(sv);
7023 SvUV_set(sv, SvUVX(sv) + 1);
7025 if (SvIVX(sv) == IV_MAX)
7026 sv_setuv(sv, (UV)IV_MAX + 1);
7028 (void)SvIOK_only(sv);
7029 SvIV_set(sv, SvIVX(sv) + 1);
7034 if (flags & SVp_NOK) {
7035 const NV was = SvNVX(sv);
7036 if (NV_OVERFLOWS_INTEGERS_AT &&
7037 was >= NV_OVERFLOWS_INTEGERS_AT && ckWARN(WARN_IMPRECISION)) {
7038 Perl_warner(aTHX_ packWARN(WARN_IMPRECISION),
7039 "Lost precision when incrementing %" NVff " by 1",
7042 (void)SvNOK_only(sv);
7043 SvNV_set(sv, was + 1.0);
7047 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7048 if ((flags & SVTYPEMASK) < SVt_PVIV)
7049 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7050 (void)SvIOK_only(sv);
7055 while (isALPHA(*d)) d++;
7056 while (isDIGIT(*d)) d++;
7058 #ifdef PERL_PRESERVE_IVUV
7059 /* Got to punt this as an integer if needs be, but we don't issue
7060 warnings. Probably ought to make the sv_iv_please() that does
7061 the conversion if possible, and silently. */
7062 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7063 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7064 /* Need to try really hard to see if it's an integer.
7065 9.22337203685478e+18 is an integer.
7066 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7067 so $a="9.22337203685478e+18"; $a+0; $a++
7068 needs to be the same as $a="9.22337203685478e+18"; $a++
7075 /* sv_2iv *should* have made this an NV */
7076 if (flags & SVp_NOK) {
7077 (void)SvNOK_only(sv);
7078 SvNV_set(sv, SvNVX(sv) + 1.0);
7081 /* I don't think we can get here. Maybe I should assert this
7082 And if we do get here I suspect that sv_setnv will croak. NWC
7084 #if defined(USE_LONG_DOUBLE)
7085 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",
7086 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7088 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7089 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7092 #endif /* PERL_PRESERVE_IVUV */
7093 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7097 while (d >= SvPVX_const(sv)) {
7105 /* MKS: The original code here died if letters weren't consecutive.
7106 * at least it didn't have to worry about non-C locales. The
7107 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7108 * arranged in order (although not consecutively) and that only
7109 * [A-Za-z] are accepted by isALPHA in the C locale.
7111 if (*d != 'z' && *d != 'Z') {
7112 do { ++*d; } while (!isALPHA(*d));
7115 *(d--) -= 'z' - 'a';
7120 *(d--) -= 'z' - 'a' + 1;
7124 /* oh,oh, the number grew */
7125 SvGROW(sv, SvCUR(sv) + 2);
7126 SvCUR_set(sv, SvCUR(sv) + 1);
7127 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
7138 Auto-decrement of the value in the SV, doing string to numeric conversion
7139 if necessary. Handles 'get' magic.
7145 Perl_sv_dec(pTHX_ register SV *const sv)
7153 if (SvTHINKFIRST(sv)) {
7155 sv_force_normal_flags(sv, 0);
7156 if (SvREADONLY(sv)) {
7157 if (IN_PERL_RUNTIME)
7158 Perl_croak(aTHX_ PL_no_modify);
7162 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7164 i = PTR2IV(SvRV(sv));
7169 /* Unlike sv_inc we don't have to worry about string-never-numbers
7170 and keeping them magic. But we mustn't warn on punting */
7171 flags = SvFLAGS(sv);
7172 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7173 /* It's publicly an integer, or privately an integer-not-float */
7174 #ifdef PERL_PRESERVE_IVUV
7178 if (SvUVX(sv) == 0) {
7179 (void)SvIOK_only(sv);
7183 (void)SvIOK_only_UV(sv);
7184 SvUV_set(sv, SvUVX(sv) - 1);
7187 if (SvIVX(sv) == IV_MIN) {
7188 sv_setnv(sv, (NV)IV_MIN);
7192 (void)SvIOK_only(sv);
7193 SvIV_set(sv, SvIVX(sv) - 1);
7198 if (flags & SVp_NOK) {
7201 const NV was = SvNVX(sv);
7202 if (NV_OVERFLOWS_INTEGERS_AT &&
7203 was <= -NV_OVERFLOWS_INTEGERS_AT && ckWARN(WARN_IMPRECISION)) {
7204 Perl_warner(aTHX_ packWARN(WARN_IMPRECISION),
7205 "Lost precision when decrementing %" NVff " by 1",
7208 (void)SvNOK_only(sv);
7209 SvNV_set(sv, was - 1.0);
7213 if (!(flags & SVp_POK)) {
7214 if ((flags & SVTYPEMASK) < SVt_PVIV)
7215 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7217 (void)SvIOK_only(sv);
7220 #ifdef PERL_PRESERVE_IVUV
7222 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7223 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7224 /* Need to try really hard to see if it's an integer.
7225 9.22337203685478e+18 is an integer.
7226 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7227 so $a="9.22337203685478e+18"; $a+0; $a--
7228 needs to be the same as $a="9.22337203685478e+18"; $a--
7235 /* sv_2iv *should* have made this an NV */
7236 if (flags & SVp_NOK) {
7237 (void)SvNOK_only(sv);
7238 SvNV_set(sv, SvNVX(sv) - 1.0);
7241 /* I don't think we can get here. Maybe I should assert this
7242 And if we do get here I suspect that sv_setnv will croak. NWC
7244 #if defined(USE_LONG_DOUBLE)
7245 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",
7246 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7248 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7249 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7253 #endif /* PERL_PRESERVE_IVUV */
7254 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
7258 =for apidoc sv_mortalcopy
7260 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
7261 The new SV is marked as mortal. It will be destroyed "soon", either by an
7262 explicit call to FREETMPS, or by an implicit call at places such as
7263 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
7268 /* Make a string that will exist for the duration of the expression
7269 * evaluation. Actually, it may have to last longer than that, but
7270 * hopefully we won't free it until it has been assigned to a
7271 * permanent location. */
7274 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
7280 sv_setsv(sv,oldstr);
7282 PL_tmps_stack[++PL_tmps_ix] = sv;
7288 =for apidoc sv_newmortal
7290 Creates a new null SV which is mortal. The reference count of the SV is
7291 set to 1. It will be destroyed "soon", either by an explicit call to
7292 FREETMPS, or by an implicit call at places such as statement boundaries.
7293 See also C<sv_mortalcopy> and C<sv_2mortal>.
7299 Perl_sv_newmortal(pTHX)
7305 SvFLAGS(sv) = SVs_TEMP;
7307 PL_tmps_stack[++PL_tmps_ix] = sv;
7313 =for apidoc newSVpvn_flags
7315 Creates a new SV and copies a string into it. The reference count for the
7316 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7317 string. You are responsible for ensuring that the source string is at least
7318 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7319 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
7320 If C<SVs_TEMP> is set, then C<sv2mortal()> is called on the result before
7321 returning. If C<SVf_UTF8> is set, then it will be set on the new SV.
7322 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
7324 #define newSVpvn_utf8(s, len, u) \
7325 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7331 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
7336 /* All the flags we don't support must be zero.
7337 And we're new code so I'm going to assert this from the start. */
7338 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
7340 sv_setpvn(sv,s,len);
7341 SvFLAGS(sv) |= (flags & SVf_UTF8);
7342 return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
7346 =for apidoc sv_2mortal
7348 Marks an existing SV as mortal. The SV will be destroyed "soon", either
7349 by an explicit call to FREETMPS, or by an implicit call at places such as
7350 statement boundaries. SvTEMP() is turned on which means that the SV's
7351 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7352 and C<sv_mortalcopy>.
7358 Perl_sv_2mortal(pTHX_ register SV *const sv)
7363 if (SvREADONLY(sv) && SvIMMORTAL(sv))
7366 PL_tmps_stack[++PL_tmps_ix] = sv;
7374 Creates a new SV and copies a string into it. The reference count for the
7375 SV is set to 1. If C<len> is zero, Perl will compute the length using
7376 strlen(). For efficiency, consider using C<newSVpvn> instead.
7382 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
7388 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
7393 =for apidoc newSVpvn
7395 Creates a new SV and copies a string into it. The reference count for the
7396 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7397 string. You are responsible for ensuring that the source string is at least
7398 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7404 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
7410 sv_setpvn(sv,s,len);
7415 =for apidoc newSVhek
7417 Creates a new SV from the hash key structure. It will generate scalars that
7418 point to the shared string table where possible. Returns a new (undefined)
7419 SV if the hek is NULL.
7425 Perl_newSVhek(pTHX_ const HEK *const hek)
7435 if (HEK_LEN(hek) == HEf_SVKEY) {
7436 return newSVsv(*(SV**)HEK_KEY(hek));
7438 const int flags = HEK_FLAGS(hek);
7439 if (flags & HVhek_WASUTF8) {
7441 Andreas would like keys he put in as utf8 to come back as utf8
7443 STRLEN utf8_len = HEK_LEN(hek);
7444 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7445 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
7448 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7450 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
7451 /* We don't have a pointer to the hv, so we have to replicate the
7452 flag into every HEK. This hv is using custom a hasing
7453 algorithm. Hence we can't return a shared string scalar, as
7454 that would contain the (wrong) hash value, and might get passed
7455 into an hv routine with a regular hash.
7456 Similarly, a hash that isn't using shared hash keys has to have
7457 the flag in every key so that we know not to try to call
7458 share_hek_kek on it. */
7460 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
7465 /* This will be overwhelminly the most common case. */
7467 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7468 more efficient than sharepvn(). */
7472 sv_upgrade(sv, SVt_PV);
7473 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7474 SvCUR_set(sv, HEK_LEN(hek));
7487 =for apidoc newSVpvn_share
7489 Creates a new SV with its SvPVX_const pointing to a shared string in the string
7490 table. If the string does not already exist in the table, it is created
7491 first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7492 value is used; otherwise the hash is computed. The string's hash can be later
7493 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7494 that as the string table is used for shared hash keys these strings will have
7495 SvPVX_const == HeKEY and hash lookup will avoid string compare.
7501 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7505 bool is_utf8 = FALSE;
7506 const char *const orig_src = src;
7509 STRLEN tmplen = -len;
7511 /* See the note in hv.c:hv_fetch() --jhi */
7512 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7516 PERL_HASH(hash, src, len);
7518 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
7519 changes here, update it there too. */
7520 sv_upgrade(sv, SVt_PV);
7521 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7529 if (src != orig_src)
7535 #if defined(PERL_IMPLICIT_CONTEXT)
7537 /* pTHX_ magic can't cope with varargs, so this is a no-context
7538 * version of the main function, (which may itself be aliased to us).
7539 * Don't access this version directly.
7543 Perl_newSVpvf_nocontext(const char *const pat, ...)
7549 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
7551 va_start(args, pat);
7552 sv = vnewSVpvf(pat, &args);
7559 =for apidoc newSVpvf
7561 Creates a new SV and initializes it with the string formatted like
7568 Perl_newSVpvf(pTHX_ const char *const pat, ...)
7573 PERL_ARGS_ASSERT_NEWSVPVF;
7575 va_start(args, pat);
7576 sv = vnewSVpvf(pat, &args);
7581 /* backend for newSVpvf() and newSVpvf_nocontext() */
7584 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
7589 PERL_ARGS_ASSERT_VNEWSVPVF;
7592 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
7599 Creates a new SV and copies a floating point value into it.
7600 The reference count for the SV is set to 1.
7606 Perl_newSVnv(pTHX_ const NV n)
7619 Creates a new SV and copies an integer into it. The reference count for the
7626 Perl_newSViv(pTHX_ const IV i)
7639 Creates a new SV and copies an unsigned integer into it.
7640 The reference count for the SV is set to 1.
7646 Perl_newSVuv(pTHX_ const UV u)
7657 =for apidoc newSV_type
7659 Creates a new SV, of the type specified. The reference count for the new SV
7666 Perl_newSV_type(pTHX_ const svtype type)
7671 sv_upgrade(sv, type);
7676 =for apidoc newRV_noinc
7678 Creates an RV wrapper for an SV. The reference count for the original
7679 SV is B<not> incremented.
7685 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
7688 register SV *sv = newSV_type(SVt_IV);
7690 PERL_ARGS_ASSERT_NEWRV_NOINC;
7693 SvRV_set(sv, tmpRef);
7698 /* newRV_inc is the official function name to use now.
7699 * newRV_inc is in fact #defined to newRV in sv.h
7703 Perl_newRV(pTHX_ SV *const sv)
7707 PERL_ARGS_ASSERT_NEWRV;
7709 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
7715 Creates a new SV which is an exact duplicate of the original SV.
7722 Perl_newSVsv(pTHX_ register SV *const old)
7729 if (SvTYPE(old) == SVTYPEMASK) {
7730 if (ckWARN_d(WARN_INTERNAL))
7731 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7735 /* SV_GMAGIC is the default for sv_setv()
7736 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7737 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7738 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7743 =for apidoc sv_reset
7745 Underlying implementation for the C<reset> Perl function.
7746 Note that the perl-level function is vaguely deprecated.
7752 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
7755 char todo[PERL_UCHAR_MAX+1];
7757 PERL_ARGS_ASSERT_SV_RESET;
7762 if (!*s) { /* reset ?? searches */
7763 MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
7765 const U32 count = mg->mg_len / sizeof(PMOP**);
7766 PMOP **pmp = (PMOP**) mg->mg_ptr;
7767 PMOP *const *const end = pmp + count;
7771 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
7773 (*pmp)->op_pmflags &= ~PMf_USED;
7781 /* reset variables */
7783 if (!HvARRAY(stash))
7786 Zero(todo, 256, char);
7789 I32 i = (unsigned char)*s;
7793 max = (unsigned char)*s++;
7794 for ( ; i <= max; i++) {
7797 for (i = 0; i <= (I32) HvMAX(stash); i++) {
7799 for (entry = HvARRAY(stash)[i];
7801 entry = HeNEXT(entry))
7806 if (!todo[(U8)*HeKEY(entry)])
7808 gv = (GV*)HeVAL(entry);
7811 if (SvTHINKFIRST(sv)) {
7812 if (!SvREADONLY(sv) && SvROK(sv))
7814 /* XXX Is this continue a bug? Why should THINKFIRST
7815 exempt us from resetting arrays and hashes? */
7819 if (SvTYPE(sv) >= SVt_PV) {
7821 if (SvPVX_const(sv) != NULL)
7829 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7831 Perl_die(aTHX_ "Can't reset %%ENV on this system");
7834 # if defined(USE_ENVIRON_ARRAY)
7837 # endif /* USE_ENVIRON_ARRAY */
7848 Using various gambits, try to get an IO from an SV: the IO slot if its a
7849 GV; or the recursive result if we're an RV; or the IO slot of the symbol
7850 named after the PV if we're a string.
7856 Perl_sv_2io(pTHX_ SV *const sv)
7861 PERL_ARGS_ASSERT_SV_2IO;
7863 switch (SvTYPE(sv)) {
7868 if (isGV_with_GP(sv)) {
7872 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7878 Perl_croak(aTHX_ PL_no_usym, "filehandle");
7880 return sv_2io(SvRV(sv));
7881 gv = gv_fetchsv(sv, 0, SVt_PVIO);
7887 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
7896 Using various gambits, try to get a CV from an SV; in addition, try if
7897 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7898 The flags in C<lref> are passed to sv_fetchsv.
7904 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
7910 PERL_ARGS_ASSERT_SV_2CV;
7917 switch (SvTYPE(sv)) {
7928 if (isGV_with_GP(sv)) {
7938 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
7940 tryAMAGICunDEREF(to_cv);
7943 if (SvTYPE(sv) == SVt_PVCV) {
7949 else if(isGV_with_GP(sv))
7952 Perl_croak(aTHX_ "Not a subroutine reference");
7954 else if (isGV_with_GP(sv)) {
7959 gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
7965 /* Some flags to gv_fetchsv mean don't really create the GV */
7966 if (!isGV_with_GP(gv)) {
7972 if (lref && !GvCVu(gv)) {
7976 gv_efullname3(tmpsv, gv, NULL);
7977 /* XXX this is probably not what they think they're getting.
7978 * It has the same effect as "sub name;", i.e. just a forward
7980 newSUB(start_subparse(FALSE, 0),
7981 newSVOP(OP_CONST, 0, tmpsv),
7985 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7986 SVfARG(SvOK(sv) ? sv : &PL_sv_no));
7995 Returns true if the SV has a true value by Perl's rules.
7996 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7997 instead use an in-line version.
8003 Perl_sv_true(pTHX_ register SV *const sv)
8008 register const XPV* const tXpv = (XPV*)SvANY(sv);
8010 (tXpv->xpv_cur > 1 ||
8011 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8018 return SvIVX(sv) != 0;
8021 return SvNVX(sv) != 0.0;
8023 return sv_2bool(sv);
8029 =for apidoc sv_pvn_force
8031 Get a sensible string out of the SV somehow.
8032 A private implementation of the C<SvPV_force> macro for compilers which
8033 can't cope with complex macro expressions. Always use the macro instead.
8035 =for apidoc sv_pvn_force_flags
8037 Get a sensible string out of the SV somehow.
8038 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8039 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8040 implemented in terms of this function.
8041 You normally want to use the various wrapper macros instead: see
8042 C<SvPV_force> and C<SvPV_force_nomg>
8048 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8052 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8054 if (SvTHINKFIRST(sv) && !SvROK(sv))
8055 sv_force_normal_flags(sv, 0);
8065 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
8066 const char * const ref = sv_reftype(sv,0);
8068 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
8069 ref, OP_NAME(PL_op));
8071 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
8073 if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8074 || isGV_with_GP(sv))
8075 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8077 s = sv_2pv_flags(sv, &len, flags);
8081 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
8084 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
8085 SvGROW(sv, len + 1);
8086 Move(s,SvPVX(sv),len,char);
8088 SvPVX(sv)[len] = '\0';
8091 SvPOK_on(sv); /* validate pointer */
8093 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8094 PTR2UV(sv),SvPVX_const(sv)));
8097 return SvPVX_mutable(sv);
8101 =for apidoc sv_pvbyten_force
8103 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
8109 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
8111 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8113 sv_pvn_force(sv,lp);
8114 sv_utf8_downgrade(sv,0);
8120 =for apidoc sv_pvutf8n_force
8122 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
8128 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
8130 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8132 sv_pvn_force(sv,lp);
8133 sv_utf8_upgrade(sv);
8139 =for apidoc sv_reftype
8141 Returns a string describing what the SV is a reference to.
8147 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
8149 PERL_ARGS_ASSERT_SV_REFTYPE;
8151 /* The fact that I don't need to downcast to char * everywhere, only in ?:
8152 inside return suggests a const propagation bug in g++. */
8153 if (ob && SvOBJECT(sv)) {
8154 char * const name = HvNAME_get(SvSTASH(sv));
8155 return name ? name : (char *) "__ANON__";
8158 switch (SvTYPE(sv)) {
8173 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
8174 /* tied lvalues should appear to be
8175 * scalars for backwards compatitbility */
8176 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
8177 ? "SCALAR" : "LVALUE");
8178 case SVt_PVAV: return "ARRAY";
8179 case SVt_PVHV: return "HASH";
8180 case SVt_PVCV: return "CODE";
8181 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
8182 ? "GLOB" : "SCALAR");
8183 case SVt_PVFM: return "FORMAT";
8184 case SVt_PVIO: return "IO";
8185 case SVt_BIND: return "BIND";
8186 case SVt_REGEXP: return "REGEXP";
8187 default: return "UNKNOWN";
8193 =for apidoc sv_isobject
8195 Returns a boolean indicating whether the SV is an RV pointing to a blessed
8196 object. If the SV is not an RV, or if the object is not blessed, then this
8203 Perl_sv_isobject(pTHX_ SV *sv)
8219 Returns a boolean indicating whether the SV is blessed into the specified
8220 class. This does not check for subtypes; use C<sv_derived_from> to verify
8221 an inheritance relationship.
8227 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
8231 PERL_ARGS_ASSERT_SV_ISA;
8241 hvname = HvNAME_get(SvSTASH(sv));
8245 return strEQ(hvname, name);
8251 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
8252 it will be upgraded to one. If C<classname> is non-null then the new SV will
8253 be blessed in the specified package. The new SV is returned and its
8254 reference count is 1.
8260 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
8265 PERL_ARGS_ASSERT_NEWSVRV;
8269 SV_CHECK_THINKFIRST_COW_DROP(rv);
8270 (void)SvAMAGIC_off(rv);
8272 if (SvTYPE(rv) >= SVt_PVMG) {
8273 const U32 refcnt = SvREFCNT(rv);
8277 SvREFCNT(rv) = refcnt;
8279 sv_upgrade(rv, SVt_IV);
8280 } else if (SvROK(rv)) {
8281 SvREFCNT_dec(SvRV(rv));
8283 prepare_SV_for_RV(rv);
8291 HV* const stash = gv_stashpv(classname, GV_ADD);
8292 (void)sv_bless(rv, stash);
8298 =for apidoc sv_setref_pv
8300 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
8301 argument will be upgraded to an RV. That RV will be modified to point to
8302 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8303 into the SV. The C<classname> argument indicates the package for the
8304 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8305 will have a reference count of 1, and the RV will be returned.
8307 Do not use with other Perl types such as HV, AV, SV, CV, because those
8308 objects will become corrupted by the pointer copy process.
8310 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8316 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
8320 PERL_ARGS_ASSERT_SV_SETREF_PV;
8323 sv_setsv(rv, &PL_sv_undef);
8327 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
8332 =for apidoc sv_setref_iv
8334 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
8335 argument will be upgraded to an RV. That RV will be modified to point to
8336 the new SV. The C<classname> argument indicates the package for the
8337 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8338 will have a reference count of 1, and the RV will be returned.
8344 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
8346 PERL_ARGS_ASSERT_SV_SETREF_IV;
8348 sv_setiv(newSVrv(rv,classname), iv);
8353 =for apidoc sv_setref_uv
8355 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
8356 argument will be upgraded to an RV. That RV will be modified to point to
8357 the new SV. The C<classname> argument indicates the package for the
8358 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8359 will have a reference count of 1, and the RV will be returned.
8365 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
8367 PERL_ARGS_ASSERT_SV_SETREF_UV;
8369 sv_setuv(newSVrv(rv,classname), uv);
8374 =for apidoc sv_setref_nv
8376 Copies a double into a new SV, optionally blessing the SV. The C<rv>
8377 argument will be upgraded to an RV. That RV will be modified to point to
8378 the new SV. The C<classname> argument indicates the package for the
8379 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8380 will have a reference count of 1, and the RV will be returned.
8386 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
8388 PERL_ARGS_ASSERT_SV_SETREF_NV;
8390 sv_setnv(newSVrv(rv,classname), nv);
8395 =for apidoc sv_setref_pvn
8397 Copies a string into a new SV, optionally blessing the SV. The length of the
8398 string must be specified with C<n>. The C<rv> argument will be upgraded to
8399 an RV. That RV will be modified to point to the new SV. The C<classname>
8400 argument indicates the package for the blessing. Set C<classname> to
8401 C<NULL> to avoid the blessing. The new SV will have a reference count
8402 of 1, and the RV will be returned.
8404 Note that C<sv_setref_pv> copies the pointer while this copies the string.
8410 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
8411 const char *const pv, const STRLEN n)
8413 PERL_ARGS_ASSERT_SV_SETREF_PVN;
8415 sv_setpvn(newSVrv(rv,classname), pv, n);
8420 =for apidoc sv_bless
8422 Blesses an SV into a specified package. The SV must be an RV. The package
8423 must be designated by its stash (see C<gv_stashpv()>). The reference count
8424 of the SV is unaffected.
8430 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
8435 PERL_ARGS_ASSERT_SV_BLESS;
8438 Perl_croak(aTHX_ "Can't bless non-reference value");
8440 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8441 if (SvIsCOW(tmpRef))
8442 sv_force_normal_flags(tmpRef, 0);
8443 if (SvREADONLY(tmpRef))
8444 Perl_croak(aTHX_ PL_no_modify);
8445 if (SvOBJECT(tmpRef)) {
8446 if (SvTYPE(tmpRef) != SVt_PVIO)
8448 SvREFCNT_dec(SvSTASH(tmpRef));
8451 SvOBJECT_on(tmpRef);
8452 if (SvTYPE(tmpRef) != SVt_PVIO)
8454 SvUPGRADE(tmpRef, SVt_PVMG);
8455 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc_simple(stash));
8460 (void)SvAMAGIC_off(sv);
8462 if(SvSMAGICAL(tmpRef))
8463 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8471 /* Downgrades a PVGV to a PVMG.
8475 S_sv_unglob(pTHX_ SV *const sv)
8480 SV * const temp = sv_newmortal();
8482 PERL_ARGS_ASSERT_SV_UNGLOB;
8484 assert(SvTYPE(sv) == SVt_PVGV);
8486 gv_efullname3(temp, (GV *) sv, "*");
8489 if(GvCVu((GV*)sv) && (stash = GvSTASH((GV*)sv)) && HvNAME_get(stash))
8490 mro_method_changed_in(stash);
8494 sv_del_backref((SV*)GvSTASH(sv), sv);
8498 if (GvNAME_HEK(sv)) {
8499 unshare_hek(GvNAME_HEK(sv));
8501 isGV_with_GP_off(sv);
8503 /* need to keep SvANY(sv) in the right arena */
8504 xpvmg = new_XPVMG();
8505 StructCopy(SvANY(sv), xpvmg, XPVMG);
8506 del_XPVGV(SvANY(sv));
8509 SvFLAGS(sv) &= ~SVTYPEMASK;
8510 SvFLAGS(sv) |= SVt_PVMG;
8512 /* Intentionally not calling any local SET magic, as this isn't so much a
8513 set operation as merely an internal storage change. */
8514 sv_setsv_flags(sv, temp, 0);
8518 =for apidoc sv_unref_flags
8520 Unsets the RV status of the SV, and decrements the reference count of
8521 whatever was being referenced by the RV. This can almost be thought of
8522 as a reversal of C<newSVrv>. The C<cflags> argument can contain
8523 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8524 (otherwise the decrementing is conditional on the reference count being
8525 different from one or the reference being a readonly SV).
8532 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
8534 SV* const target = SvRV(ref);
8536 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
8538 if (SvWEAKREF(ref)) {
8539 sv_del_backref(target, ref);
8541 SvRV_set(ref, NULL);
8544 SvRV_set(ref, NULL);
8546 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
8547 assigned to as BEGIN {$a = \"Foo"} will fail. */
8548 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8549 SvREFCNT_dec(target);
8550 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8551 sv_2mortal(target); /* Schedule for freeing later */
8555 =for apidoc sv_untaint
8557 Untaint an SV. Use C<SvTAINTED_off> instead.
8562 Perl_sv_untaint(pTHX_ SV *const sv)
8564 PERL_ARGS_ASSERT_SV_UNTAINT;
8566 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8567 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8574 =for apidoc sv_tainted
8576 Test an SV for taintedness. Use C<SvTAINTED> instead.
8581 Perl_sv_tainted(pTHX_ SV *const sv)
8583 PERL_ARGS_ASSERT_SV_TAINTED;
8585 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8586 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8587 if (mg && (mg->mg_len & 1) )
8594 =for apidoc sv_setpviv
8596 Copies an integer into the given SV, also updating its string value.
8597 Does not handle 'set' magic. See C<sv_setpviv_mg>.
8603 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
8605 char buf[TYPE_CHARS(UV)];
8607 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8609 PERL_ARGS_ASSERT_SV_SETPVIV;
8611 sv_setpvn(sv, ptr, ebuf - ptr);
8615 =for apidoc sv_setpviv_mg
8617 Like C<sv_setpviv>, but also handles 'set' magic.
8623 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
8625 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
8631 #if defined(PERL_IMPLICIT_CONTEXT)
8633 /* pTHX_ magic can't cope with varargs, so this is a no-context
8634 * version of the main function, (which may itself be aliased to us).
8635 * Don't access this version directly.
8639 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
8644 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
8646 va_start(args, pat);
8647 sv_vsetpvf(sv, pat, &args);
8651 /* pTHX_ magic can't cope with varargs, so this is a no-context
8652 * version of the main function, (which may itself be aliased to us).
8653 * Don't access this version directly.
8657 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
8662 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
8664 va_start(args, pat);
8665 sv_vsetpvf_mg(sv, pat, &args);
8671 =for apidoc sv_setpvf
8673 Works like C<sv_catpvf> but copies the text into the SV instead of
8674 appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
8680 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
8684 PERL_ARGS_ASSERT_SV_SETPVF;
8686 va_start(args, pat);
8687 sv_vsetpvf(sv, pat, &args);
8692 =for apidoc sv_vsetpvf
8694 Works like C<sv_vcatpvf> but copies the text into the SV instead of
8695 appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8697 Usually used via its frontend C<sv_setpvf>.
8703 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
8705 PERL_ARGS_ASSERT_SV_VSETPVF;
8707 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8711 =for apidoc sv_setpvf_mg
8713 Like C<sv_setpvf>, but also handles 'set' magic.
8719 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
8723 PERL_ARGS_ASSERT_SV_SETPVF_MG;
8725 va_start(args, pat);
8726 sv_vsetpvf_mg(sv, pat, &args);
8731 =for apidoc sv_vsetpvf_mg
8733 Like C<sv_vsetpvf>, but also handles 'set' magic.
8735 Usually used via its frontend C<sv_setpvf_mg>.
8741 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
8743 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
8745 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8749 #if defined(PERL_IMPLICIT_CONTEXT)
8751 /* pTHX_ magic can't cope with varargs, so this is a no-context
8752 * version of the main function, (which may itself be aliased to us).
8753 * Don't access this version directly.
8757 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
8762 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
8764 va_start(args, pat);
8765 sv_vcatpvf(sv, pat, &args);
8769 /* pTHX_ magic can't cope with varargs, so this is a no-context
8770 * version of the main function, (which may itself be aliased to us).
8771 * Don't access this version directly.
8775 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
8780 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
8782 va_start(args, pat);
8783 sv_vcatpvf_mg(sv, pat, &args);
8789 =for apidoc sv_catpvf
8791 Processes its arguments like C<sprintf> and appends the formatted
8792 output to an SV. If the appended data contains "wide" characters
8793 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8794 and characters >255 formatted with %c), the original SV might get
8795 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
8796 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8797 valid UTF-8; if the original SV was bytes, the pattern should be too.
8802 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
8806 PERL_ARGS_ASSERT_SV_CATPVF;
8808 va_start(args, pat);
8809 sv_vcatpvf(sv, pat, &args);
8814 =for apidoc sv_vcatpvf
8816 Processes its arguments like C<vsprintf> and appends the formatted output
8817 to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8819 Usually used via its frontend C<sv_catpvf>.
8825 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
8827 PERL_ARGS_ASSERT_SV_VCATPVF;
8829 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8833 =for apidoc sv_catpvf_mg
8835 Like C<sv_catpvf>, but also handles 'set' magic.
8841 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
8845 PERL_ARGS_ASSERT_SV_CATPVF_MG;
8847 va_start(args, pat);
8848 sv_vcatpvf_mg(sv, pat, &args);
8853 =for apidoc sv_vcatpvf_mg
8855 Like C<sv_vcatpvf>, but also handles 'set' magic.
8857 Usually used via its frontend C<sv_catpvf_mg>.
8863 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
8865 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
8867 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8872 =for apidoc sv_vsetpvfn
8874 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
8877 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
8883 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
8884 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
8886 PERL_ARGS_ASSERT_SV_VSETPVFN;
8888 sv_setpvn(sv, "", 0);
8889 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8893 S_expect_number(pTHX_ char **const pattern)
8898 PERL_ARGS_ASSERT_EXPECT_NUMBER;
8900 switch (**pattern) {
8901 case '1': case '2': case '3':
8902 case '4': case '5': case '6':
8903 case '7': case '8': case '9':
8904 var = *(*pattern)++ - '0';
8905 while (isDIGIT(**pattern)) {
8906 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
8908 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
8916 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
8918 const int neg = nv < 0;
8921 PERL_ARGS_ASSERT_F0CONVERT;
8929 if (uv & 1 && uv == nv)
8930 uv--; /* Round to even */
8932 const unsigned dig = uv % 10;
8945 =for apidoc sv_vcatpvfn
8947 Processes its arguments like C<vsprintf> and appends the formatted output
8948 to an SV. Uses an array of SVs if the C style variable argument list is
8949 missing (NULL). When running with taint checks enabled, indicates via
8950 C<maybe_tainted> if results are untrustworthy (often due to the use of
8953 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
8959 #define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
8960 vecstr = (U8*)SvPV_const(vecsv,veclen);\
8961 vec_utf8 = DO_UTF8(vecsv);
8963 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8966 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
8967 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
8975 static const char nullstr[] = "(null)";
8977 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8978 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
8980 /* Times 4: a decimal digit takes more than 3 binary digits.
8981 * NV_DIG: mantissa takes than many decimal digits.
8982 * Plus 32: Playing safe. */
8983 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8984 /* large enough for "%#.#f" --chip */
8985 /* what about long double NVs? --jhi */
8987 PERL_ARGS_ASSERT_SV_VCATPVFN;
8988 PERL_UNUSED_ARG(maybe_tainted);
8990 /* no matter what, this is a string now */
8991 (void)SvPV_force(sv, origlen);
8993 /* special-case "", "%s", and "%-p" (SVf - see below) */
8996 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
8998 const char * const s = va_arg(*args, char*);
8999 sv_catpv(sv, s ? s : nullstr);
9001 else if (svix < svmax) {
9002 sv_catsv(sv, *svargs);
9006 if (args && patlen == 3 && pat[0] == '%' &&
9007 pat[1] == '-' && pat[2] == 'p') {
9008 argsv = (SV*)va_arg(*args, void*);
9009 sv_catsv(sv, argsv);
9013 #ifndef USE_LONG_DOUBLE
9014 /* special-case "%.<number>[gf]" */
9015 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
9016 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9017 unsigned digits = 0;
9021 while (*pp >= '0' && *pp <= '9')
9022 digits = 10 * digits + (*pp++ - '0');
9023 if (pp - pat == (int)patlen - 1) {
9031 /* Add check for digits != 0 because it seems that some
9032 gconverts are buggy in this case, and we don't yet have
9033 a Configure test for this. */
9034 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9035 /* 0, point, slack */
9036 Gconvert(nv, (int)digits, 0, ebuf);
9038 if (*ebuf) /* May return an empty string for digits==0 */
9041 } else if (!digits) {
9044 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9045 sv_catpvn(sv, p, l);
9051 #endif /* !USE_LONG_DOUBLE */
9053 if (!args && svix < svmax && DO_UTF8(*svargs))
9056 patend = (char*)pat + patlen;
9057 for (p = (char*)pat; p < patend; p = q) {
9060 bool vectorize = FALSE;
9061 bool vectorarg = FALSE;
9062 bool vec_utf8 = FALSE;
9068 bool has_precis = FALSE;
9070 const I32 osvix = svix;
9071 bool is_utf8 = FALSE; /* is this item utf8? */
9072 #ifdef HAS_LDBL_SPRINTF_BUG
9073 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9074 with sfio - Allen <allens@cpan.org> */
9075 bool fix_ldbl_sprintf_bug = FALSE;
9079 U8 utf8buf[UTF8_MAXBYTES+1];
9080 STRLEN esignlen = 0;
9082 const char *eptr = NULL;
9085 const U8 *vecstr = NULL;
9092 /* we need a long double target in case HAS_LONG_DOUBLE but
9095 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9103 const char *dotstr = ".";
9104 STRLEN dotstrlen = 1;
9105 I32 efix = 0; /* explicit format parameter index */
9106 I32 ewix = 0; /* explicit width index */
9107 I32 epix = 0; /* explicit precision index */
9108 I32 evix = 0; /* explicit vector index */
9109 bool asterisk = FALSE;
9111 /* echo everything up to the next format specification */
9112 for (q = p; q < patend && *q != '%'; ++q) ;
9114 if (has_utf8 && !pat_utf8)
9115 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9117 sv_catpvn(sv, p, q - p);
9124 We allow format specification elements in this order:
9125 \d+\$ explicit format parameter index
9127 v|\*(\d+\$)?v vector with optional (optionally specified) arg
9128 0 flag (as above): repeated to allow "v02"
9129 \d+|\*(\d+\$)? width using optional (optionally specified) arg
9130 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9132 [%bcdefginopsuxDFOUX] format (mandatory)
9137 As of perl5.9.3, printf format checking is on by default.
9138 Internally, perl uses %p formats to provide an escape to
9139 some extended formatting. This block deals with those
9140 extensions: if it does not match, (char*)q is reset and
9141 the normal format processing code is used.
9143 Currently defined extensions are:
9144 %p include pointer address (standard)
9145 %-p (SVf) include an SV (previously %_)
9146 %-<num>p include an SV with precision <num>
9147 %<num>p reserved for future extensions
9149 Robin Barker 2005-07-14
9151 %1p (VDf) removed. RMB 2007-10-19
9158 n = expect_number(&q);
9165 argsv = (SV*)va_arg(*args, void*);
9166 eptr = SvPV_const(argsv, elen);
9172 if (ckWARN_d(WARN_INTERNAL))
9173 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9174 "internal %%<num>p might conflict with future printf extensions");
9180 if ( (width = expect_number(&q)) ) {
9195 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9224 if ( (ewix = expect_number(&q)) )
9233 if ((vectorarg = asterisk)) {
9246 width = expect_number(&q);
9252 vecsv = va_arg(*args, SV*);
9254 vecsv = (evix > 0 && evix <= svmax)
9255 ? svargs[evix-1] : &PL_sv_undef;
9257 vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
9259 dotstr = SvPV_const(vecsv, dotstrlen);
9260 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
9261 bad with tied or overloaded values that return UTF8. */
9264 else if (has_utf8) {
9265 vecsv = sv_mortalcopy(vecsv);
9266 sv_utf8_upgrade(vecsv);
9267 dotstr = SvPV_const(vecsv, dotstrlen);
9274 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
9275 vecsv = svargs[efix ? efix-1 : svix++];
9276 vecstr = (U8*)SvPV_const(vecsv,veclen);
9277 vec_utf8 = DO_UTF8(vecsv);
9279 /* if this is a version object, we need to convert
9280 * back into v-string notation and then let the
9281 * vectorize happen normally
9283 if (sv_derived_from(vecsv, "version")) {
9284 char *version = savesvpv(vecsv);
9285 if ( hv_exists((HV*)SvRV(vecsv), "alpha", 5 ) ) {
9286 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9287 "vector argument not supported with alpha versions");
9290 vecsv = sv_newmortal();
9291 scan_vstring(version, version + veclen, vecsv);
9292 vecstr = (U8*)SvPV_const(vecsv, veclen);
9293 vec_utf8 = DO_UTF8(vecsv);
9305 i = va_arg(*args, int);
9307 i = (ewix ? ewix <= svmax : svix < svmax) ?
9308 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9310 width = (i < 0) ? -i : i;
9320 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
9322 /* XXX: todo, support specified precision parameter */
9326 i = va_arg(*args, int);
9328 i = (ewix ? ewix <= svmax : svix < svmax)
9329 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9331 has_precis = !(i < 0);
9336 precis = precis * 10 + (*q++ - '0');
9345 case 'I': /* Ix, I32x, and I64x */
9347 if (q[1] == '6' && q[2] == '4') {
9353 if (q[1] == '3' && q[2] == '2') {
9363 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9374 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9375 if (*(q + 1) == 'l') { /* lld, llf */
9401 if (!vectorize && !args) {
9403 const I32 i = efix-1;
9404 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
9406 argsv = (svix >= 0 && svix < svmax)
9407 ? svargs[svix++] : &PL_sv_undef;
9418 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
9420 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
9422 eptr = (char*)utf8buf;
9423 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
9437 eptr = va_arg(*args, char*);
9439 #ifdef MACOS_TRADITIONAL
9440 /* On MacOS, %#s format is used for Pascal strings */
9445 elen = strlen(eptr);
9447 eptr = (char *)nullstr;
9448 elen = sizeof nullstr - 1;
9452 eptr = SvPV_const(argsv, elen);
9453 if (DO_UTF8(argsv)) {
9454 I32 old_precis = precis;
9455 if (has_precis && precis < elen) {
9457 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
9460 if (width) { /* fudge width (can't fudge elen) */
9461 if (has_precis && precis < elen)
9462 width += precis - old_precis;
9464 width += elen - sv_len_utf8(argsv);
9471 if (has_precis && elen > precis)
9478 if (alt || vectorize)
9480 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
9501 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9510 esignbuf[esignlen++] = plus;
9514 case 'h': iv = (short)va_arg(*args, int); break;
9515 case 'l': iv = va_arg(*args, long); break;
9516 case 'V': iv = va_arg(*args, IV); break;
9517 default: iv = va_arg(*args, int); break;
9519 case 'q': iv = va_arg(*args, Quad_t); break;
9524 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
9526 case 'h': iv = (short)tiv; break;
9527 case 'l': iv = (long)tiv; break;
9529 default: iv = tiv; break;
9531 case 'q': iv = (Quad_t)tiv; break;
9535 if ( !vectorize ) /* we already set uv above */
9540 esignbuf[esignlen++] = plus;
9544 esignbuf[esignlen++] = '-';
9588 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9599 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
9600 case 'l': uv = va_arg(*args, unsigned long); break;
9601 case 'V': uv = va_arg(*args, UV); break;
9602 default: uv = va_arg(*args, unsigned); break;
9604 case 'q': uv = va_arg(*args, Uquad_t); break;
9609 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
9611 case 'h': uv = (unsigned short)tuv; break;
9612 case 'l': uv = (unsigned long)tuv; break;
9614 default: uv = tuv; break;
9616 case 'q': uv = (Uquad_t)tuv; break;
9623 char *ptr = ebuf + sizeof ebuf;
9624 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
9630 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
9636 esignbuf[esignlen++] = '0';
9637 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9645 if (alt && *ptr != '0')
9654 esignbuf[esignlen++] = '0';
9655 esignbuf[esignlen++] = c;
9658 default: /* it had better be ten or less */
9662 } while (uv /= base);
9665 elen = (ebuf + sizeof ebuf) - ptr;
9669 zeros = precis - elen;
9670 else if (precis == 0 && elen == 1 && *eptr == '0'
9671 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
9674 /* a precision nullifies the 0 flag. */
9681 /* FLOATING POINT */
9684 c = 'f'; /* maybe %F isn't supported here */
9692 /* This is evil, but floating point is even more evil */
9694 /* for SV-style calling, we can only get NV
9695 for C-style calling, we assume %f is double;
9696 for simplicity we allow any of %Lf, %llf, %qf for long double
9700 #if defined(USE_LONG_DOUBLE)
9704 /* [perl #20339] - we should accept and ignore %lf rather than die */
9708 #if defined(USE_LONG_DOUBLE)
9709 intsize = args ? 0 : 'q';
9713 #if defined(HAS_LONG_DOUBLE)
9722 /* now we need (long double) if intsize == 'q', else (double) */
9724 #if LONG_DOUBLESIZE > DOUBLESIZE
9726 va_arg(*args, long double) :
9727 va_arg(*args, double)
9729 va_arg(*args, double)
9734 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
9735 else. frexp() has some unspecified behaviour for those three */
9736 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
9738 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9739 will cast our (long double) to (double) */
9740 (void)Perl_frexp(nv, &i);
9741 if (i == PERL_INT_MIN)
9742 Perl_die(aTHX_ "panic: frexp");
9744 need = BIT_DIGITS(i);
9746 need += has_precis ? precis : 6; /* known default */
9751 #ifdef HAS_LDBL_SPRINTF_BUG
9752 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9753 with sfio - Allen <allens@cpan.org> */
9756 # define MY_DBL_MAX DBL_MAX
9757 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9758 # if DOUBLESIZE >= 8
9759 # define MY_DBL_MAX 1.7976931348623157E+308L
9761 # define MY_DBL_MAX 3.40282347E+38L
9765 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9766 # define MY_DBL_MAX_BUG 1L
9768 # define MY_DBL_MAX_BUG MY_DBL_MAX
9772 # define MY_DBL_MIN DBL_MIN
9773 # else /* XXX guessing! -Allen */
9774 # if DOUBLESIZE >= 8
9775 # define MY_DBL_MIN 2.2250738585072014E-308L
9777 # define MY_DBL_MIN 1.17549435E-38L
9781 if ((intsize == 'q') && (c == 'f') &&
9782 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9784 /* it's going to be short enough that
9785 * long double precision is not needed */
9787 if ((nv <= 0L) && (nv >= -0L))
9788 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9790 /* would use Perl_fp_class as a double-check but not
9791 * functional on IRIX - see perl.h comments */
9793 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9794 /* It's within the range that a double can represent */
9795 #if defined(DBL_MAX) && !defined(DBL_MIN)
9796 if ((nv >= ((long double)1/DBL_MAX)) ||
9797 (nv <= (-(long double)1/DBL_MAX)))
9799 fix_ldbl_sprintf_bug = TRUE;
9802 if (fix_ldbl_sprintf_bug == TRUE) {
9812 # undef MY_DBL_MAX_BUG
9815 #endif /* HAS_LDBL_SPRINTF_BUG */
9817 need += 20; /* fudge factor */
9818 if (PL_efloatsize < need) {
9819 Safefree(PL_efloatbuf);
9820 PL_efloatsize = need + 20; /* more fudge */
9821 Newx(PL_efloatbuf, PL_efloatsize, char);
9822 PL_efloatbuf[0] = '\0';
9825 if ( !(width || left || plus || alt) && fill != '0'
9826 && has_precis && intsize != 'q' ) { /* Shortcuts */
9827 /* See earlier comment about buggy Gconvert when digits,
9829 if ( c == 'g' && precis) {
9830 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9831 /* May return an empty string for digits==0 */
9832 if (*PL_efloatbuf) {
9833 elen = strlen(PL_efloatbuf);
9834 goto float_converted;
9836 } else if ( c == 'f' && !precis) {
9837 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9842 char *ptr = ebuf + sizeof ebuf;
9845 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9846 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9847 if (intsize == 'q') {
9848 /* Copy the one or more characters in a long double
9849 * format before the 'base' ([efgEFG]) character to
9850 * the format string. */
9851 static char const prifldbl[] = PERL_PRIfldbl;
9852 char const *p = prifldbl + sizeof(prifldbl) - 3;
9853 while (p >= prifldbl) { *--ptr = *p--; }
9858 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9863 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9875 /* No taint. Otherwise we are in the strange situation
9876 * where printf() taints but print($float) doesn't.
9878 #if defined(HAS_LONG_DOUBLE)
9879 elen = ((intsize == 'q')
9880 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
9881 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9883 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9887 eptr = PL_efloatbuf;
9895 i = SvCUR(sv) - origlen;
9898 case 'h': *(va_arg(*args, short*)) = i; break;
9899 default: *(va_arg(*args, int*)) = i; break;
9900 case 'l': *(va_arg(*args, long*)) = i; break;
9901 case 'V': *(va_arg(*args, IV*)) = i; break;
9903 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9908 sv_setuv_mg(argsv, (UV)i);
9909 continue; /* not "break" */
9916 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
9917 && ckWARN(WARN_PRINTF))
9919 SV * const msg = sv_newmortal();
9920 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9921 (PL_op->op_type == OP_PRTF) ? "" : "s");
9924 Perl_sv_catpvf(aTHX_ msg,
9925 "\"%%%c\"", c & 0xFF);
9927 Perl_sv_catpvf(aTHX_ msg,
9928 "\"%%\\%03"UVof"\"",
9931 sv_catpvs(msg, "end of string");
9932 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
9935 /* output mangled stuff ... */
9941 /* ... right here, because formatting flags should not apply */
9942 SvGROW(sv, SvCUR(sv) + elen + 1);
9944 Copy(eptr, p, elen, char);
9947 SvCUR_set(sv, p - SvPVX_const(sv));
9949 continue; /* not "break" */
9952 if (is_utf8 != has_utf8) {
9955 sv_utf8_upgrade(sv);
9958 const STRLEN old_elen = elen;
9959 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
9960 sv_utf8_upgrade(nsv);
9961 eptr = SvPVX_const(nsv);
9964 if (width) { /* fudge width (can't fudge elen) */
9965 width += elen - old_elen;
9971 have = esignlen + zeros + elen;
9973 Perl_croak_nocontext(PL_memory_wrap);
9975 need = (have > width ? have : width);
9978 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
9979 Perl_croak_nocontext(PL_memory_wrap);
9980 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9982 if (esignlen && fill == '0') {
9984 for (i = 0; i < (int)esignlen; i++)
9988 memset(p, fill, gap);
9991 if (esignlen && fill != '0') {
9993 for (i = 0; i < (int)esignlen; i++)
9998 for (i = zeros; i; i--)
10002 Copy(eptr, p, elen, char);
10006 memset(p, ' ', gap);
10011 Copy(dotstr, p, dotstrlen, char);
10015 vectorize = FALSE; /* done iterating over vecstr */
10022 SvCUR_set(sv, p - SvPVX_const(sv));
10030 /* =========================================================================
10032 =head1 Cloning an interpreter
10034 All the macros and functions in this section are for the private use of
10035 the main function, perl_clone().
10037 The foo_dup() functions make an exact copy of an existing foo thingy.
10038 During the course of a cloning, a hash table is used to map old addresses
10039 to new addresses. The table is created and manipulated with the
10040 ptr_table_* functions.
10044 ============================================================================*/
10047 #if defined(USE_ITHREADS)
10049 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
10050 #ifndef GpREFCNT_inc
10051 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10055 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
10056 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
10057 If this changes, please unmerge ss_dup. */
10058 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
10059 #define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup(s,t))
10060 #define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
10061 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10062 #define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
10063 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10064 #define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
10065 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10066 #define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
10067 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
10068 #define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
10069 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10070 #define SAVEPV(p) ((p) ? savepv(p) : NULL)
10071 #define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
10073 /* clone a parser */
10076 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
10080 PERL_ARGS_ASSERT_PARSER_DUP;
10085 /* look for it in the table first */
10086 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10090 /* create anew and remember what it is */
10091 Newxz(parser, 1, yy_parser);
10092 ptr_table_store(PL_ptr_table, proto, parser);
10094 parser->yyerrstatus = 0;
10095 parser->yychar = YYEMPTY; /* Cause a token to be read. */
10097 /* XXX these not yet duped */
10098 parser->old_parser = NULL;
10099 parser->stack = NULL;
10101 parser->stack_size = 0;
10102 /* XXX parser->stack->state = 0; */
10104 /* XXX eventually, just Copy() most of the parser struct ? */
10106 parser->lex_brackets = proto->lex_brackets;
10107 parser->lex_casemods = proto->lex_casemods;
10108 parser->lex_brackstack = savepvn(proto->lex_brackstack,
10109 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10110 parser->lex_casestack = savepvn(proto->lex_casestack,
10111 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10112 parser->lex_defer = proto->lex_defer;
10113 parser->lex_dojoin = proto->lex_dojoin;
10114 parser->lex_expect = proto->lex_expect;
10115 parser->lex_formbrack = proto->lex_formbrack;
10116 parser->lex_inpat = proto->lex_inpat;
10117 parser->lex_inwhat = proto->lex_inwhat;
10118 parser->lex_op = proto->lex_op;
10119 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
10120 parser->lex_starts = proto->lex_starts;
10121 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
10122 parser->multi_close = proto->multi_close;
10123 parser->multi_open = proto->multi_open;
10124 parser->multi_start = proto->multi_start;
10125 parser->multi_end = proto->multi_end;
10126 parser->pending_ident = proto->pending_ident;
10127 parser->preambled = proto->preambled;
10128 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
10129 parser->linestr = sv_dup_inc(proto->linestr, param);
10130 parser->expect = proto->expect;
10131 parser->copline = proto->copline;
10132 parser->last_lop_op = proto->last_lop_op;
10133 parser->lex_state = proto->lex_state;
10134 parser->rsfp = fp_dup(proto->rsfp, '<', param);
10135 /* rsfp_filters entries have fake IoDIRP() */
10136 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
10137 parser->in_my = proto->in_my;
10138 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
10139 parser->error_count = proto->error_count;
10142 parser->linestr = sv_dup_inc(proto->linestr, param);
10145 char * const ols = SvPVX(proto->linestr);
10146 char * const ls = SvPVX(parser->linestr);
10148 parser->bufptr = ls + (proto->bufptr >= ols ?
10149 proto->bufptr - ols : 0);
10150 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
10151 proto->oldbufptr - ols : 0);
10152 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10153 proto->oldoldbufptr - ols : 0);
10154 parser->linestart = ls + (proto->linestart >= ols ?
10155 proto->linestart - ols : 0);
10156 parser->last_uni = ls + (proto->last_uni >= ols ?
10157 proto->last_uni - ols : 0);
10158 parser->last_lop = ls + (proto->last_lop >= ols ?
10159 proto->last_lop - ols : 0);
10161 parser->bufend = ls + SvCUR(parser->linestr);
10164 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10168 parser->endwhite = proto->endwhite;
10169 parser->faketokens = proto->faketokens;
10170 parser->lasttoke = proto->lasttoke;
10171 parser->nextwhite = proto->nextwhite;
10172 parser->realtokenstart = proto->realtokenstart;
10173 parser->skipwhite = proto->skipwhite;
10174 parser->thisclose = proto->thisclose;
10175 parser->thismad = proto->thismad;
10176 parser->thisopen = proto->thisopen;
10177 parser->thisstuff = proto->thisstuff;
10178 parser->thistoken = proto->thistoken;
10179 parser->thiswhite = proto->thiswhite;
10181 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10182 parser->curforce = proto->curforce;
10184 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10185 Copy(proto->nexttype, parser->nexttype, 5, I32);
10186 parser->nexttoke = proto->nexttoke;
10192 /* duplicate a file handle */
10195 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
10199 PERL_ARGS_ASSERT_FP_DUP;
10200 PERL_UNUSED_ARG(type);
10203 return (PerlIO*)NULL;
10205 /* look for it in the table first */
10206 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10210 /* create anew and remember what it is */
10211 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
10212 ptr_table_store(PL_ptr_table, fp, ret);
10216 /* duplicate a directory handle */
10219 Perl_dirp_dup(pTHX_ DIR *const dp)
10221 PERL_UNUSED_CONTEXT;
10228 /* duplicate a typeglob */
10231 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
10235 PERL_ARGS_ASSERT_GP_DUP;
10239 /* look for it in the table first */
10240 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10244 /* create anew and remember what it is */
10246 ptr_table_store(PL_ptr_table, gp, ret);
10249 ret->gp_refcnt = 0; /* must be before any other dups! */
10250 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
10251 ret->gp_io = io_dup_inc(gp->gp_io, param);
10252 ret->gp_form = cv_dup_inc(gp->gp_form, param);
10253 ret->gp_av = av_dup_inc(gp->gp_av, param);
10254 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
10255 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10256 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
10257 ret->gp_cvgen = gp->gp_cvgen;
10258 ret->gp_line = gp->gp_line;
10259 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
10263 /* duplicate a chain of magic */
10266 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
10268 MAGIC *mgprev = (MAGIC*)NULL;
10271 PERL_ARGS_ASSERT_MG_DUP;
10274 return (MAGIC*)NULL;
10275 /* look for it in the table first */
10276 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
10280 for (; mg; mg = mg->mg_moremagic) {
10282 Newxz(nmg, 1, MAGIC);
10284 mgprev->mg_moremagic = nmg;
10287 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
10288 nmg->mg_private = mg->mg_private;
10289 nmg->mg_type = mg->mg_type;
10290 nmg->mg_flags = mg->mg_flags;
10291 /* FIXME for plugins
10292 if (mg->mg_type == PERL_MAGIC_qr) {
10293 nmg->mg_obj = (SV*)CALLREGDUPE((REGEXP*)mg->mg_obj, param);
10297 if(mg->mg_type == PERL_MAGIC_backref) {
10298 /* The backref AV has its reference count deliberately bumped by
10300 nmg->mg_obj = SvREFCNT_inc(av_dup_inc((AV*) mg->mg_obj, param));
10303 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
10304 ? sv_dup_inc(mg->mg_obj, param)
10305 : sv_dup(mg->mg_obj, param);
10307 nmg->mg_len = mg->mg_len;
10308 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
10309 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
10310 if (mg->mg_len > 0) {
10311 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
10312 if (mg->mg_type == PERL_MAGIC_overload_table &&
10313 AMT_AMAGIC((AMT*)mg->mg_ptr))
10315 const AMT * const amtp = (AMT*)mg->mg_ptr;
10316 AMT * const namtp = (AMT*)nmg->mg_ptr;
10318 for (i = 1; i < NofAMmeth; i++) {
10319 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
10323 else if (mg->mg_len == HEf_SVKEY)
10324 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
10326 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
10327 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10334 #endif /* USE_ITHREADS */
10336 /* create a new pointer-mapping table */
10339 Perl_ptr_table_new(pTHX)
10342 PERL_UNUSED_CONTEXT;
10344 Newxz(tbl, 1, PTR_TBL_t);
10345 tbl->tbl_max = 511;
10346 tbl->tbl_items = 0;
10347 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
10351 #define PTR_TABLE_HASH(ptr) \
10352 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
10355 we use the PTE_SVSLOT 'reservation' made above, both here (in the
10356 following define) and at call to new_body_inline made below in
10357 Perl_ptr_table_store()
10360 #define del_pte(p) del_body_type(p, PTE_SVSLOT)
10362 /* map an existing pointer using a table */
10364 STATIC PTR_TBL_ENT_t *
10365 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
10367 PTR_TBL_ENT_t *tblent;
10368 const UV hash = PTR_TABLE_HASH(sv);
10370 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
10372 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10373 for (; tblent; tblent = tblent->next) {
10374 if (tblent->oldval == sv)
10381 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
10383 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
10385 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
10386 PERL_UNUSED_CONTEXT;
10388 return tblent ? tblent->newval : NULL;
10391 /* add a new entry to a pointer-mapping table */
10394 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
10396 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
10398 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
10399 PERL_UNUSED_CONTEXT;
10402 tblent->newval = newsv;
10404 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
10406 new_body_inline(tblent, PTE_SVSLOT);
10408 tblent->oldval = oldsv;
10409 tblent->newval = newsv;
10410 tblent->next = tbl->tbl_ary[entry];
10411 tbl->tbl_ary[entry] = tblent;
10413 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
10414 ptr_table_split(tbl);
10418 /* double the hash bucket size of an existing ptr table */
10421 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
10423 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
10424 const UV oldsize = tbl->tbl_max + 1;
10425 UV newsize = oldsize * 2;
10428 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
10429 PERL_UNUSED_CONTEXT;
10431 Renew(ary, newsize, PTR_TBL_ENT_t*);
10432 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10433 tbl->tbl_max = --newsize;
10434 tbl->tbl_ary = ary;
10435 for (i=0; i < oldsize; i++, ary++) {
10436 PTR_TBL_ENT_t **curentp, **entp, *ent;
10439 curentp = ary + oldsize;
10440 for (entp = ary, ent = *ary; ent; ent = *entp) {
10441 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
10443 ent->next = *curentp;
10453 /* remove all the entries from a ptr table */
10456 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
10458 if (tbl && tbl->tbl_items) {
10459 register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
10460 UV riter = tbl->tbl_max;
10463 PTR_TBL_ENT_t *entry = array[riter];
10466 PTR_TBL_ENT_t * const oentry = entry;
10467 entry = entry->next;
10472 tbl->tbl_items = 0;
10476 /* clear and free a ptr table */
10479 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
10484 ptr_table_clear(tbl);
10485 Safefree(tbl->tbl_ary);
10489 #if defined(USE_ITHREADS)
10492 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
10494 PERL_ARGS_ASSERT_RVPV_DUP;
10497 SvRV_set(dstr, SvWEAKREF(sstr)
10498 ? sv_dup(SvRV(sstr), param)
10499 : sv_dup_inc(SvRV(sstr), param));
10502 else if (SvPVX_const(sstr)) {
10503 /* Has something there */
10505 /* Normal PV - clone whole allocated space */
10506 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
10507 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10508 /* Not that normal - actually sstr is copy on write.
10509 But we are a true, independant SV, so: */
10510 SvREADONLY_off(dstr);
10515 /* Special case - not normally malloced for some reason */
10516 if (isGV_with_GP(sstr)) {
10517 /* Don't need to do anything here. */
10519 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
10520 /* A "shared" PV - clone it as "shared" PV */
10522 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
10526 /* Some other special case - random pointer */
10527 SvPV_set(dstr, SvPVX(sstr));
10532 /* Copy the NULL */
10533 SvPV_set(dstr, NULL);
10537 /* duplicate an SV of any type (including AV, HV etc) */
10540 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
10545 PERL_ARGS_ASSERT_SV_DUP;
10549 if (SvTYPE(sstr) == SVTYPEMASK) {
10550 #ifdef DEBUG_LEAKING_SCALARS_ABORT
10555 /* look for it in the table first */
10556 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
10560 if(param->flags & CLONEf_JOIN_IN) {
10561 /** We are joining here so we don't want do clone
10562 something that is bad **/
10563 if (SvTYPE(sstr) == SVt_PVHV) {
10564 const HEK * const hvname = HvNAME_HEK(sstr);
10566 /** don't clone stashes if they already exist **/
10567 return (SV*)gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0);
10571 /* create anew and remember what it is */
10574 #ifdef DEBUG_LEAKING_SCALARS
10575 dstr->sv_debug_optype = sstr->sv_debug_optype;
10576 dstr->sv_debug_line = sstr->sv_debug_line;
10577 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10578 dstr->sv_debug_cloned = 1;
10579 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
10582 ptr_table_store(PL_ptr_table, sstr, dstr);
10585 SvFLAGS(dstr) = SvFLAGS(sstr);
10586 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
10587 SvREFCNT(dstr) = 0; /* must be before any other dups! */
10590 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
10591 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10592 (void*)PL_watch_pvx, SvPVX_const(sstr));
10595 /* don't clone objects whose class has asked us not to */
10596 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10601 switch (SvTYPE(sstr)) {
10603 SvANY(dstr) = NULL;
10606 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
10608 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10610 SvIV_set(dstr, SvIVX(sstr));
10614 SvANY(dstr) = new_XNV();
10615 SvNV_set(dstr, SvNVX(sstr));
10617 /* case SVt_BIND: */
10620 /* These are all the types that need complex bodies allocating. */
10622 const svtype sv_type = SvTYPE(sstr);
10623 const struct body_details *const sv_type_details
10624 = bodies_by_type + sv_type;
10628 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
10632 if (GvUNIQUE((GV*)sstr)) {
10633 NOOP; /* Do sharing here, and fall through */
10646 assert(sv_type_details->body_size);
10647 if (sv_type_details->arena) {
10648 new_body_inline(new_body, sv_type);
10650 = (void*)((char*)new_body - sv_type_details->offset);
10652 new_body = new_NOARENA(sv_type_details);
10656 SvANY(dstr) = new_body;
10659 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
10660 ((char*)SvANY(dstr)) + sv_type_details->offset,
10661 sv_type_details->copy, char);
10663 Copy(((char*)SvANY(sstr)),
10664 ((char*)SvANY(dstr)),
10665 sv_type_details->body_size + sv_type_details->offset, char);
10668 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
10669 && !isGV_with_GP(dstr))
10670 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10672 /* The Copy above means that all the source (unduplicated) pointers
10673 are now in the destination. We can check the flags and the
10674 pointers in either, but it's possible that there's less cache
10675 missing by always going for the destination.
10676 FIXME - instrument and check that assumption */
10677 if (sv_type >= SVt_PVMG) {
10678 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
10679 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
10680 } else if (SvMAGIC(dstr))
10681 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
10683 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
10686 /* The cast silences a GCC warning about unhandled types. */
10687 switch ((int)sv_type) {
10697 /* FIXME for plugins */
10698 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
10701 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
10702 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
10703 LvTARG(dstr) = dstr;
10704 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
10705 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
10707 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
10709 if(isGV_with_GP(sstr)) {
10710 if (GvNAME_HEK(dstr))
10711 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
10712 /* Don't call sv_add_backref here as it's going to be
10713 created as part of the magic cloning of the symbol
10715 /* Danger Will Robinson - GvGP(dstr) isn't initialised
10716 at the point of this comment. */
10717 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
10718 GvGP(dstr) = gp_dup(GvGP(sstr), param);
10719 (void)GpREFCNT_inc(GvGP(dstr));
10721 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10724 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
10725 if (IoOFP(dstr) == IoIFP(sstr))
10726 IoOFP(dstr) = IoIFP(dstr);
10728 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
10729 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
10730 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
10731 /* I have no idea why fake dirp (rsfps)
10732 should be treated differently but otherwise
10733 we end up with leaks -- sky*/
10734 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
10735 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
10736 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
10738 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
10739 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
10740 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
10741 if (IoDIRP(dstr)) {
10742 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
10745 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
10748 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
10749 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
10750 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
10753 if (AvARRAY((AV*)sstr)) {
10754 SV **dst_ary, **src_ary;
10755 SSize_t items = AvFILLp((AV*)sstr) + 1;
10757 src_ary = AvARRAY((AV*)sstr);
10758 Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
10759 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10760 AvARRAY((AV*)dstr) = dst_ary;
10761 AvALLOC((AV*)dstr) = dst_ary;
10762 if (AvREAL((AV*)sstr)) {
10763 while (items-- > 0)
10764 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10767 while (items-- > 0)
10768 *dst_ary++ = sv_dup(*src_ary++, param);
10770 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10771 while (items-- > 0) {
10772 *dst_ary++ = &PL_sv_undef;
10776 AvARRAY((AV*)dstr) = NULL;
10777 AvALLOC((AV*)dstr) = (SV**)NULL;
10781 if (HvARRAY((HV*)sstr)) {
10783 const bool sharekeys = !!HvSHAREKEYS(sstr);
10784 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10785 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10787 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
10788 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
10790 HvARRAY(dstr) = (HE**)darray;
10791 while (i <= sxhv->xhv_max) {
10792 const HE * const source = HvARRAY(sstr)[i];
10793 HvARRAY(dstr)[i] = source
10794 ? he_dup(source, sharekeys, param) : 0;
10799 const struct xpvhv_aux * const saux = HvAUX(sstr);
10800 struct xpvhv_aux * const daux = HvAUX(dstr);
10801 /* This flag isn't copied. */
10802 /* SvOOK_on(hv) attacks the IV flags. */
10803 SvFLAGS(dstr) |= SVf_OOK;
10805 hvname = saux->xhv_name;
10806 daux->xhv_name = hvname ? hek_dup(hvname, param) : hvname;
10808 daux->xhv_riter = saux->xhv_riter;
10809 daux->xhv_eiter = saux->xhv_eiter
10810 ? he_dup(saux->xhv_eiter,
10811 (bool)!!HvSHAREKEYS(sstr), param) : 0;
10812 /* backref array needs refcnt=2; see sv_add_backref */
10813 daux->xhv_backreferences =
10814 saux->xhv_backreferences
10815 ? (AV*) SvREFCNT_inc(
10816 sv_dup_inc((SV*)saux->xhv_backreferences, param))
10819 daux->xhv_mro_meta = saux->xhv_mro_meta
10820 ? mro_meta_dup(saux->xhv_mro_meta, param)
10823 /* Record stashes for possible cloning in Perl_clone(). */
10825 av_push(param->stashes, dstr);
10829 HvARRAY((HV*)dstr) = NULL;
10832 if (!(param->flags & CLONEf_COPY_STACKS)) {
10836 /* NOTE: not refcounted */
10837 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
10839 if (!CvISXSUB(dstr))
10840 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
10842 if (CvCONST(dstr) && CvISXSUB(dstr)) {
10843 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
10844 SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
10845 sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
10847 /* don't dup if copying back - CvGV isn't refcounted, so the
10848 * duped GV may never be freed. A bit of a hack! DAPM */
10849 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
10850 NULL : gv_dup(CvGV(dstr), param) ;
10851 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10853 CvWEAKOUTSIDE(sstr)
10854 ? cv_dup( CvOUTSIDE(dstr), param)
10855 : cv_dup_inc(CvOUTSIDE(dstr), param);
10856 if (!CvISXSUB(dstr))
10857 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
10863 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10869 /* duplicate a context */
10872 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10874 PERL_CONTEXT *ncxs;
10876 PERL_ARGS_ASSERT_CX_DUP;
10879 return (PERL_CONTEXT*)NULL;
10881 /* look for it in the table first */
10882 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10886 /* create anew and remember what it is */
10887 Newx(ncxs, max + 1, PERL_CONTEXT);
10888 ptr_table_store(PL_ptr_table, cxs, ncxs);
10889 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
10892 PERL_CONTEXT * const ncx = &ncxs[ix];
10893 if (CxTYPE(ncx) == CXt_SUBST) {
10894 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10897 switch (CxTYPE(ncx)) {
10899 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0
10900 ? cv_dup_inc(ncx->blk_sub.cv, param)
10901 : cv_dup(ncx->blk_sub.cv,param));
10902 ncx->blk_sub.argarray = (CxHASARGS(ncx)
10903 ? av_dup_inc(ncx->blk_sub.argarray,
10906 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,
10908 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
10909 ncx->blk_sub.oldcomppad);
10912 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
10914 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
10916 case CXt_LOOP_LAZYSV:
10917 ncx->blk_loop.state_u.lazysv.end
10918 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
10919 /* We are taking advantage of av_dup_inc and sv_dup_inc
10920 actually being the same function, and order equivalance of
10922 We can assert the later [but only at run time :-(] */
10923 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
10924 (void *) &ncx->blk_loop.state_u.lazysv.cur);
10926 ncx->blk_loop.state_u.ary.ary
10927 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
10928 case CXt_LOOP_LAZYIV:
10929 case CXt_LOOP_PLAIN:
10930 if (CxPADLOOP(ncx)) {
10931 ncx->blk_loop.oldcomppad
10932 = (PAD*)ptr_table_fetch(PL_ptr_table,
10933 ncx->blk_loop.oldcomppad);
10935 ncx->blk_loop.oldcomppad
10936 = (PAD*)gv_dup((GV*)ncx->blk_loop.oldcomppad, param);
10940 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param);
10941 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
10942 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
10955 /* duplicate a stack info structure */
10958 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
10962 PERL_ARGS_ASSERT_SI_DUP;
10965 return (PERL_SI*)NULL;
10967 /* look for it in the table first */
10968 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10972 /* create anew and remember what it is */
10973 Newxz(nsi, 1, PERL_SI);
10974 ptr_table_store(PL_ptr_table, si, nsi);
10976 nsi->si_stack = av_dup_inc(si->si_stack, param);
10977 nsi->si_cxix = si->si_cxix;
10978 nsi->si_cxmax = si->si_cxmax;
10979 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
10980 nsi->si_type = si->si_type;
10981 nsi->si_prev = si_dup(si->si_prev, param);
10982 nsi->si_next = si_dup(si->si_next, param);
10983 nsi->si_markoff = si->si_markoff;
10988 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10989 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
10990 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10991 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
10992 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10993 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
10994 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10995 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
10996 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10997 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10998 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10999 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
11000 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11001 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11004 #define pv_dup_inc(p) SAVEPV(p)
11005 #define pv_dup(p) SAVEPV(p)
11006 #define svp_dup_inc(p,pp) any_dup(p,pp)
11008 /* map any object to the new equivent - either something in the
11009 * ptr table, or something in the interpreter structure
11013 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
11017 PERL_ARGS_ASSERT_ANY_DUP;
11020 return (void*)NULL;
11022 /* look for it in the table first */
11023 ret = ptr_table_fetch(PL_ptr_table, v);
11027 /* see if it is part of the interpreter structure */
11028 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
11029 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
11037 /* duplicate the save stack */
11040 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
11043 ANY * const ss = proto_perl->Isavestack;
11044 const I32 max = proto_perl->Isavestack_max;
11045 I32 ix = proto_perl->Isavestack_ix;
11058 void (*dptr) (void*);
11059 void (*dxptr) (pTHX_ void*);
11061 PERL_ARGS_ASSERT_SS_DUP;
11063 Newxz(nss, max, ANY);
11066 const I32 type = POPINT(ss,ix);
11067 TOPINT(nss,ix) = type;
11069 case SAVEt_HELEM: /* hash element */
11070 sv = (SV*)POPPTR(ss,ix);
11071 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11073 case SAVEt_ITEM: /* normal string */
11074 case SAVEt_SV: /* scalar reference */
11075 sv = (SV*)POPPTR(ss,ix);
11076 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11079 case SAVEt_MORTALIZESV:
11080 sv = (SV*)POPPTR(ss,ix);
11081 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11083 case SAVEt_SHARED_PVREF: /* char* in shared space */
11084 c = (char*)POPPTR(ss,ix);
11085 TOPPTR(nss,ix) = savesharedpv(c);
11086 ptr = POPPTR(ss,ix);
11087 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11089 case SAVEt_GENERIC_SVREF: /* generic sv */
11090 case SAVEt_SVREF: /* scalar reference */
11091 sv = (SV*)POPPTR(ss,ix);
11092 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11093 ptr = POPPTR(ss,ix);
11094 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11096 case SAVEt_HV: /* hash reference */
11097 case SAVEt_AV: /* array reference */
11098 sv = (SV*) POPPTR(ss,ix);
11099 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11101 case SAVEt_COMPPAD:
11103 sv = (SV*) POPPTR(ss,ix);
11104 TOPPTR(nss,ix) = sv_dup(sv, param);
11106 case SAVEt_INT: /* int reference */
11107 ptr = POPPTR(ss,ix);
11108 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11109 intval = (int)POPINT(ss,ix);
11110 TOPINT(nss,ix) = intval;
11112 case SAVEt_LONG: /* long reference */
11113 ptr = POPPTR(ss,ix);
11114 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11116 case SAVEt_CLEARSV:
11117 longval = (long)POPLONG(ss,ix);
11118 TOPLONG(nss,ix) = longval;
11120 case SAVEt_I32: /* I32 reference */
11121 case SAVEt_I16: /* I16 reference */
11122 case SAVEt_I8: /* I8 reference */
11123 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
11124 ptr = POPPTR(ss,ix);
11125 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11127 TOPINT(nss,ix) = i;
11129 case SAVEt_IV: /* IV reference */
11130 ptr = POPPTR(ss,ix);
11131 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11133 TOPIV(nss,ix) = iv;
11135 case SAVEt_HPTR: /* HV* reference */
11136 case SAVEt_APTR: /* AV* reference */
11137 case SAVEt_SPTR: /* SV* reference */
11138 ptr = POPPTR(ss,ix);
11139 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11140 sv = (SV*)POPPTR(ss,ix);
11141 TOPPTR(nss,ix) = sv_dup(sv, param);
11143 case SAVEt_VPTR: /* random* reference */
11144 ptr = POPPTR(ss,ix);
11145 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11146 ptr = POPPTR(ss,ix);
11147 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11149 case SAVEt_GENERIC_PVREF: /* generic char* */
11150 case SAVEt_PPTR: /* char* reference */
11151 ptr = POPPTR(ss,ix);
11152 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11153 c = (char*)POPPTR(ss,ix);
11154 TOPPTR(nss,ix) = pv_dup(c);
11156 case SAVEt_GP: /* scalar reference */
11157 gp = (GP*)POPPTR(ss,ix);
11158 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
11159 (void)GpREFCNT_inc(gp);
11160 gv = (GV*)POPPTR(ss,ix);
11161 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11164 ptr = POPPTR(ss,ix);
11165 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11166 /* these are assumed to be refcounted properly */
11168 switch (((OP*)ptr)->op_type) {
11170 case OP_LEAVESUBLV:
11174 case OP_LEAVEWRITE:
11175 TOPPTR(nss,ix) = ptr;
11178 (void) OpREFCNT_inc(o);
11182 TOPPTR(nss,ix) = NULL;
11187 TOPPTR(nss,ix) = NULL;
11190 c = (char*)POPPTR(ss,ix);
11191 TOPPTR(nss,ix) = pv_dup_inc(c);
11194 hv = (HV*)POPPTR(ss,ix);
11195 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11196 c = (char*)POPPTR(ss,ix);
11197 TOPPTR(nss,ix) = pv_dup_inc(c);
11199 case SAVEt_STACK_POS: /* Position on Perl stack */
11201 TOPINT(nss,ix) = i;
11203 case SAVEt_DESTRUCTOR:
11204 ptr = POPPTR(ss,ix);
11205 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11206 dptr = POPDPTR(ss,ix);
11207 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11208 any_dup(FPTR2DPTR(void *, dptr),
11211 case SAVEt_DESTRUCTOR_X:
11212 ptr = POPPTR(ss,ix);
11213 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11214 dxptr = POPDXPTR(ss,ix);
11215 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11216 any_dup(FPTR2DPTR(void *, dxptr),
11219 case SAVEt_REGCONTEXT:
11222 TOPINT(nss,ix) = i;
11225 case SAVEt_AELEM: /* array element */
11226 sv = (SV*)POPPTR(ss,ix);
11227 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11229 TOPINT(nss,ix) = i;
11230 av = (AV*)POPPTR(ss,ix);
11231 TOPPTR(nss,ix) = av_dup_inc(av, param);
11234 ptr = POPPTR(ss,ix);
11235 TOPPTR(nss,ix) = ptr;
11239 TOPINT(nss,ix) = i;
11240 ptr = POPPTR(ss,ix);
11243 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
11244 HINTS_REFCNT_UNLOCK;
11246 TOPPTR(nss,ix) = ptr;
11247 if (i & HINT_LOCALIZE_HH) {
11248 hv = (HV*)POPPTR(ss,ix);
11249 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11252 case SAVEt_PADSV_AND_MORTALIZE:
11253 longval = (long)POPLONG(ss,ix);
11254 TOPLONG(nss,ix) = longval;
11255 ptr = POPPTR(ss,ix);
11256 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11257 sv = (SV*)POPPTR(ss,ix);
11258 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11261 ptr = POPPTR(ss,ix);
11262 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11263 longval = (long)POPBOOL(ss,ix);
11264 TOPBOOL(nss,ix) = (bool)longval;
11266 case SAVEt_SET_SVFLAGS:
11268 TOPINT(nss,ix) = i;
11270 TOPINT(nss,ix) = i;
11271 sv = (SV*)POPPTR(ss,ix);
11272 TOPPTR(nss,ix) = sv_dup(sv, param);
11274 case SAVEt_RE_STATE:
11276 const struct re_save_state *const old_state
11277 = (struct re_save_state *)
11278 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11279 struct re_save_state *const new_state
11280 = (struct re_save_state *)
11281 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11283 Copy(old_state, new_state, 1, struct re_save_state);
11284 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
11286 new_state->re_state_bostr
11287 = pv_dup(old_state->re_state_bostr);
11288 new_state->re_state_reginput
11289 = pv_dup(old_state->re_state_reginput);
11290 new_state->re_state_regeol
11291 = pv_dup(old_state->re_state_regeol);
11292 new_state->re_state_regoffs
11293 = (regexp_paren_pair*)
11294 any_dup(old_state->re_state_regoffs, proto_perl);
11295 new_state->re_state_reglastparen
11296 = (U32*) any_dup(old_state->re_state_reglastparen,
11298 new_state->re_state_reglastcloseparen
11299 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
11301 /* XXX This just has to be broken. The old save_re_context
11302 code did SAVEGENERICPV(PL_reg_start_tmp);
11303 PL_reg_start_tmp is char **.
11304 Look above to what the dup code does for
11305 SAVEt_GENERIC_PVREF
11306 It can never have worked.
11307 So this is merely a faithful copy of the exiting bug: */
11308 new_state->re_state_reg_start_tmp
11309 = (char **) pv_dup((char *)
11310 old_state->re_state_reg_start_tmp);
11311 /* I assume that it only ever "worked" because no-one called
11312 (pseudo)fork while the regexp engine had re-entered itself.
11314 #ifdef PERL_OLD_COPY_ON_WRITE
11315 new_state->re_state_nrs
11316 = sv_dup(old_state->re_state_nrs, param);
11318 new_state->re_state_reg_magic
11319 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
11321 new_state->re_state_reg_oldcurpm
11322 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
11324 new_state->re_state_reg_curpm
11325 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
11327 new_state->re_state_reg_oldsaved
11328 = pv_dup(old_state->re_state_reg_oldsaved);
11329 new_state->re_state_reg_poscache
11330 = pv_dup(old_state->re_state_reg_poscache);
11331 new_state->re_state_reg_starttry
11332 = pv_dup(old_state->re_state_reg_starttry);
11335 case SAVEt_COMPILE_WARNINGS:
11336 ptr = POPPTR(ss,ix);
11337 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
11340 ptr = POPPTR(ss,ix);
11341 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
11345 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
11353 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11354 * flag to the result. This is done for each stash before cloning starts,
11355 * so we know which stashes want their objects cloned */
11358 do_mark_cloneable_stash(pTHX_ SV *const sv)
11360 const HEK * const hvname = HvNAME_HEK((HV*)sv);
11362 GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
11363 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11364 if (cloner && GvCV(cloner)) {
11371 mXPUSHs(newSVhek(hvname));
11373 call_sv((SV*)GvCV(cloner), G_SCALAR);
11380 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11388 =for apidoc perl_clone
11390 Create and return a new interpreter by cloning the current one.
11392 perl_clone takes these flags as parameters:
11394 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11395 without it we only clone the data and zero the stacks,
11396 with it we copy the stacks and the new perl interpreter is
11397 ready to run at the exact same point as the previous one.
11398 The pseudo-fork code uses COPY_STACKS while the
11399 threads->create doesn't.
11401 CLONEf_KEEP_PTR_TABLE
11402 perl_clone keeps a ptr_table with the pointer of the old
11403 variable as a key and the new variable as a value,
11404 this allows it to check if something has been cloned and not
11405 clone it again but rather just use the value and increase the
11406 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11407 the ptr_table using the function
11408 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11409 reason to keep it around is if you want to dup some of your own
11410 variable who are outside the graph perl scans, example of this
11411 code is in threads.xs create
11414 This is a win32 thing, it is ignored on unix, it tells perls
11415 win32host code (which is c++) to clone itself, this is needed on
11416 win32 if you want to run two threads at the same time,
11417 if you just want to do some stuff in a separate perl interpreter
11418 and then throw it away and return to the original one,
11419 you don't need to do anything.
11424 /* XXX the above needs expanding by someone who actually understands it ! */
11425 EXTERN_C PerlInterpreter *
11426 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11429 perl_clone(PerlInterpreter *proto_perl, UV flags)
11432 #ifdef PERL_IMPLICIT_SYS
11434 PERL_ARGS_ASSERT_PERL_CLONE;
11436 /* perlhost.h so we need to call into it
11437 to clone the host, CPerlHost should have a c interface, sky */
11439 if (flags & CLONEf_CLONE_HOST) {
11440 return perl_clone_host(proto_perl,flags);
11442 return perl_clone_using(proto_perl, flags,
11444 proto_perl->IMemShared,
11445 proto_perl->IMemParse,
11447 proto_perl->IStdIO,
11451 proto_perl->IProc);
11455 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11456 struct IPerlMem* ipM, struct IPerlMem* ipMS,
11457 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11458 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11459 struct IPerlDir* ipD, struct IPerlSock* ipS,
11460 struct IPerlProc* ipP)
11462 /* XXX many of the string copies here can be optimized if they're
11463 * constants; they need to be allocated as common memory and just
11464 * their pointers copied. */
11467 CLONE_PARAMS clone_params;
11468 CLONE_PARAMS* const param = &clone_params;
11470 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
11472 PERL_ARGS_ASSERT_PERL_CLONE_USING;
11474 /* for each stash, determine whether its objects should be cloned */
11475 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11476 PERL_SET_THX(my_perl);
11479 PoisonNew(my_perl, 1, PerlInterpreter);
11485 PL_savestack_ix = 0;
11486 PL_savestack_max = -1;
11487 PL_sig_pending = 0;
11489 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11490 # else /* !DEBUGGING */
11491 Zero(my_perl, 1, PerlInterpreter);
11492 # endif /* DEBUGGING */
11494 /* host pointers */
11496 PL_MemShared = ipMS;
11497 PL_MemParse = ipMP;
11504 #else /* !PERL_IMPLICIT_SYS */
11506 CLONE_PARAMS clone_params;
11507 CLONE_PARAMS* param = &clone_params;
11508 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
11510 PERL_ARGS_ASSERT_PERL_CLONE;
11512 /* for each stash, determine whether its objects should be cloned */
11513 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11514 PERL_SET_THX(my_perl);
11517 PoisonNew(my_perl, 1, PerlInterpreter);
11523 PL_savestack_ix = 0;
11524 PL_savestack_max = -1;
11525 PL_sig_pending = 0;
11527 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11528 # else /* !DEBUGGING */
11529 Zero(my_perl, 1, PerlInterpreter);
11530 # endif /* DEBUGGING */
11531 #endif /* PERL_IMPLICIT_SYS */
11532 param->flags = flags;
11533 param->proto_perl = proto_perl;
11535 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
11537 PL_body_arenas = NULL;
11538 Zero(&PL_body_roots, 1, PL_body_roots);
11540 PL_nice_chunk = NULL;
11541 PL_nice_chunk_size = 0;
11543 PL_sv_objcount = 0;
11545 PL_sv_arenaroot = NULL;
11547 PL_debug = proto_perl->Idebug;
11549 PL_hash_seed = proto_perl->Ihash_seed;
11550 PL_rehash_seed = proto_perl->Irehash_seed;
11552 #ifdef USE_REENTRANT_API
11553 /* XXX: things like -Dm will segfault here in perlio, but doing
11554 * PERL_SET_CONTEXT(proto_perl);
11555 * breaks too many other things
11557 Perl_reentrant_init(aTHX);
11560 /* create SV map for pointer relocation */
11561 PL_ptr_table = ptr_table_new();
11563 /* initialize these special pointers as early as possible */
11564 SvANY(&PL_sv_undef) = NULL;
11565 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
11566 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
11567 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11569 SvANY(&PL_sv_no) = new_XPVNV();
11570 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
11571 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11572 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11573 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
11574 SvCUR_set(&PL_sv_no, 0);
11575 SvLEN_set(&PL_sv_no, 1);
11576 SvIV_set(&PL_sv_no, 0);
11577 SvNV_set(&PL_sv_no, 0);
11578 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
11580 SvANY(&PL_sv_yes) = new_XPVNV();
11581 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
11582 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11583 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11584 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
11585 SvCUR_set(&PL_sv_yes, 1);
11586 SvLEN_set(&PL_sv_yes, 2);
11587 SvIV_set(&PL_sv_yes, 1);
11588 SvNV_set(&PL_sv_yes, 1);
11589 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11591 /* create (a non-shared!) shared string table */
11592 PL_strtab = newHV();
11593 HvSHAREKEYS_off(PL_strtab);
11594 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11595 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11597 PL_compiling = proto_perl->Icompiling;
11599 /* These two PVs will be free'd special way so must set them same way op.c does */
11600 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11601 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11603 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
11604 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11606 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11607 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
11608 if (PL_compiling.cop_hints_hash) {
11610 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
11611 HINTS_REFCNT_UNLOCK;
11613 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
11614 #ifdef PERL_DEBUG_READONLY_OPS
11619 /* pseudo environmental stuff */
11620 PL_origargc = proto_perl->Iorigargc;
11621 PL_origargv = proto_perl->Iorigargv;
11623 param->stashes = newAV(); /* Setup array of objects to call clone on */
11625 /* Set tainting stuff before PerlIO_debug can possibly get called */
11626 PL_tainting = proto_perl->Itainting;
11627 PL_taint_warn = proto_perl->Itaint_warn;
11629 #ifdef PERLIO_LAYERS
11630 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11631 PerlIO_clone(aTHX_ proto_perl, param);
11634 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
11635 PL_incgv = gv_dup(proto_perl->Iincgv, param);
11636 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
11637 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
11638 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
11639 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
11642 PL_minus_c = proto_perl->Iminus_c;
11643 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
11644 PL_localpatches = proto_perl->Ilocalpatches;
11645 PL_splitstr = proto_perl->Isplitstr;
11646 PL_minus_n = proto_perl->Iminus_n;
11647 PL_minus_p = proto_perl->Iminus_p;
11648 PL_minus_l = proto_perl->Iminus_l;
11649 PL_minus_a = proto_perl->Iminus_a;
11650 PL_minus_E = proto_perl->Iminus_E;
11651 PL_minus_F = proto_perl->Iminus_F;
11652 PL_doswitches = proto_perl->Idoswitches;
11653 PL_dowarn = proto_perl->Idowarn;
11654 PL_doextract = proto_perl->Idoextract;
11655 PL_sawampersand = proto_perl->Isawampersand;
11656 PL_unsafe = proto_perl->Iunsafe;
11657 PL_inplace = SAVEPV(proto_perl->Iinplace);
11658 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
11659 PL_perldb = proto_perl->Iperldb;
11660 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11661 PL_exit_flags = proto_perl->Iexit_flags;
11663 /* magical thingies */
11664 /* XXX time(&PL_basetime) when asked for? */
11665 PL_basetime = proto_perl->Ibasetime;
11666 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
11668 PL_maxsysfd = proto_perl->Imaxsysfd;
11669 PL_statusvalue = proto_perl->Istatusvalue;
11671 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
11673 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
11675 PL_encoding = sv_dup(proto_perl->Iencoding, param);
11677 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
11678 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
11679 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
11682 /* RE engine related */
11683 Zero(&PL_reg_state, 1, struct re_save_state);
11684 PL_reginterp_cnt = 0;
11685 PL_regmatch_slab = NULL;
11687 /* Clone the regex array */
11688 /* ORANGE FIXME for plugins, probably in the SV dup code.
11689 newSViv(PTR2IV(CALLREGDUPE(
11690 INT2PTR(REGEXP *, SvIVX(regex)), param))))
11692 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
11693 PL_regex_pad = AvARRAY(PL_regex_padav);
11695 /* shortcuts to various I/O objects */
11696 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11697 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11698 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11699 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11700 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11701 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
11703 /* shortcuts to regexp stuff */
11704 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
11706 /* shortcuts to misc objects */
11707 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
11709 /* shortcuts to debugging objects */
11710 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
11711 PL_DBline = gv_dup(proto_perl->IDBline, param);
11712 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
11713 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
11714 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
11715 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
11716 PL_dbargs = av_dup(proto_perl->Idbargs, param);
11718 /* symbol tables */
11719 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
11720 PL_curstash = hv_dup(proto_perl->Icurstash, param);
11721 PL_debstash = hv_dup(proto_perl->Idebstash, param);
11722 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
11723 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
11725 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
11726 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
11727 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
11728 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
11729 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
11730 PL_endav = av_dup_inc(proto_perl->Iendav, param);
11731 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
11732 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
11734 PL_sub_generation = proto_perl->Isub_generation;
11735 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
11737 /* funky return mechanisms */
11738 PL_forkprocess = proto_perl->Iforkprocess;
11740 /* subprocess state */
11741 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
11743 /* internal state */
11744 PL_maxo = proto_perl->Imaxo;
11745 if (proto_perl->Iop_mask)
11746 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11749 /* PL_asserting = proto_perl->Iasserting; */
11751 /* current interpreter roots */
11752 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
11754 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
11756 PL_main_start = proto_perl->Imain_start;
11757 PL_eval_root = proto_perl->Ieval_root;
11758 PL_eval_start = proto_perl->Ieval_start;
11760 /* runtime control stuff */
11761 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11763 PL_filemode = proto_perl->Ifilemode;
11764 PL_lastfd = proto_perl->Ilastfd;
11765 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11768 PL_gensym = proto_perl->Igensym;
11769 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11770 PL_laststatval = proto_perl->Ilaststatval;
11771 PL_laststype = proto_perl->Ilaststype;
11774 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11776 /* interpreter atexit processing */
11777 PL_exitlistlen = proto_perl->Iexitlistlen;
11778 if (PL_exitlistlen) {
11779 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11780 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11783 PL_exitlist = (PerlExitListEntry*)NULL;
11785 PL_my_cxt_size = proto_perl->Imy_cxt_size;
11786 if (PL_my_cxt_size) {
11787 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
11788 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
11789 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
11790 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
11791 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
11795 PL_my_cxt_list = (void**)NULL;
11796 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
11797 PL_my_cxt_keys = (const char**)NULL;
11800 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
11801 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
11802 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11804 PL_profiledata = NULL;
11806 PL_compcv = cv_dup(proto_perl->Icompcv, param);
11808 PAD_CLONE_VARS(proto_perl, param);
11810 #ifdef HAVE_INTERP_INTERN
11811 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11814 /* more statics moved here */
11815 PL_generation = proto_perl->Igeneration;
11816 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
11818 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11819 PL_in_clean_all = proto_perl->Iin_clean_all;
11821 PL_uid = proto_perl->Iuid;
11822 PL_euid = proto_perl->Ieuid;
11823 PL_gid = proto_perl->Igid;
11824 PL_egid = proto_perl->Iegid;
11825 PL_nomemok = proto_perl->Inomemok;
11826 PL_an = proto_perl->Ian;
11827 PL_evalseq = proto_perl->Ievalseq;
11828 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11829 PL_origalen = proto_perl->Iorigalen;
11830 #ifdef PERL_USES_PL_PIDSTATUS
11831 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11833 PL_osname = SAVEPV(proto_perl->Iosname);
11834 PL_sighandlerp = proto_perl->Isighandlerp;
11836 PL_runops = proto_perl->Irunops;
11838 PL_parser = parser_dup(proto_perl->Iparser, param);
11840 PL_subline = proto_perl->Isubline;
11841 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
11844 PL_cryptseen = proto_perl->Icryptseen;
11847 PL_hints = proto_perl->Ihints;
11849 PL_amagic_generation = proto_perl->Iamagic_generation;
11851 #ifdef USE_LOCALE_COLLATE
11852 PL_collation_ix = proto_perl->Icollation_ix;
11853 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11854 PL_collation_standard = proto_perl->Icollation_standard;
11855 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11856 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11857 #endif /* USE_LOCALE_COLLATE */
11859 #ifdef USE_LOCALE_NUMERIC
11860 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11861 PL_numeric_standard = proto_perl->Inumeric_standard;
11862 PL_numeric_local = proto_perl->Inumeric_local;
11863 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11864 #endif /* !USE_LOCALE_NUMERIC */
11866 /* utf8 character classes */
11867 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11868 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11869 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11870 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11871 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11872 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11873 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11874 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11875 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11876 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11877 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11878 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11879 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11880 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11881 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11882 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11883 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11884 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11885 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11886 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11888 /* Did the locale setup indicate UTF-8? */
11889 PL_utf8locale = proto_perl->Iutf8locale;
11890 /* Unicode features (see perlrun/-C) */
11891 PL_unicode = proto_perl->Iunicode;
11893 /* Pre-5.8 signals control */
11894 PL_signals = proto_perl->Isignals;
11896 /* times() ticks per second */
11897 PL_clocktick = proto_perl->Iclocktick;
11899 /* Recursion stopper for PerlIO_find_layer */
11900 PL_in_load_module = proto_perl->Iin_load_module;
11902 /* sort() routine */
11903 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
11905 /* Not really needed/useful since the reenrant_retint is "volatile",
11906 * but do it for consistency's sake. */
11907 PL_reentrant_retint = proto_perl->Ireentrant_retint;
11909 /* Hooks to shared SVs and locks. */
11910 PL_sharehook = proto_perl->Isharehook;
11911 PL_lockhook = proto_perl->Ilockhook;
11912 PL_unlockhook = proto_perl->Iunlockhook;
11913 PL_threadhook = proto_perl->Ithreadhook;
11914 PL_destroyhook = proto_perl->Idestroyhook;
11916 #ifdef THREADS_HAVE_PIDS
11917 PL_ppid = proto_perl->Ippid;
11921 PL_last_swash_hv = NULL; /* reinits on demand */
11922 PL_last_swash_klen = 0;
11923 PL_last_swash_key[0]= '\0';
11924 PL_last_swash_tmps = (U8*)NULL;
11925 PL_last_swash_slen = 0;
11927 PL_glob_index = proto_perl->Iglob_index;
11928 PL_srand_called = proto_perl->Isrand_called;
11929 PL_bitcount = NULL; /* reinits on demand */
11931 if (proto_perl->Ipsig_pend) {
11932 Newxz(PL_psig_pend, SIG_SIZE, int);
11935 PL_psig_pend = (int*)NULL;
11938 if (proto_perl->Ipsig_ptr) {
11939 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
11940 Newxz(PL_psig_name, SIG_SIZE, SV*);
11941 for (i = 1; i < SIG_SIZE; i++) {
11942 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11943 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11947 PL_psig_ptr = (SV**)NULL;
11948 PL_psig_name = (SV**)NULL;
11951 /* intrpvar.h stuff */
11953 if (flags & CLONEf_COPY_STACKS) {
11954 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11955 PL_tmps_ix = proto_perl->Itmps_ix;
11956 PL_tmps_max = proto_perl->Itmps_max;
11957 PL_tmps_floor = proto_perl->Itmps_floor;
11958 Newxz(PL_tmps_stack, PL_tmps_max, SV*);
11960 while (i <= PL_tmps_ix) {
11961 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Itmps_stack[i], param);
11965 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11966 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
11967 Newxz(PL_markstack, i, I32);
11968 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
11969 - proto_perl->Imarkstack);
11970 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
11971 - proto_perl->Imarkstack);
11972 Copy(proto_perl->Imarkstack, PL_markstack,
11973 PL_markstack_ptr - PL_markstack + 1, I32);
11975 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11976 * NOTE: unlike the others! */
11977 PL_scopestack_ix = proto_perl->Iscopestack_ix;
11978 PL_scopestack_max = proto_perl->Iscopestack_max;
11979 Newxz(PL_scopestack, PL_scopestack_max, I32);
11980 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
11982 /* NOTE: si_dup() looks at PL_markstack */
11983 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
11985 /* PL_curstack = PL_curstackinfo->si_stack; */
11986 PL_curstack = av_dup(proto_perl->Icurstack, param);
11987 PL_mainstack = av_dup(proto_perl->Imainstack, param);
11989 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11990 PL_stack_base = AvARRAY(PL_curstack);
11991 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
11992 - proto_perl->Istack_base);
11993 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
11995 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11996 * NOTE: unlike the others! */
11997 PL_savestack_ix = proto_perl->Isavestack_ix;
11998 PL_savestack_max = proto_perl->Isavestack_max;
11999 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
12000 PL_savestack = ss_dup(proto_perl, param);
12004 ENTER; /* perl_destruct() wants to LEAVE; */
12006 /* although we're not duplicating the tmps stack, we should still
12007 * add entries for any SVs on the tmps stack that got cloned by a
12008 * non-refcount means (eg a temp in @_); otherwise they will be
12011 for (i = 0; i<= proto_perl->Itmps_ix; i++) {
12012 SV * const nsv = (SV*)ptr_table_fetch(PL_ptr_table,
12013 proto_perl->Itmps_stack[i]);
12014 if (nsv && !SvREFCNT(nsv)) {
12016 PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple(nsv);
12021 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
12022 PL_top_env = &PL_start_env;
12024 PL_op = proto_perl->Iop;
12027 PL_Xpv = (XPV*)NULL;
12028 my_perl->Ina = proto_perl->Ina;
12030 PL_statbuf = proto_perl->Istatbuf;
12031 PL_statcache = proto_perl->Istatcache;
12032 PL_statgv = gv_dup(proto_perl->Istatgv, param);
12033 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
12035 PL_timesbuf = proto_perl->Itimesbuf;
12038 PL_tainted = proto_perl->Itainted;
12039 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
12040 PL_rs = sv_dup_inc(proto_perl->Irs, param);
12041 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
12042 PL_ofs_sv = sv_dup_inc(proto_perl->Iofs_sv, param);
12043 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
12044 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
12045 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
12046 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
12047 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
12049 PL_restartop = proto_perl->Irestartop;
12050 PL_in_eval = proto_perl->Iin_eval;
12051 PL_delaymagic = proto_perl->Idelaymagic;
12052 PL_dirty = proto_perl->Idirty;
12053 PL_localizing = proto_perl->Ilocalizing;
12055 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
12056 PL_hv_fetch_ent_mh = NULL;
12057 PL_modcount = proto_perl->Imodcount;
12058 PL_lastgotoprobe = NULL;
12059 PL_dumpindent = proto_perl->Idumpindent;
12061 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
12062 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
12063 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
12064 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
12065 PL_efloatbuf = NULL; /* reinits on demand */
12066 PL_efloatsize = 0; /* reinits on demand */
12070 PL_screamfirst = NULL;
12071 PL_screamnext = NULL;
12072 PL_maxscream = -1; /* reinits on demand */
12073 PL_lastscream = NULL;
12076 PL_regdummy = proto_perl->Iregdummy;
12077 PL_colorset = 0; /* reinits PL_colors[] */
12078 /*PL_colors[6] = {0,0,0,0,0,0};*/
12082 /* Pluggable optimizer */
12083 PL_peepp = proto_perl->Ipeepp;
12085 PL_stashcache = newHV();
12087 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
12088 proto_perl->Iwatchaddr);
12089 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
12090 if (PL_debug && PL_watchaddr) {
12091 PerlIO_printf(Perl_debug_log,
12092 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
12093 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
12094 PTR2UV(PL_watchok));
12097 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12098 ptr_table_free(PL_ptr_table);
12099 PL_ptr_table = NULL;
12102 /* Call the ->CLONE method, if it exists, for each of the stashes
12103 identified by sv_dup() above.
12105 while(av_len(param->stashes) != -1) {
12106 HV* const stash = (HV*) av_shift(param->stashes);
12107 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12108 if (cloner && GvCV(cloner)) {
12113 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
12115 call_sv((SV*)GvCV(cloner), G_DISCARD);
12121 SvREFCNT_dec(param->stashes);
12123 /* orphaned? eg threads->new inside BEGIN or use */
12124 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
12125 SvREFCNT_inc_simple_void(PL_compcv);
12126 SAVEFREESV(PL_compcv);
12132 #endif /* USE_ITHREADS */
12135 =head1 Unicode Support
12137 =for apidoc sv_recode_to_utf8
12139 The encoding is assumed to be an Encode object, on entry the PV
12140 of the sv is assumed to be octets in that encoding, and the sv
12141 will be converted into Unicode (and UTF-8).
12143 If the sv already is UTF-8 (or if it is not POK), or if the encoding
12144 is not a reference, nothing is done to the sv. If the encoding is not
12145 an C<Encode::XS> Encoding object, bad things will happen.
12146 (See F<lib/encoding.pm> and L<Encode>).
12148 The PV of the sv is returned.
12153 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12157 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
12159 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12173 Passing sv_yes is wrong - it needs to be or'ed set of constants
12174 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12175 remove converted chars from source.
12177 Both will default the value - let them.
12179 XPUSHs(&PL_sv_yes);
12182 call_method("decode", G_SCALAR);
12186 s = SvPV_const(uni, len);
12187 if (s != SvPVX_const(sv)) {
12188 SvGROW(sv, len + 1);
12189 Move(s, SvPVX(sv), len + 1, char);
12190 SvCUR_set(sv, len);
12197 return SvPOKp(sv) ? SvPVX(sv) : NULL;
12201 =for apidoc sv_cat_decode
12203 The encoding is assumed to be an Encode object, the PV of the ssv is
12204 assumed to be octets in that encoding and decoding the input starts
12205 from the position which (PV + *offset) pointed to. The dsv will be
12206 concatenated the decoded UTF-8 string from ssv. Decoding will terminate
12207 when the string tstr appears in decoding output or the input ends on
12208 the PV of the ssv. The value which the offset points will be modified
12209 to the last input position on the ssv.
12211 Returns TRUE if the terminator was found, else returns FALSE.
12216 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12217 SV *ssv, int *offset, char *tstr, int tlen)
12222 PERL_ARGS_ASSERT_SV_CAT_DECODE;
12224 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12235 offsv = newSViv(*offset);
12237 mXPUSHp(tstr, tlen);
12239 call_method("cat_decode", G_SCALAR);
12241 ret = SvTRUE(TOPs);
12242 *offset = SvIV(offsv);
12248 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12253 /* ---------------------------------------------------------------------
12255 * support functions for report_uninit()
12258 /* the maxiumum size of array or hash where we will scan looking
12259 * for the undefined element that triggered the warning */
12261 #define FUV_MAX_SEARCH_SIZE 1000
12263 /* Look for an entry in the hash whose value has the same SV as val;
12264 * If so, return a mortal copy of the key. */
12267 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
12270 register HE **array;
12273 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
12275 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
12276 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
12279 array = HvARRAY(hv);
12281 for (i=HvMAX(hv); i>0; i--) {
12282 register HE *entry;
12283 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
12284 if (HeVAL(entry) != val)
12286 if ( HeVAL(entry) == &PL_sv_undef ||
12287 HeVAL(entry) == &PL_sv_placeholder)
12291 if (HeKLEN(entry) == HEf_SVKEY)
12292 return sv_mortalcopy(HeKEY_sv(entry));
12293 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
12299 /* Look for an entry in the array whose value has the same SV as val;
12300 * If so, return the index, otherwise return -1. */
12303 S_find_array_subscript(pTHX_ AV *av, SV* val)
12307 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
12309 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
12310 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
12313 if (val != &PL_sv_undef) {
12314 SV ** const svp = AvARRAY(av);
12317 for (i=AvFILLp(av); i>=0; i--)
12324 /* S_varname(): return the name of a variable, optionally with a subscript.
12325 * If gv is non-zero, use the name of that global, along with gvtype (one
12326 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
12327 * targ. Depending on the value of the subscript_type flag, return:
12330 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
12331 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
12332 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
12333 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
12336 S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
12337 SV* keyname, I32 aindex, int subscript_type)
12340 SV * const name = sv_newmortal();
12343 buffer[0] = gvtype;
12346 /* as gv_fullname4(), but add literal '^' for $^FOO names */
12348 gv_fullname4(name, gv, buffer, 0);
12350 if ((unsigned int)SvPVX(name)[1] <= 26) {
12352 buffer[1] = SvPVX(name)[1] + 'A' - 1;
12354 /* Swap the 1 unprintable control character for the 2 byte pretty
12355 version - ie substr($name, 1, 1) = $buffer; */
12356 sv_insert(name, 1, 1, buffer, 2);
12360 CV * const cv = find_runcv(NULL);
12364 if (!cv || !CvPADLIST(cv))
12366 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
12367 sv = *av_fetch(av, targ, FALSE);
12368 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
12371 if (subscript_type == FUV_SUBSCRIPT_HASH) {
12372 SV * const sv = newSV(0);
12373 *SvPVX(name) = '$';
12374 Perl_sv_catpvf(aTHX_ name, "{%s}",
12375 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
12378 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
12379 *SvPVX(name) = '$';
12380 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
12382 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
12383 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
12384 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
12392 =for apidoc find_uninit_var
12394 Find the name of the undefined variable (if any) that caused the operator o
12395 to issue a "Use of uninitialized value" warning.
12396 If match is true, only return a name if it's value matches uninit_sv.
12397 So roughly speaking, if a unary operator (such as OP_COS) generates a
12398 warning, then following the direct child of the op may yield an
12399 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
12400 other hand, with OP_ADD there are two branches to follow, so we only print
12401 the variable name if we get an exact match.
12403 The name is returned as a mortal SV.
12405 Assumes that PL_op is the op that originally triggered the error, and that
12406 PL_comppad/PL_curpad points to the currently executing pad.
12412 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
12420 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
12421 uninit_sv == &PL_sv_placeholder)))
12424 switch (obase->op_type) {
12431 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
12432 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
12435 int subscript_type = FUV_SUBSCRIPT_WITHIN;
12437 if (pad) { /* @lex, %lex */
12438 sv = PAD_SVl(obase->op_targ);
12442 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
12443 /* @global, %global */
12444 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
12447 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
12449 else /* @{expr}, %{expr} */
12450 return find_uninit_var(cUNOPx(obase)->op_first,
12454 /* attempt to find a match within the aggregate */
12456 keysv = find_hash_subscript((HV*)sv, uninit_sv);
12458 subscript_type = FUV_SUBSCRIPT_HASH;
12461 index = find_array_subscript((AV*)sv, uninit_sv);
12463 subscript_type = FUV_SUBSCRIPT_ARRAY;
12466 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
12469 return varname(gv, hash ? '%' : '@', obase->op_targ,
12470 keysv, index, subscript_type);
12474 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
12476 return varname(NULL, '$', obase->op_targ,
12477 NULL, 0, FUV_SUBSCRIPT_NONE);
12480 gv = cGVOPx_gv(obase);
12481 if (!gv || (match && GvSV(gv) != uninit_sv))
12483 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
12486 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
12489 av = (AV*)PAD_SV(obase->op_targ);
12490 if (!av || SvRMAGICAL(av))
12492 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12493 if (!svp || *svp != uninit_sv)
12496 return varname(NULL, '$', obase->op_targ,
12497 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12500 gv = cGVOPx_gv(obase);
12506 if (!av || SvRMAGICAL(av))
12508 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12509 if (!svp || *svp != uninit_sv)
12512 return varname(gv, '$', 0,
12513 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12518 o = cUNOPx(obase)->op_first;
12519 if (!o || o->op_type != OP_NULL ||
12520 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
12522 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
12526 if (PL_op == obase)
12527 /* $a[uninit_expr] or $h{uninit_expr} */
12528 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
12531 o = cBINOPx(obase)->op_first;
12532 kid = cBINOPx(obase)->op_last;
12534 /* get the av or hv, and optionally the gv */
12536 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
12537 sv = PAD_SV(o->op_targ);
12539 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
12540 && cUNOPo->op_first->op_type == OP_GV)
12542 gv = cGVOPx_gv(cUNOPo->op_first);
12545 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
12550 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
12551 /* index is constant */
12555 if (obase->op_type == OP_HELEM) {
12556 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
12557 if (!he || HeVAL(he) != uninit_sv)
12561 SV * const * const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
12562 if (!svp || *svp != uninit_sv)
12566 if (obase->op_type == OP_HELEM)
12567 return varname(gv, '%', o->op_targ,
12568 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
12570 return varname(gv, '@', o->op_targ, NULL,
12571 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
12574 /* index is an expression;
12575 * attempt to find a match within the aggregate */
12576 if (obase->op_type == OP_HELEM) {
12577 SV * const keysv = find_hash_subscript((HV*)sv, uninit_sv);
12579 return varname(gv, '%', o->op_targ,
12580 keysv, 0, FUV_SUBSCRIPT_HASH);
12583 const I32 index = find_array_subscript((AV*)sv, uninit_sv);
12585 return varname(gv, '@', o->op_targ,
12586 NULL, index, FUV_SUBSCRIPT_ARRAY);
12591 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
12593 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
12598 /* only examine RHS */
12599 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
12602 o = cUNOPx(obase)->op_first;
12603 if (o->op_type == OP_PUSHMARK)
12606 if (!o->op_sibling) {
12607 /* one-arg version of open is highly magical */
12609 if (o->op_type == OP_GV) { /* open FOO; */
12611 if (match && GvSV(gv) != uninit_sv)
12613 return varname(gv, '$', 0,
12614 NULL, 0, FUV_SUBSCRIPT_NONE);
12616 /* other possibilities not handled are:
12617 * open $x; or open my $x; should return '${*$x}'
12618 * open expr; should return '$'.expr ideally
12624 /* ops where $_ may be an implicit arg */
12628 if ( !(obase->op_flags & OPf_STACKED)) {
12629 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
12630 ? PAD_SVl(obase->op_targ)
12633 sv = sv_newmortal();
12634 sv_setpvn(sv, "$_", 2);
12643 match = 1; /* print etc can return undef on defined args */
12644 /* skip filehandle as it can't produce 'undef' warning */
12645 o = cUNOPx(obase)->op_first;
12646 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
12647 o = o->op_sibling->op_sibling;
12651 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
12653 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
12655 /* the following ops are capable of returning PL_sv_undef even for
12656 * defined arg(s) */
12675 case OP_GETPEERNAME:
12723 case OP_SMARTMATCH:
12732 /* XXX tmp hack: these two may call an XS sub, and currently
12733 XS subs don't have a SUB entry on the context stack, so CV and
12734 pad determination goes wrong, and BAD things happen. So, just
12735 don't try to determine the value under those circumstances.
12736 Need a better fix at dome point. DAPM 11/2007 */
12741 /* def-ness of rval pos() is independent of the def-ness of its arg */
12742 if ( !(obase->op_flags & OPf_MOD))
12747 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
12748 return newSVpvs_flags("${$/}", SVs_TEMP);
12753 if (!(obase->op_flags & OPf_KIDS))
12755 o = cUNOPx(obase)->op_first;
12761 /* if all except one arg are constant, or have no side-effects,
12762 * or are optimized away, then it's unambiguous */
12764 for (kid=o; kid; kid = kid->op_sibling) {
12766 const OPCODE type = kid->op_type;
12767 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
12768 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
12769 || (type == OP_PUSHMARK)
12773 if (o2) { /* more than one found */
12780 return find_uninit_var(o2, uninit_sv, match);
12782 /* scan all args */
12784 sv = find_uninit_var(o, uninit_sv, 1);
12796 =for apidoc report_uninit
12798 Print appropriate "Use of uninitialized variable" warning
12804 Perl_report_uninit(pTHX_ SV* uninit_sv)
12808 SV* varname = NULL;
12810 varname = find_uninit_var(PL_op, uninit_sv,0);
12812 sv_insert(varname, 0, 0, " ", 1);
12814 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12815 varname ? SvPV_nolen_const(varname) : "",
12816 " in ", OP_DESC(PL_op));
12819 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12825 * c-indentation-style: bsd
12826 * c-basic-offset: 4
12827 * indent-tabs-mode: t
12830 * ex: set ts=8 sts=4 sw=4 noet: