3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'I wonder what the Entish is for "yes" and "no",' he thought.
16 * [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
22 * This file contains the code that creates, manipulates and destroys
23 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24 * structure of an SV, so their creation and destruction is handled
25 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26 * level functions (eg. substr, split, join) for each of the types are
38 /* Missing proto on LynxOS */
39 char *gconvert(double, int, int, char *);
42 #ifdef PERL_UTF8_CACHE_ASSERT
43 /* if adding more checks watch out for the following tests:
44 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
45 * lib/utf8.t lib/Unicode/Collate/t/index.t
48 # define ASSERT_UTF8_CACHE(cache) \
49 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
50 assert((cache)[2] <= (cache)[3]); \
51 assert((cache)[3] <= (cache)[1]);} \
54 # define ASSERT_UTF8_CACHE(cache) NOOP
57 #ifdef PERL_OLD_COPY_ON_WRITE
58 #define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
59 #define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
60 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
64 /* ============================================================================
66 =head1 Allocation and deallocation of SVs.
68 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
69 sv, av, hv...) contains type and reference count information, and for
70 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
71 contains fields specific to each type. Some types store all they need
72 in the head, so don't have a body.
74 In all but the most memory-paranoid configuations (ex: PURIFY), heads
75 and bodies are allocated out of arenas, which by default are
76 approximately 4K chunks of memory parcelled up into N heads or bodies.
77 Sv-bodies are allocated by their sv-type, guaranteeing size
78 consistency needed to allocate safely from arrays.
80 For SV-heads, the first slot in each arena is reserved, and holds a
81 link to the next arena, some flags, and a note of the number of slots.
82 Snaked through each arena chain is a linked list of free items; when
83 this becomes empty, an extra arena is allocated and divided up into N
84 items which are threaded into the free list.
86 SV-bodies are similar, but they use arena-sets by default, which
87 separate the link and info from the arena itself, and reclaim the 1st
88 slot in the arena. SV-bodies are further described later.
90 The following global variables are associated with arenas:
92 PL_sv_arenaroot pointer to list of SV arenas
93 PL_sv_root pointer to list of free SV structures
95 PL_body_arenas head of linked-list of body arenas
96 PL_body_roots[] array of pointers to list of free bodies of svtype
97 arrays are indexed by the svtype needed
99 A few special SV heads are not allocated from an arena, but are
100 instead directly created in the interpreter structure, eg PL_sv_undef.
101 The size of arenas can be changed from the default by setting
102 PERL_ARENA_SIZE appropriately at compile time.
104 The SV arena serves the secondary purpose of allowing still-live SVs
105 to be located and destroyed during final cleanup.
107 At the lowest level, the macros new_SV() and del_SV() grab and free
108 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
109 to return the SV to the free list with error checking.) new_SV() calls
110 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
111 SVs in the free list have their SvTYPE field set to all ones.
113 At the time of very final cleanup, sv_free_arenas() is called from
114 perl_destruct() to physically free all the arenas allocated since the
115 start of the interpreter.
117 The function visit() scans the SV arenas list, and calls a specified
118 function for each SV it finds which is still live - ie which has an SvTYPE
119 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
120 following functions (specified as [function that calls visit()] / [function
121 called by visit() for each SV]):
123 sv_report_used() / do_report_used()
124 dump all remaining SVs (debugging aid)
126 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
127 Attempt to free all objects pointed to by RVs,
128 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
129 try to do the same for all objects indirectly
130 referenced by typeglobs too. Called once from
131 perl_destruct(), prior to calling sv_clean_all()
134 sv_clean_all() / do_clean_all()
135 SvREFCNT_dec(sv) each remaining SV, possibly
136 triggering an sv_free(). It also sets the
137 SVf_BREAK flag on the SV to indicate that the
138 refcnt has been artificially lowered, and thus
139 stopping sv_free() from giving spurious warnings
140 about SVs which unexpectedly have a refcnt
141 of zero. called repeatedly from perl_destruct()
142 until there are no SVs left.
144 =head2 Arena allocator API Summary
146 Private API to rest of sv.c
150 new_XIV(), del_XIV(),
151 new_XNV(), del_XNV(),
156 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
160 * ========================================================================= */
163 * "A time to plant, and a time to uproot what was planted..."
167 Perl_offer_nice_chunk(pTHX_ void *const chunk, const U32 chunk_size)
173 PERL_ARGS_ASSERT_OFFER_NICE_CHUNK;
175 new_chunk = (void *)(chunk);
176 new_chunk_size = (chunk_size);
177 if (new_chunk_size > PL_nice_chunk_size) {
178 Safefree(PL_nice_chunk);
179 PL_nice_chunk = (char *) new_chunk;
180 PL_nice_chunk_size = new_chunk_size;
187 # define MEM_LOG_NEW_SV(sv, file, line, func) \
188 Perl_mem_log_new_sv(sv, file, line, func)
189 # define MEM_LOG_DEL_SV(sv, file, line, func) \
190 Perl_mem_log_del_sv(sv, file, line, func)
192 # define MEM_LOG_NEW_SV(sv, file, line, func) NOOP
193 # define MEM_LOG_DEL_SV(sv, file, line, func) NOOP
196 #ifdef DEBUG_LEAKING_SCALARS
197 # define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
198 # define DEBUG_SV_SERIAL(sv) \
199 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n", \
200 PTR2UV(sv), (long)(sv)->sv_debug_serial))
202 # define FREE_SV_DEBUG_FILE(sv)
203 # define DEBUG_SV_SERIAL(sv) NOOP
207 # define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
208 # define SvARENA_CHAIN_SET(sv,val) (sv)->sv_u.svu_rv = MUTABLE_SV((val))
209 /* Whilst I'd love to do this, it seems that things like to check on
211 # define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
213 # define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
214 PoisonNew(&SvREFCNT(sv), 1, U32)
216 # define SvARENA_CHAIN(sv) SvANY(sv)
217 # define SvARENA_CHAIN_SET(sv,val) SvANY(sv) = (void *)(val)
218 # define POSION_SV_HEAD(sv)
221 /* Mark an SV head as unused, and add to free list.
223 * If SVf_BREAK is set, skip adding it to the free list, as this SV had
224 * its refcount artificially decremented during global destruction, so
225 * there may be dangling pointers to it. The last thing we want in that
226 * case is for it to be reused. */
228 #define plant_SV(p) \
230 const U32 old_flags = SvFLAGS(p); \
231 MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__); \
232 DEBUG_SV_SERIAL(p); \
233 FREE_SV_DEBUG_FILE(p); \
235 SvFLAGS(p) = SVTYPEMASK; \
236 if (!(old_flags & SVf_BREAK)) { \
237 SvARENA_CHAIN_SET(p, PL_sv_root); \
243 #define uproot_SV(p) \
246 PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p)); \
251 /* make some more SVs by adding another arena */
260 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
261 PL_nice_chunk = NULL;
262 PL_nice_chunk_size = 0;
265 char *chunk; /* must use New here to match call to */
266 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
267 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
273 /* new_SV(): return a new, empty SV head */
275 #ifdef DEBUG_LEAKING_SCALARS
276 /* provide a real function for a debugger to play with */
278 S_new_SV(pTHX_ const char *file, int line, const char *func)
285 sv = S_more_sv(aTHX);
289 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
290 sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
296 sv->sv_debug_inpad = 0;
297 sv->sv_debug_cloned = 0;
298 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
300 sv->sv_debug_serial = PL_sv_serial++;
302 MEM_LOG_NEW_SV(sv, file, line, func);
303 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
304 PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
308 # define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
316 (p) = S_more_sv(aTHX); \
320 MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__); \
325 /* del_SV(): return an empty SV head to the free list */
338 S_del_sv(pTHX_ SV *p)
342 PERL_ARGS_ASSERT_DEL_SV;
347 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
348 const SV * const sv = sva + 1;
349 const SV * const svend = &sva[SvREFCNT(sva)];
350 if (p >= sv && p < svend) {
356 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
357 "Attempt to free non-arena SV: 0x%"UVxf
358 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
365 #else /* ! DEBUGGING */
367 #define del_SV(p) plant_SV(p)
369 #endif /* DEBUGGING */
373 =head1 SV Manipulation Functions
375 =for apidoc sv_add_arena
377 Given a chunk of memory, link it to the head of the list of arenas,
378 and split it into a list of free SVs.
384 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
387 SV *const sva = MUTABLE_SV(ptr);
391 PERL_ARGS_ASSERT_SV_ADD_ARENA;
393 /* The first SV in an arena isn't an SV. */
394 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
395 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
396 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
398 PL_sv_arenaroot = sva;
399 PL_sv_root = sva + 1;
401 svend = &sva[SvREFCNT(sva) - 1];
404 SvARENA_CHAIN_SET(sv, (sv + 1));
408 /* Must always set typemask because it's always checked in on cleanup
409 when the arenas are walked looking for objects. */
410 SvFLAGS(sv) = SVTYPEMASK;
413 SvARENA_CHAIN_SET(sv, 0);
417 SvFLAGS(sv) = SVTYPEMASK;
420 /* visit(): call the named function for each non-free SV in the arenas
421 * whose flags field matches the flags/mask args. */
424 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
430 PERL_ARGS_ASSERT_VISIT;
432 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
433 register const SV * const svend = &sva[SvREFCNT(sva)];
435 for (sv = sva + 1; sv < svend; ++sv) {
436 if (SvTYPE(sv) != SVTYPEMASK
437 && (sv->sv_flags & mask) == flags
450 /* called by sv_report_used() for each live SV */
453 do_report_used(pTHX_ SV *const sv)
455 if (SvTYPE(sv) != SVTYPEMASK) {
456 PerlIO_printf(Perl_debug_log, "****\n");
463 =for apidoc sv_report_used
465 Dump the contents of all SVs not yet freed. (Debugging aid).
471 Perl_sv_report_used(pTHX)
474 visit(do_report_used, 0, 0);
480 /* called by sv_clean_objs() for each live SV */
483 do_clean_objs(pTHX_ SV *const ref)
488 SV * const target = SvRV(ref);
489 if (SvOBJECT(target)) {
490 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
491 if (SvWEAKREF(ref)) {
492 sv_del_backref(target, ref);
498 SvREFCNT_dec(target);
503 /* XXX Might want to check arrays, etc. */
506 /* called by sv_clean_objs() for each live SV */
508 #ifndef DISABLE_DESTRUCTOR_KLUDGE
510 do_clean_named_objs(pTHX_ SV *const sv)
513 assert(SvTYPE(sv) == SVt_PVGV);
514 assert(isGV_with_GP(sv));
517 #ifdef PERL_DONT_CREATE_GVSV
520 SvOBJECT(GvSV(sv))) ||
521 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
522 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
523 /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
524 (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
525 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
527 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
528 SvFLAGS(sv) |= SVf_BREAK;
536 =for apidoc sv_clean_objs
538 Attempt to destroy all objects not yet freed
544 Perl_sv_clean_objs(pTHX)
547 PL_in_clean_objs = TRUE;
548 visit(do_clean_objs, SVf_ROK, SVf_ROK);
549 #ifndef DISABLE_DESTRUCTOR_KLUDGE
550 /* some barnacles may yet remain, clinging to typeglobs */
551 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
553 PL_in_clean_objs = FALSE;
556 /* called by sv_clean_all() for each live SV */
559 do_clean_all(pTHX_ SV *const sv)
562 if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
563 /* don't clean pid table and strtab */
566 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
567 SvFLAGS(sv) |= SVf_BREAK;
572 =for apidoc sv_clean_all
574 Decrement the refcnt of each remaining SV, possibly triggering a
575 cleanup. This function may have to be called multiple times to free
576 SVs which are in complex self-referential hierarchies.
582 Perl_sv_clean_all(pTHX)
586 PL_in_clean_all = TRUE;
587 cleaned = visit(do_clean_all, 0,0);
588 PL_in_clean_all = FALSE;
593 ARENASETS: a meta-arena implementation which separates arena-info
594 into struct arena_set, which contains an array of struct
595 arena_descs, each holding info for a single arena. By separating
596 the meta-info from the arena, we recover the 1st slot, formerly
597 borrowed for list management. The arena_set is about the size of an
598 arena, avoiding the needless malloc overhead of a naive linked-list.
600 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
601 memory in the last arena-set (1/2 on average). In trade, we get
602 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
603 smaller types). The recovery of the wasted space allows use of
604 small arenas for large, rare body types, by changing array* fields
605 in body_details_by_type[] below.
608 char *arena; /* the raw storage, allocated aligned */
609 size_t size; /* its size ~4k typ */
610 svtype utype; /* bodytype stored in arena */
615 /* Get the maximum number of elements in set[] such that struct arena_set
616 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
617 therefore likely to be 1 aligned memory page. */
619 #define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
620 - 2 * sizeof(int)) / sizeof (struct arena_desc))
623 struct arena_set* next;
624 unsigned int set_size; /* ie ARENAS_PER_SET */
625 unsigned int curr; /* index of next available arena-desc */
626 struct arena_desc set[ARENAS_PER_SET];
630 =for apidoc sv_free_arenas
632 Deallocate the memory used by all arenas. Note that all the individual SV
633 heads and bodies within the arenas must already have been freed.
638 Perl_sv_free_arenas(pTHX)
645 /* Free arenas here, but be careful about fake ones. (We assume
646 contiguity of the fake ones with the corresponding real ones.) */
648 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
649 svanext = MUTABLE_SV(SvANY(sva));
650 while (svanext && SvFAKE(svanext))
651 svanext = MUTABLE_SV(SvANY(svanext));
658 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
661 struct arena_set *current = aroot;
664 assert(aroot->set[i].arena);
665 Safefree(aroot->set[i].arena);
673 i = PERL_ARENA_ROOTS_SIZE;
675 PL_body_roots[i] = 0;
677 Safefree(PL_nice_chunk);
678 PL_nice_chunk = NULL;
679 PL_nice_chunk_size = 0;
685 Here are mid-level routines that manage the allocation of bodies out
686 of the various arenas. There are 5 kinds of arenas:
688 1. SV-head arenas, which are discussed and handled above
689 2. regular body arenas
690 3. arenas for reduced-size bodies
693 Arena types 2 & 3 are chained by body-type off an array of
694 arena-root pointers, which is indexed by svtype. Some of the
695 larger/less used body types are malloced singly, since a large
696 unused block of them is wasteful. Also, several svtypes dont have
697 bodies; the data fits into the sv-head itself. The arena-root
698 pointer thus has a few unused root-pointers (which may be hijacked
699 later for arena types 4,5)
701 3 differs from 2 as an optimization; some body types have several
702 unused fields in the front of the structure (which are kept in-place
703 for consistency). These bodies can be allocated in smaller chunks,
704 because the leading fields arent accessed. Pointers to such bodies
705 are decremented to point at the unused 'ghost' memory, knowing that
706 the pointers are used with offsets to the real memory.
708 HE, HEK arenas are managed separately, with separate code, but may
709 be merge-able later..
712 /* get_arena(size): this creates custom-sized arenas
713 TBD: export properly for hv.c: S_more_he().
716 Perl_get_arena(pTHX_ const size_t arena_size, const svtype bodytype)
719 struct arena_desc* adesc;
720 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
723 /* shouldnt need this
724 if (!arena_size) arena_size = PERL_ARENA_SIZE;
727 /* may need new arena-set to hold new arena */
728 if (!aroot || aroot->curr >= aroot->set_size) {
729 struct arena_set *newroot;
730 Newxz(newroot, 1, struct arena_set);
731 newroot->set_size = ARENAS_PER_SET;
732 newroot->next = aroot;
734 PL_body_arenas = (void *) newroot;
735 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
738 /* ok, now have arena-set with at least 1 empty/available arena-desc */
739 curr = aroot->curr++;
740 adesc = &(aroot->set[curr]);
741 assert(!adesc->arena);
743 Newx(adesc->arena, arena_size, char);
744 adesc->size = arena_size;
745 adesc->utype = bodytype;
746 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
747 curr, (void*)adesc->arena, (UV)arena_size));
753 /* return a thing to the free list */
755 #define del_body(thing, root) \
757 void ** const thing_copy = (void **)thing;\
758 *thing_copy = *root; \
759 *root = (void*)thing_copy; \
764 =head1 SV-Body Allocation
766 Allocation of SV-bodies is similar to SV-heads, differing as follows;
767 the allocation mechanism is used for many body types, so is somewhat
768 more complicated, it uses arena-sets, and has no need for still-live
771 At the outermost level, (new|del)_X*V macros return bodies of the
772 appropriate type. These macros call either (new|del)_body_type or
773 (new|del)_body_allocated macro pairs, depending on specifics of the
774 type. Most body types use the former pair, the latter pair is used to
775 allocate body types with "ghost fields".
777 "ghost fields" are fields that are unused in certain types, and
778 consequently don't need to actually exist. They are declared because
779 they're part of a "base type", which allows use of functions as
780 methods. The simplest examples are AVs and HVs, 2 aggregate types
781 which don't use the fields which support SCALAR semantics.
783 For these types, the arenas are carved up into appropriately sized
784 chunks, we thus avoid wasted memory for those unaccessed members.
785 When bodies are allocated, we adjust the pointer back in memory by the
786 size of the part not allocated, so it's as if we allocated the full
787 structure. (But things will all go boom if you write to the part that
788 is "not there", because you'll be overwriting the last members of the
789 preceding structure in memory.)
791 We calculate the correction using the STRUCT_OFFSET macro on the first
792 member present. If the allocated structure is smaller (no initial NV
793 actually allocated) then the net effect is to subtract the size of the NV
794 from the pointer, to return a new pointer as if an initial NV were actually
795 allocated. (We were using structures named *_allocated for this, but
796 this turned out to be a subtle bug, because a structure without an NV
797 could have a lower alignment constraint, but the compiler is allowed to
798 optimised accesses based on the alignment constraint of the actual pointer
799 to the full structure, for example, using a single 64 bit load instruction
800 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
802 This is the same trick as was used for NV and IV bodies. Ironically it
803 doesn't need to be used for NV bodies any more, because NV is now at
804 the start of the structure. IV bodies don't need it either, because
805 they are no longer allocated.
807 In turn, the new_body_* allocators call S_new_body(), which invokes
808 new_body_inline macro, which takes a lock, and takes a body off the
809 linked list at PL_body_roots[sv_type], calling S_more_bodies() if
810 necessary to refresh an empty list. Then the lock is released, and
811 the body is returned.
813 S_more_bodies calls get_arena(), and carves it up into an array of N
814 bodies, which it strings into a linked list. It looks up arena-size
815 and body-size from the body_details table described below, thus
816 supporting the multiple body-types.
818 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
819 the (new|del)_X*V macros are mapped directly to malloc/free.
825 For each sv-type, struct body_details bodies_by_type[] carries
826 parameters which control these aspects of SV handling:
828 Arena_size determines whether arenas are used for this body type, and if
829 so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
830 zero, forcing individual mallocs and frees.
832 Body_size determines how big a body is, and therefore how many fit into
833 each arena. Offset carries the body-pointer adjustment needed for
834 "ghost fields", and is used in *_allocated macros.
836 But its main purpose is to parameterize info needed in
837 Perl_sv_upgrade(). The info here dramatically simplifies the function
838 vs the implementation in 5.8.8, making it table-driven. All fields
839 are used for this, except for arena_size.
841 For the sv-types that have no bodies, arenas are not used, so those
842 PL_body_roots[sv_type] are unused, and can be overloaded. In
843 something of a special case, SVt_NULL is borrowed for HE arenas;
844 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
845 bodies_by_type[SVt_NULL] slot is not used, as the table is not
850 struct body_details {
851 U8 body_size; /* Size to allocate */
852 U8 copy; /* Size of structure to copy (may be shorter) */
854 unsigned int type : 4; /* We have space for a sanity check. */
855 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
856 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
857 unsigned int arena : 1; /* Allocated from an arena */
858 size_t arena_size; /* Size of arena to allocate */
866 /* With -DPURFIY we allocate everything directly, and don't use arenas.
867 This seems a rather elegant way to simplify some of the code below. */
868 #define HASARENA FALSE
870 #define HASARENA TRUE
872 #define NOARENA FALSE
874 /* Size the arenas to exactly fit a given number of bodies. A count
875 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
876 simplifying the default. If count > 0, the arena is sized to fit
877 only that many bodies, allowing arenas to be used for large, rare
878 bodies (XPVFM, XPVIO) without undue waste. The arena size is
879 limited by PERL_ARENA_SIZE, so we can safely oversize the
882 #define FIT_ARENA0(body_size) \
883 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
884 #define FIT_ARENAn(count,body_size) \
885 ( count * body_size <= PERL_ARENA_SIZE) \
886 ? count * body_size \
887 : FIT_ARENA0 (body_size)
888 #define FIT_ARENA(count,body_size) \
890 ? FIT_ARENAn (count, body_size) \
891 : FIT_ARENA0 (body_size)
893 /* Calculate the length to copy. Specifically work out the length less any
894 final padding the compiler needed to add. See the comment in sv_upgrade
895 for why copying the padding proved to be a bug. */
897 #define copy_length(type, last_member) \
898 STRUCT_OFFSET(type, last_member) \
899 + sizeof (((type*)SvANY((const SV *)0))->last_member)
901 static const struct body_details bodies_by_type[] = {
902 { sizeof(HE), 0, 0, SVt_NULL,
903 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
905 /* The bind placeholder pretends to be an RV for now.
906 Also it's marked as "can't upgrade" to stop anyone using it before it's
908 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
910 /* IVs are in the head, so the allocation size is 0. */
912 sizeof(IV), /* This is used to copy out the IV body. */
913 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
914 NOARENA /* IVS don't need an arena */, 0
917 /* 8 bytes on most ILP32 with IEEE doubles */
918 { sizeof(NV), sizeof(NV),
919 STRUCT_OFFSET(XPVNV, xnv_u),
920 SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
922 /* 8 bytes on most ILP32 with IEEE doubles */
924 copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
925 + STRUCT_OFFSET(XPV, xpv_cur),
926 SVt_PV, FALSE, NONV, HASARENA,
927 FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
929 #if 2 *PTRSIZE <= IVSIZE
932 copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
933 + STRUCT_OFFSET(XPV, xpv_cur),
934 SVt_PVIV, FALSE, NONV, HASARENA,
935 FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
939 copy_length(XPVIV, xiv_u),
941 SVt_PVIV, FALSE, NONV, HASARENA,
942 FIT_ARENA(0, sizeof(XPVIV)) },
945 #if (2 *PTRSIZE <= IVSIZE) && (2 *PTRSIZE <= NVSIZE)
948 copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
949 + STRUCT_OFFSET(XPV, xpv_cur),
950 SVt_PVNV, FALSE, HADNV, HASARENA,
951 FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
954 { sizeof(XPVNV), copy_length(XPVNV, xnv_u), 0, SVt_PVNV, FALSE, HADNV,
955 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
959 { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
960 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
966 SVt_REGEXP, FALSE, NONV, HASARENA,
967 FIT_ARENA(0, sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur))
971 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
972 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
975 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
976 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
979 copy_length(XPVAV, xav_alloc),
981 SVt_PVAV, TRUE, NONV, HASARENA,
982 FIT_ARENA(0, sizeof(XPVAV)) },
985 copy_length(XPVHV, xiv_u),
987 SVt_PVHV, TRUE, NONV, HASARENA,
988 FIT_ARENA(0, sizeof(XPVHV)) },
994 SVt_PVCV, TRUE, NONV, HASARENA,
995 FIT_ARENA(0, sizeof(XPVCV)) },
1000 SVt_PVFM, TRUE, NONV, NOARENA,
1001 FIT_ARENA(20, sizeof(XPVFM)) },
1003 /* XPVIO is 84 bytes, fits 48x */
1007 SVt_PVIO, TRUE, NONV, HASARENA,
1008 FIT_ARENA(24, sizeof(XPVIO)) },
1011 #define new_body_allocated(sv_type) \
1012 (void *)((char *)S_new_body(aTHX_ sv_type) \
1013 - bodies_by_type[sv_type].offset)
1015 #define del_body_allocated(p, sv_type) \
1016 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
1019 #define my_safemalloc(s) (void*)safemalloc(s)
1020 #define my_safecalloc(s) (void*)safecalloc(s, 1)
1021 #define my_safefree(p) safefree((char*)p)
1025 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1026 #define del_XNV(p) my_safefree(p)
1028 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1029 #define del_XPVNV(p) my_safefree(p)
1031 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1032 #define del_XPVAV(p) my_safefree(p)
1034 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1035 #define del_XPVHV(p) my_safefree(p)
1037 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1038 #define del_XPVMG(p) my_safefree(p)
1040 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1041 #define del_XPVGV(p) my_safefree(p)
1045 #define new_XNV() new_body_allocated(SVt_NV)
1046 #define del_XNV(p) del_body_allocated(p, SVt_NV)
1048 #define new_XPVNV() new_body_allocated(SVt_PVNV)
1049 #define del_XPVNV(p) del_body_allocated(p, SVt_PVNV)
1051 #define new_XPVAV() new_body_allocated(SVt_PVAV)
1052 #define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
1054 #define new_XPVHV() new_body_allocated(SVt_PVHV)
1055 #define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
1057 #define new_XPVMG() new_body_allocated(SVt_PVMG)
1058 #define del_XPVMG(p) del_body_allocated(p, SVt_PVMG)
1060 #define new_XPVGV() new_body_allocated(SVt_PVGV)
1061 #define del_XPVGV(p) del_body_allocated(p, SVt_PVGV)
1065 /* no arena for you! */
1067 #define new_NOARENA(details) \
1068 my_safemalloc((details)->body_size + (details)->offset)
1069 #define new_NOARENAZ(details) \
1070 my_safecalloc((details)->body_size + (details)->offset)
1073 S_more_bodies (pTHX_ const svtype sv_type)
1076 void ** const root = &PL_body_roots[sv_type];
1077 const struct body_details * const bdp = &bodies_by_type[sv_type];
1078 const size_t body_size = bdp->body_size;
1081 const size_t arena_size = Perl_malloc_good_size(bdp->arena_size);
1082 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1083 static bool done_sanity_check;
1085 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1086 * variables like done_sanity_check. */
1087 if (!done_sanity_check) {
1088 unsigned int i = SVt_LAST;
1090 done_sanity_check = TRUE;
1093 assert (bodies_by_type[i].type == i);
1097 assert(bdp->arena_size);
1099 start = (char*) Perl_get_arena(aTHX_ arena_size, sv_type);
1101 end = start + arena_size - 2 * body_size;
1103 /* computed count doesnt reflect the 1st slot reservation */
1104 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1105 DEBUG_m(PerlIO_printf(Perl_debug_log,
1106 "arena %p end %p arena-size %d (from %d) type %d "
1108 (void*)start, (void*)end, (int)arena_size,
1109 (int)bdp->arena_size, sv_type, (int)body_size,
1110 (int)arena_size / (int)body_size));
1112 DEBUG_m(PerlIO_printf(Perl_debug_log,
1113 "arena %p end %p arena-size %d type %d size %d ct %d\n",
1114 (void*)start, (void*)end,
1115 (int)bdp->arena_size, sv_type, (int)body_size,
1116 (int)bdp->arena_size / (int)body_size));
1118 *root = (void *)start;
1120 while (start <= end) {
1121 char * const next = start + body_size;
1122 *(void**) start = (void *)next;
1125 *(void **)start = 0;
1130 /* grab a new thing from the free list, allocating more if necessary.
1131 The inline version is used for speed in hot routines, and the
1132 function using it serves the rest (unless PURIFY).
1134 #define new_body_inline(xpv, sv_type) \
1136 void ** const r3wt = &PL_body_roots[sv_type]; \
1137 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1138 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
1139 *(r3wt) = *(void**)(xpv); \
1145 S_new_body(pTHX_ const svtype sv_type)
1149 new_body_inline(xpv, sv_type);
1155 static const struct body_details fake_rv =
1156 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1159 =for apidoc sv_upgrade
1161 Upgrade an SV to a more complex form. Generally adds a new body type to the
1162 SV, then copies across as much information as possible from the old body.
1163 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1169 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1174 const svtype old_type = SvTYPE(sv);
1175 const struct body_details *new_type_details;
1176 const struct body_details *old_type_details
1177 = bodies_by_type + old_type;
1178 SV *referant = NULL;
1180 PERL_ARGS_ASSERT_SV_UPGRADE;
1182 if (old_type == new_type)
1185 /* This clause was purposefully added ahead of the early return above to
1186 the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1187 inference by Nick I-S that it would fix other troublesome cases. See
1188 changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1190 Given that shared hash key scalars are no longer PVIV, but PV, there is
1191 no longer need to unshare so as to free up the IVX slot for its proper
1192 purpose. So it's safe to move the early return earlier. */
1194 if (new_type != SVt_PV && SvIsCOW(sv)) {
1195 sv_force_normal_flags(sv, 0);
1198 old_body = SvANY(sv);
1200 /* Copying structures onto other structures that have been neatly zeroed
1201 has a subtle gotcha. Consider XPVMG
1203 +------+------+------+------+------+-------+-------+
1204 | NV | CUR | LEN | IV | MAGIC | STASH |
1205 +------+------+------+------+------+-------+-------+
1206 0 4 8 12 16 20 24 28
1208 where NVs are aligned to 8 bytes, so that sizeof that structure is
1209 actually 32 bytes long, with 4 bytes of padding at the end:
1211 +------+------+------+------+------+-------+-------+------+
1212 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1213 +------+------+------+------+------+-------+-------+------+
1214 0 4 8 12 16 20 24 28 32
1216 so what happens if you allocate memory for this structure:
1218 +------+------+------+------+------+-------+-------+------+------+...
1219 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1220 +------+------+------+------+------+-------+-------+------+------+...
1221 0 4 8 12 16 20 24 28 32 36
1223 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1224 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1225 started out as zero once, but it's quite possible that it isn't. So now,
1226 rather than a nicely zeroed GP, you have it pointing somewhere random.
1229 (In fact, GP ends up pointing at a previous GP structure, because the
1230 principle cause of the padding in XPVMG getting garbage is a copy of
1231 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1232 this happens to be moot because XPVGV has been re-ordered, with GP
1233 no longer after STASH)
1235 So we are careful and work out the size of used parts of all the
1243 referant = SvRV(sv);
1244 old_type_details = &fake_rv;
1245 if (new_type == SVt_NV)
1246 new_type = SVt_PVNV;
1248 if (new_type < SVt_PVIV) {
1249 new_type = (new_type == SVt_NV)
1250 ? SVt_PVNV : SVt_PVIV;
1255 if (new_type < SVt_PVNV) {
1256 new_type = SVt_PVNV;
1260 assert(new_type > SVt_PV);
1261 assert(SVt_IV < SVt_PV);
1262 assert(SVt_NV < SVt_PV);
1269 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1270 there's no way that it can be safely upgraded, because perl.c
1271 expects to Safefree(SvANY(PL_mess_sv)) */
1272 assert(sv != PL_mess_sv);
1273 /* This flag bit is used to mean other things in other scalar types.
1274 Given that it only has meaning inside the pad, it shouldn't be set
1275 on anything that can get upgraded. */
1276 assert(!SvPAD_TYPED(sv));
1279 if (old_type_details->cant_upgrade)
1280 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1281 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1284 if (old_type > new_type)
1285 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1286 (int)old_type, (int)new_type);
1288 new_type_details = bodies_by_type + new_type;
1290 SvFLAGS(sv) &= ~SVTYPEMASK;
1291 SvFLAGS(sv) |= new_type;
1293 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1294 the return statements above will have triggered. */
1295 assert (new_type != SVt_NULL);
1298 assert(old_type == SVt_NULL);
1299 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1303 assert(old_type == SVt_NULL);
1304 SvANY(sv) = new_XNV();
1309 assert(new_type_details->body_size);
1312 assert(new_type_details->arena);
1313 assert(new_type_details->arena_size);
1314 /* This points to the start of the allocated area. */
1315 new_body_inline(new_body, new_type);
1316 Zero(new_body, new_type_details->body_size, char);
1317 new_body = ((char *)new_body) - new_type_details->offset;
1319 /* We always allocated the full length item with PURIFY. To do this
1320 we fake things so that arena is false for all 16 types.. */
1321 new_body = new_NOARENAZ(new_type_details);
1323 SvANY(sv) = new_body;
1324 if (new_type == SVt_PVAV) {
1328 if (old_type_details->body_size) {
1331 /* It will have been zeroed when the new body was allocated.
1332 Lets not write to it, in case it confuses a write-back
1338 #ifndef NODEFAULT_SHAREKEYS
1339 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1341 HvMAX(sv) = 7; /* (start with 8 buckets) */
1342 if (old_type_details->body_size) {
1345 /* It will have been zeroed when the new body was allocated.
1346 Lets not write to it, in case it confuses a write-back
1351 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1352 The target created by newSVrv also is, and it can have magic.
1353 However, it never has SvPVX set.
1355 if (old_type == SVt_IV) {
1357 } else if (old_type >= SVt_PV) {
1358 assert(SvPVX_const(sv) == 0);
1361 if (old_type >= SVt_PVMG) {
1362 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1363 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1365 sv->sv_u.svu_array = NULL; /* or svu_hash */
1371 /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1372 sv_force_normal_flags(sv) is called. */
1375 /* XXX Is this still needed? Was it ever needed? Surely as there is
1376 no route from NV to PVIV, NOK can never be true */
1377 assert(!SvNOKp(sv));
1388 assert(new_type_details->body_size);
1389 /* We always allocated the full length item with PURIFY. To do this
1390 we fake things so that arena is false for all 16 types.. */
1391 if(new_type_details->arena) {
1392 /* This points to the start of the allocated area. */
1393 new_body_inline(new_body, new_type);
1394 Zero(new_body, new_type_details->body_size, char);
1395 new_body = ((char *)new_body) - new_type_details->offset;
1397 new_body = new_NOARENAZ(new_type_details);
1399 SvANY(sv) = new_body;
1401 if (old_type_details->copy) {
1402 /* There is now the potential for an upgrade from something without
1403 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1404 int offset = old_type_details->offset;
1405 int length = old_type_details->copy;
1407 if (new_type_details->offset > old_type_details->offset) {
1408 const int difference
1409 = new_type_details->offset - old_type_details->offset;
1410 offset += difference;
1411 length -= difference;
1413 assert (length >= 0);
1415 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1419 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1420 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1421 * correct 0.0 for us. Otherwise, if the old body didn't have an
1422 * NV slot, but the new one does, then we need to initialise the
1423 * freshly created NV slot with whatever the correct bit pattern is
1425 if (old_type_details->zero_nv && !new_type_details->zero_nv
1426 && !isGV_with_GP(sv))
1430 if (new_type == SVt_PVIO) {
1431 IO * const io = MUTABLE_IO(sv);
1432 GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1435 /* Clear the stashcache because a new IO could overrule a package
1437 hv_clear(PL_stashcache);
1439 SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1440 IoPAGE_LEN(sv) = 60;
1442 if (old_type < SVt_PV) {
1443 /* referant will be NULL unless the old type was SVt_IV emulating
1445 sv->sv_u.svu_rv = referant;
1449 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1450 (unsigned long)new_type);
1453 if (old_type > SVt_IV) {
1455 my_safefree(old_body);
1457 /* Note that there is an assumption that all bodies of types that
1458 can be upgraded came from arenas. Only the more complex non-
1459 upgradable types are allowed to be directly malloc()ed. */
1460 assert(old_type_details->arena);
1461 del_body((void*)((char*)old_body + old_type_details->offset),
1462 &PL_body_roots[old_type]);
1468 =for apidoc sv_backoff
1470 Remove any string offset. You should normally use the C<SvOOK_off> macro
1477 Perl_sv_backoff(pTHX_ register SV *const sv)
1480 const char * const s = SvPVX_const(sv);
1482 PERL_ARGS_ASSERT_SV_BACKOFF;
1483 PERL_UNUSED_CONTEXT;
1486 assert(SvTYPE(sv) != SVt_PVHV);
1487 assert(SvTYPE(sv) != SVt_PVAV);
1489 SvOOK_offset(sv, delta);
1491 SvLEN_set(sv, SvLEN(sv) + delta);
1492 SvPV_set(sv, SvPVX(sv) - delta);
1493 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1494 SvFLAGS(sv) &= ~SVf_OOK;
1501 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1502 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1503 Use the C<SvGROW> wrapper instead.
1509 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1513 PERL_ARGS_ASSERT_SV_GROW;
1515 if (PL_madskills && newlen >= 0x100000) {
1516 PerlIO_printf(Perl_debug_log,
1517 "Allocation too large: %"UVxf"\n", (UV)newlen);
1519 #ifdef HAS_64K_LIMIT
1520 if (newlen >= 0x10000) {
1521 PerlIO_printf(Perl_debug_log,
1522 "Allocation too large: %"UVxf"\n", (UV)newlen);
1525 #endif /* HAS_64K_LIMIT */
1528 if (SvTYPE(sv) < SVt_PV) {
1529 sv_upgrade(sv, SVt_PV);
1530 s = SvPVX_mutable(sv);
1532 else if (SvOOK(sv)) { /* pv is offset? */
1534 s = SvPVX_mutable(sv);
1535 if (newlen > SvLEN(sv))
1536 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1537 #ifdef HAS_64K_LIMIT
1538 if (newlen >= 0x10000)
1543 s = SvPVX_mutable(sv);
1545 if (newlen > SvLEN(sv)) { /* need more room? */
1546 #ifndef Perl_safesysmalloc_size
1547 newlen = PERL_STRLEN_ROUNDUP(newlen);
1549 if (SvLEN(sv) && s) {
1550 s = (char*)saferealloc(s, newlen);
1553 s = (char*)safemalloc(newlen);
1554 if (SvPVX_const(sv) && SvCUR(sv)) {
1555 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1559 #ifdef Perl_safesysmalloc_size
1560 /* Do this here, do it once, do it right, and then we will never get
1561 called back into sv_grow() unless there really is some growing
1563 SvLEN_set(sv, Perl_safesysmalloc_size(s));
1565 SvLEN_set(sv, newlen);
1572 =for apidoc sv_setiv
1574 Copies an integer into the given SV, upgrading first if necessary.
1575 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1581 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1585 PERL_ARGS_ASSERT_SV_SETIV;
1587 SV_CHECK_THINKFIRST_COW_DROP(sv);
1588 switch (SvTYPE(sv)) {
1591 sv_upgrade(sv, SVt_IV);
1594 sv_upgrade(sv, SVt_PVIV);
1598 if (!isGV_with_GP(sv))
1605 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1609 (void)SvIOK_only(sv); /* validate number */
1615 =for apidoc sv_setiv_mg
1617 Like C<sv_setiv>, but also handles 'set' magic.
1623 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1625 PERL_ARGS_ASSERT_SV_SETIV_MG;
1632 =for apidoc sv_setuv
1634 Copies an unsigned integer into the given SV, upgrading first if necessary.
1635 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1641 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1643 PERL_ARGS_ASSERT_SV_SETUV;
1645 /* With these two if statements:
1646 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1649 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1651 If you wish to remove them, please benchmark to see what the effect is
1653 if (u <= (UV)IV_MAX) {
1654 sv_setiv(sv, (IV)u);
1663 =for apidoc sv_setuv_mg
1665 Like C<sv_setuv>, but also handles 'set' magic.
1671 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1673 PERL_ARGS_ASSERT_SV_SETUV_MG;
1680 =for apidoc sv_setnv
1682 Copies a double into the given SV, upgrading first if necessary.
1683 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1689 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1693 PERL_ARGS_ASSERT_SV_SETNV;
1695 SV_CHECK_THINKFIRST_COW_DROP(sv);
1696 switch (SvTYPE(sv)) {
1699 sv_upgrade(sv, SVt_NV);
1703 sv_upgrade(sv, SVt_PVNV);
1707 if (!isGV_with_GP(sv))
1714 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1719 (void)SvNOK_only(sv); /* validate number */
1724 =for apidoc sv_setnv_mg
1726 Like C<sv_setnv>, but also handles 'set' magic.
1732 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1734 PERL_ARGS_ASSERT_SV_SETNV_MG;
1740 /* Print an "isn't numeric" warning, using a cleaned-up,
1741 * printable version of the offending string
1745 S_not_a_number(pTHX_ SV *const sv)
1752 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1755 dsv = newSVpvs_flags("", SVs_TEMP);
1756 pv = sv_uni_display(dsv, sv, 10, 0);
1759 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1760 /* each *s can expand to 4 chars + "...\0",
1761 i.e. need room for 8 chars */
1763 const char *s = SvPVX_const(sv);
1764 const char * const end = s + SvCUR(sv);
1765 for ( ; s < end && d < limit; s++ ) {
1767 if (ch & 128 && !isPRINT_LC(ch)) {
1776 else if (ch == '\r') {
1780 else if (ch == '\f') {
1784 else if (ch == '\\') {
1788 else if (ch == '\0') {
1792 else if (isPRINT_LC(ch))
1809 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1810 "Argument \"%s\" isn't numeric in %s", pv,
1813 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1814 "Argument \"%s\" isn't numeric", pv);
1818 =for apidoc looks_like_number
1820 Test if the content of an SV looks like a number (or is a number).
1821 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1822 non-numeric warning), even if your atof() doesn't grok them.
1828 Perl_looks_like_number(pTHX_ SV *const sv)
1830 register const char *sbegin;
1833 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1836 sbegin = SvPVX_const(sv);
1839 else if (SvPOKp(sv))
1840 sbegin = SvPV_const(sv, len);
1842 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1843 return grok_number(sbegin, len, NULL);
1847 S_glob_2number(pTHX_ GV * const gv)
1849 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1850 SV *const buffer = sv_newmortal();
1852 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1854 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1857 gv_efullname3(buffer, gv, "*");
1858 SvFLAGS(gv) |= wasfake;
1860 /* We know that all GVs stringify to something that is not-a-number,
1861 so no need to test that. */
1862 if (ckWARN(WARN_NUMERIC))
1863 not_a_number(buffer);
1864 /* We just want something true to return, so that S_sv_2iuv_common
1865 can tail call us and return true. */
1869 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1870 until proven guilty, assume that things are not that bad... */
1875 As 64 bit platforms often have an NV that doesn't preserve all bits of
1876 an IV (an assumption perl has been based on to date) it becomes necessary
1877 to remove the assumption that the NV always carries enough precision to
1878 recreate the IV whenever needed, and that the NV is the canonical form.
1879 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1880 precision as a side effect of conversion (which would lead to insanity
1881 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1882 1) to distinguish between IV/UV/NV slots that have cached a valid
1883 conversion where precision was lost and IV/UV/NV slots that have a
1884 valid conversion which has lost no precision
1885 2) to ensure that if a numeric conversion to one form is requested that
1886 would lose precision, the precise conversion (or differently
1887 imprecise conversion) is also performed and cached, to prevent
1888 requests for different numeric formats on the same SV causing
1889 lossy conversion chains. (lossless conversion chains are perfectly
1894 SvIOKp is true if the IV slot contains a valid value
1895 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1896 SvNOKp is true if the NV slot contains a valid value
1897 SvNOK is true only if the NV value is accurate
1900 while converting from PV to NV, check to see if converting that NV to an
1901 IV(or UV) would lose accuracy over a direct conversion from PV to
1902 IV(or UV). If it would, cache both conversions, return NV, but mark
1903 SV as IOK NOKp (ie not NOK).
1905 While converting from PV to IV, check to see if converting that IV to an
1906 NV would lose accuracy over a direct conversion from PV to NV. If it
1907 would, cache both conversions, flag similarly.
1909 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1910 correctly because if IV & NV were set NV *always* overruled.
1911 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1912 changes - now IV and NV together means that the two are interchangeable:
1913 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1915 The benefit of this is that operations such as pp_add know that if
1916 SvIOK is true for both left and right operands, then integer addition
1917 can be used instead of floating point (for cases where the result won't
1918 overflow). Before, floating point was always used, which could lead to
1919 loss of precision compared with integer addition.
1921 * making IV and NV equal status should make maths accurate on 64 bit
1923 * may speed up maths somewhat if pp_add and friends start to use
1924 integers when possible instead of fp. (Hopefully the overhead in
1925 looking for SvIOK and checking for overflow will not outweigh the
1926 fp to integer speedup)
1927 * will slow down integer operations (callers of SvIV) on "inaccurate"
1928 values, as the change from SvIOK to SvIOKp will cause a call into
1929 sv_2iv each time rather than a macro access direct to the IV slot
1930 * should speed up number->string conversion on integers as IV is
1931 favoured when IV and NV are equally accurate
1933 ####################################################################
1934 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1935 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1936 On the other hand, SvUOK is true iff UV.
1937 ####################################################################
1939 Your mileage will vary depending your CPU's relative fp to integer
1943 #ifndef NV_PRESERVES_UV
1944 # define IS_NUMBER_UNDERFLOW_IV 1
1945 # define IS_NUMBER_UNDERFLOW_UV 2
1946 # define IS_NUMBER_IV_AND_UV 2
1947 # define IS_NUMBER_OVERFLOW_IV 4
1948 # define IS_NUMBER_OVERFLOW_UV 5
1950 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1952 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1954 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1962 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1964 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));
1965 if (SvNVX(sv) < (NV)IV_MIN) {
1966 (void)SvIOKp_on(sv);
1968 SvIV_set(sv, IV_MIN);
1969 return IS_NUMBER_UNDERFLOW_IV;
1971 if (SvNVX(sv) > (NV)UV_MAX) {
1972 (void)SvIOKp_on(sv);
1975 SvUV_set(sv, UV_MAX);
1976 return IS_NUMBER_OVERFLOW_UV;
1978 (void)SvIOKp_on(sv);
1980 /* Can't use strtol etc to convert this string. (See truth table in
1982 if (SvNVX(sv) <= (UV)IV_MAX) {
1983 SvIV_set(sv, I_V(SvNVX(sv)));
1984 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1985 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1987 /* Integer is imprecise. NOK, IOKp */
1989 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1992 SvUV_set(sv, U_V(SvNVX(sv)));
1993 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1994 if (SvUVX(sv) == UV_MAX) {
1995 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1996 possibly be preserved by NV. Hence, it must be overflow.
1998 return IS_NUMBER_OVERFLOW_UV;
2000 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2002 /* Integer is imprecise. NOK, IOKp */
2004 return IS_NUMBER_OVERFLOW_IV;
2006 #endif /* !NV_PRESERVES_UV*/
2009 S_sv_2iuv_common(pTHX_ SV *const sv)
2013 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2016 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2017 * without also getting a cached IV/UV from it at the same time
2018 * (ie PV->NV conversion should detect loss of accuracy and cache
2019 * IV or UV at same time to avoid this. */
2020 /* IV-over-UV optimisation - choose to cache IV if possible */
2022 if (SvTYPE(sv) == SVt_NV)
2023 sv_upgrade(sv, SVt_PVNV);
2025 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2026 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2027 certainly cast into the IV range at IV_MAX, whereas the correct
2028 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2030 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2031 if (Perl_isnan(SvNVX(sv))) {
2037 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2038 SvIV_set(sv, I_V(SvNVX(sv)));
2039 if (SvNVX(sv) == (NV) SvIVX(sv)
2040 #ifndef NV_PRESERVES_UV
2041 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2042 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2043 /* Don't flag it as "accurately an integer" if the number
2044 came from a (by definition imprecise) NV operation, and
2045 we're outside the range of NV integer precision */
2049 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2051 /* scalar has trailing garbage, eg "42a" */
2053 DEBUG_c(PerlIO_printf(Perl_debug_log,
2054 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2060 /* IV not precise. No need to convert from PV, as NV
2061 conversion would already have cached IV if it detected
2062 that PV->IV would be better than PV->NV->IV
2063 flags already correct - don't set public IOK. */
2064 DEBUG_c(PerlIO_printf(Perl_debug_log,
2065 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2070 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2071 but the cast (NV)IV_MIN rounds to a the value less (more
2072 negative) than IV_MIN which happens to be equal to SvNVX ??
2073 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2074 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2075 (NV)UVX == NVX are both true, but the values differ. :-(
2076 Hopefully for 2s complement IV_MIN is something like
2077 0x8000000000000000 which will be exact. NWC */
2080 SvUV_set(sv, U_V(SvNVX(sv)));
2082 (SvNVX(sv) == (NV) SvUVX(sv))
2083 #ifndef NV_PRESERVES_UV
2084 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2085 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2086 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2087 /* Don't flag it as "accurately an integer" if the number
2088 came from a (by definition imprecise) NV operation, and
2089 we're outside the range of NV integer precision */
2095 DEBUG_c(PerlIO_printf(Perl_debug_log,
2096 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2102 else if (SvPOKp(sv) && SvLEN(sv)) {
2104 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2105 /* We want to avoid a possible problem when we cache an IV/ a UV which
2106 may be later translated to an NV, and the resulting NV is not
2107 the same as the direct translation of the initial string
2108 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2109 be careful to ensure that the value with the .456 is around if the
2110 NV value is requested in the future).
2112 This means that if we cache such an IV/a UV, we need to cache the
2113 NV as well. Moreover, we trade speed for space, and do not
2114 cache the NV if we are sure it's not needed.
2117 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2118 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2119 == IS_NUMBER_IN_UV) {
2120 /* It's definitely an integer, only upgrade to PVIV */
2121 if (SvTYPE(sv) < SVt_PVIV)
2122 sv_upgrade(sv, SVt_PVIV);
2124 } else if (SvTYPE(sv) < SVt_PVNV)
2125 sv_upgrade(sv, SVt_PVNV);
2127 /* If NVs preserve UVs then we only use the UV value if we know that
2128 we aren't going to call atof() below. If NVs don't preserve UVs
2129 then the value returned may have more precision than atof() will
2130 return, even though value isn't perfectly accurate. */
2131 if ((numtype & (IS_NUMBER_IN_UV
2132 #ifdef NV_PRESERVES_UV
2135 )) == IS_NUMBER_IN_UV) {
2136 /* This won't turn off the public IOK flag if it was set above */
2137 (void)SvIOKp_on(sv);
2139 if (!(numtype & IS_NUMBER_NEG)) {
2141 if (value <= (UV)IV_MAX) {
2142 SvIV_set(sv, (IV)value);
2144 /* it didn't overflow, and it was positive. */
2145 SvUV_set(sv, value);
2149 /* 2s complement assumption */
2150 if (value <= (UV)IV_MIN) {
2151 SvIV_set(sv, -(IV)value);
2153 /* Too negative for an IV. This is a double upgrade, but
2154 I'm assuming it will be rare. */
2155 if (SvTYPE(sv) < SVt_PVNV)
2156 sv_upgrade(sv, SVt_PVNV);
2160 SvNV_set(sv, -(NV)value);
2161 SvIV_set(sv, IV_MIN);
2165 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2166 will be in the previous block to set the IV slot, and the next
2167 block to set the NV slot. So no else here. */
2169 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2170 != IS_NUMBER_IN_UV) {
2171 /* It wasn't an (integer that doesn't overflow the UV). */
2172 SvNV_set(sv, Atof(SvPVX_const(sv)));
2174 if (! numtype && ckWARN(WARN_NUMERIC))
2177 #if defined(USE_LONG_DOUBLE)
2178 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2179 PTR2UV(sv), SvNVX(sv)));
2181 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2182 PTR2UV(sv), SvNVX(sv)));
2185 #ifdef NV_PRESERVES_UV
2186 (void)SvIOKp_on(sv);
2188 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2189 SvIV_set(sv, I_V(SvNVX(sv)));
2190 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2193 NOOP; /* Integer is imprecise. NOK, IOKp */
2195 /* UV will not work better than IV */
2197 if (SvNVX(sv) > (NV)UV_MAX) {
2199 /* Integer is inaccurate. NOK, IOKp, is UV */
2200 SvUV_set(sv, UV_MAX);
2202 SvUV_set(sv, U_V(SvNVX(sv)));
2203 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2204 NV preservse UV so can do correct comparison. */
2205 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2208 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
2213 #else /* NV_PRESERVES_UV */
2214 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2215 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2216 /* The IV/UV slot will have been set from value returned by
2217 grok_number above. The NV slot has just been set using
2220 assert (SvIOKp(sv));
2222 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2223 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2224 /* Small enough to preserve all bits. */
2225 (void)SvIOKp_on(sv);
2227 SvIV_set(sv, I_V(SvNVX(sv)));
2228 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2230 /* Assumption: first non-preserved integer is < IV_MAX,
2231 this NV is in the preserved range, therefore: */
2232 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2234 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);
2238 0 0 already failed to read UV.
2239 0 1 already failed to read UV.
2240 1 0 you won't get here in this case. IV/UV
2241 slot set, public IOK, Atof() unneeded.
2242 1 1 already read UV.
2243 so there's no point in sv_2iuv_non_preserve() attempting
2244 to use atol, strtol, strtoul etc. */
2246 sv_2iuv_non_preserve (sv, numtype);
2248 sv_2iuv_non_preserve (sv);
2252 #endif /* NV_PRESERVES_UV */
2253 /* It might be more code efficient to go through the entire logic above
2254 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2255 gets complex and potentially buggy, so more programmer efficient
2256 to do it this way, by turning off the public flags: */
2258 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2262 if (isGV_with_GP(sv))
2263 return glob_2number(MUTABLE_GV(sv));
2265 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2266 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2269 if (SvTYPE(sv) < SVt_IV)
2270 /* Typically the caller expects that sv_any is not NULL now. */
2271 sv_upgrade(sv, SVt_IV);
2272 /* Return 0 from the caller. */
2279 =for apidoc sv_2iv_flags
2281 Return the integer value of an SV, doing any necessary string
2282 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2283 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2289 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2294 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2295 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2296 cache IVs just in case. In practice it seems that they never
2297 actually anywhere accessible by user Perl code, let alone get used
2298 in anything other than a string context. */
2299 if (flags & SV_GMAGIC)
2304 return I_V(SvNVX(sv));
2306 if (SvPOKp(sv) && SvLEN(sv)) {
2309 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2311 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2312 == IS_NUMBER_IN_UV) {
2313 /* It's definitely an integer */
2314 if (numtype & IS_NUMBER_NEG) {
2315 if (value < (UV)IV_MIN)
2318 if (value < (UV)IV_MAX)
2323 if (ckWARN(WARN_NUMERIC))
2326 return I_V(Atof(SvPVX_const(sv)));
2331 assert(SvTYPE(sv) >= SVt_PVMG);
2332 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2333 } else if (SvTHINKFIRST(sv)) {
2338 if (flags & SV_SKIP_OVERLOAD)
2340 tmpstr=AMG_CALLun(sv,numer);
2341 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2342 return SvIV(tmpstr);
2345 return PTR2IV(SvRV(sv));
2348 sv_force_normal_flags(sv, 0);
2350 if (SvREADONLY(sv) && !SvOK(sv)) {
2351 if (ckWARN(WARN_UNINITIALIZED))
2357 if (S_sv_2iuv_common(aTHX_ sv))
2360 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2361 PTR2UV(sv),SvIVX(sv)));
2362 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2366 =for apidoc sv_2uv_flags
2368 Return the unsigned integer value of an SV, doing any necessary string
2369 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2370 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2376 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2381 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2382 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2383 cache IVs just in case. */
2384 if (flags & SV_GMAGIC)
2389 return U_V(SvNVX(sv));
2390 if (SvPOKp(sv) && SvLEN(sv)) {
2393 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2395 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2396 == IS_NUMBER_IN_UV) {
2397 /* It's definitely an integer */
2398 if (!(numtype & IS_NUMBER_NEG))
2402 if (ckWARN(WARN_NUMERIC))
2405 return U_V(Atof(SvPVX_const(sv)));
2410 assert(SvTYPE(sv) >= SVt_PVMG);
2411 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2412 } else if (SvTHINKFIRST(sv)) {
2417 if (flags & SV_SKIP_OVERLOAD)
2419 tmpstr = AMG_CALLun(sv,numer);
2420 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2421 return SvUV(tmpstr);
2424 return PTR2UV(SvRV(sv));
2427 sv_force_normal_flags(sv, 0);
2429 if (SvREADONLY(sv) && !SvOK(sv)) {
2430 if (ckWARN(WARN_UNINITIALIZED))
2436 if (S_sv_2iuv_common(aTHX_ sv))
2440 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2441 PTR2UV(sv),SvUVX(sv)));
2442 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2448 Return the num value of an SV, doing any necessary string or integer
2449 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2450 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2456 Perl_sv_2nv_flags(pTHX_ register SV *const sv, const I32 flags)
2461 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2462 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2463 cache IVs just in case. */
2464 if (flags & SV_GMAGIC)
2468 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2469 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2470 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2472 return Atof(SvPVX_const(sv));
2476 return (NV)SvUVX(sv);
2478 return (NV)SvIVX(sv);
2483 assert(SvTYPE(sv) >= SVt_PVMG);
2484 /* This falls through to the report_uninit near the end of the
2486 } else if (SvTHINKFIRST(sv)) {
2491 if (flags & SV_SKIP_OVERLOAD)
2493 tmpstr = AMG_CALLun(sv,numer);
2494 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2495 return SvNV(tmpstr);
2498 return PTR2NV(SvRV(sv));
2501 sv_force_normal_flags(sv, 0);
2503 if (SvREADONLY(sv) && !SvOK(sv)) {
2504 if (ckWARN(WARN_UNINITIALIZED))
2509 if (SvTYPE(sv) < SVt_NV) {
2510 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2511 sv_upgrade(sv, SVt_NV);
2512 #ifdef USE_LONG_DOUBLE
2514 STORE_NUMERIC_LOCAL_SET_STANDARD();
2515 PerlIO_printf(Perl_debug_log,
2516 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2517 PTR2UV(sv), SvNVX(sv));
2518 RESTORE_NUMERIC_LOCAL();
2522 STORE_NUMERIC_LOCAL_SET_STANDARD();
2523 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2524 PTR2UV(sv), SvNVX(sv));
2525 RESTORE_NUMERIC_LOCAL();
2529 else if (SvTYPE(sv) < SVt_PVNV)
2530 sv_upgrade(sv, SVt_PVNV);
2535 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2536 #ifdef NV_PRESERVES_UV
2542 /* Only set the public NV OK flag if this NV preserves the IV */
2543 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2545 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2546 : (SvIVX(sv) == I_V(SvNVX(sv))))
2552 else if (SvPOKp(sv) && SvLEN(sv)) {
2554 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2555 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2557 #ifdef NV_PRESERVES_UV
2558 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2559 == IS_NUMBER_IN_UV) {
2560 /* It's definitely an integer */
2561 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2563 SvNV_set(sv, Atof(SvPVX_const(sv)));
2569 SvNV_set(sv, Atof(SvPVX_const(sv)));
2570 /* Only set the public NV OK flag if this NV preserves the value in
2571 the PV at least as well as an IV/UV would.
2572 Not sure how to do this 100% reliably. */
2573 /* if that shift count is out of range then Configure's test is
2574 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2576 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2577 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2578 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2579 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2580 /* Can't use strtol etc to convert this string, so don't try.
2581 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2584 /* value has been set. It may not be precise. */
2585 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2586 /* 2s complement assumption for (UV)IV_MIN */
2587 SvNOK_on(sv); /* Integer is too negative. */
2592 if (numtype & IS_NUMBER_NEG) {
2593 SvIV_set(sv, -(IV)value);
2594 } else if (value <= (UV)IV_MAX) {
2595 SvIV_set(sv, (IV)value);
2597 SvUV_set(sv, value);
2601 if (numtype & IS_NUMBER_NOT_INT) {
2602 /* I believe that even if the original PV had decimals,
2603 they are lost beyond the limit of the FP precision.
2604 However, neither is canonical, so both only get p
2605 flags. NWC, 2000/11/25 */
2606 /* Both already have p flags, so do nothing */
2608 const NV nv = SvNVX(sv);
2609 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2610 if (SvIVX(sv) == I_V(nv)) {
2613 /* It had no "." so it must be integer. */
2617 /* between IV_MAX and NV(UV_MAX).
2618 Could be slightly > UV_MAX */
2620 if (numtype & IS_NUMBER_NOT_INT) {
2621 /* UV and NV both imprecise. */
2623 const UV nv_as_uv = U_V(nv);
2625 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2634 /* It might be more code efficient to go through the entire logic above
2635 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2636 gets complex and potentially buggy, so more programmer efficient
2637 to do it this way, by turning off the public flags: */
2639 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2640 #endif /* NV_PRESERVES_UV */
2643 if (isGV_with_GP(sv)) {
2644 glob_2number(MUTABLE_GV(sv));
2648 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2650 assert (SvTYPE(sv) >= SVt_NV);
2651 /* Typically the caller expects that sv_any is not NULL now. */
2652 /* XXX Ilya implies that this is a bug in callers that assume this
2653 and ideally should be fixed. */
2656 #if defined(USE_LONG_DOUBLE)
2658 STORE_NUMERIC_LOCAL_SET_STANDARD();
2659 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2660 PTR2UV(sv), SvNVX(sv));
2661 RESTORE_NUMERIC_LOCAL();
2665 STORE_NUMERIC_LOCAL_SET_STANDARD();
2666 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2667 PTR2UV(sv), SvNVX(sv));
2668 RESTORE_NUMERIC_LOCAL();
2677 Return an SV with the numeric value of the source SV, doing any necessary
2678 reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2679 access this function.
2685 Perl_sv_2num(pTHX_ register SV *const sv)
2687 PERL_ARGS_ASSERT_SV_2NUM;
2692 SV * const tmpsv = AMG_CALLun(sv,numer);
2693 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2694 return sv_2num(tmpsv);
2696 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2699 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2700 * UV as a string towards the end of buf, and return pointers to start and
2703 * We assume that buf is at least TYPE_CHARS(UV) long.
2707 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2709 char *ptr = buf + TYPE_CHARS(UV);
2710 char * const ebuf = ptr;
2713 PERL_ARGS_ASSERT_UIV_2BUF;
2725 *--ptr = '0' + (char)(uv % 10);
2734 =for apidoc sv_2pv_flags
2736 Returns a pointer to the string value of an SV, and sets *lp to its length.
2737 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2739 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2740 usually end up here too.
2746 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2756 if (SvGMAGICAL(sv)) {
2757 if (flags & SV_GMAGIC)
2762 if (flags & SV_MUTABLE_RETURN)
2763 return SvPVX_mutable(sv);
2764 if (flags & SV_CONST_RETURN)
2765 return (char *)SvPVX_const(sv);
2768 if (SvIOKp(sv) || SvNOKp(sv)) {
2769 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2774 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2775 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2777 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2784 #ifdef FIXNEGATIVEZERO
2785 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2791 SvUPGRADE(sv, SVt_PV);
2794 s = SvGROW_mutable(sv, len + 1);
2797 return (char*)memcpy(s, tbuf, len + 1);
2803 assert(SvTYPE(sv) >= SVt_PVMG);
2804 /* This falls through to the report_uninit near the end of the
2806 } else if (SvTHINKFIRST(sv)) {
2811 if (flags & SV_SKIP_OVERLOAD)
2813 tmpstr = AMG_CALLun(sv,string);
2814 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2816 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2820 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2821 if (flags & SV_CONST_RETURN) {
2822 pv = (char *) SvPVX_const(tmpstr);
2824 pv = (flags & SV_MUTABLE_RETURN)
2825 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2828 *lp = SvCUR(tmpstr);
2830 pv = sv_2pv_flags(tmpstr, lp, flags);
2843 SV *const referent = SvRV(sv);
2847 retval = buffer = savepvn("NULLREF", len);
2848 } else if (SvTYPE(referent) == SVt_REGEXP) {
2849 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2854 /* If the regex is UTF-8 we want the containing scalar to
2855 have an UTF-8 flag too */
2861 if ((seen_evals = RX_SEEN_EVALS(re)))
2862 PL_reginterp_cnt += seen_evals;
2865 *lp = RX_WRAPLEN(re);
2867 return RX_WRAPPED(re);
2869 const char *const typestr = sv_reftype(referent, 0);
2870 const STRLEN typelen = strlen(typestr);
2871 UV addr = PTR2UV(referent);
2872 const char *stashname = NULL;
2873 STRLEN stashnamelen = 0; /* hush, gcc */
2874 const char *buffer_end;
2876 if (SvOBJECT(referent)) {
2877 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2880 stashname = HEK_KEY(name);
2881 stashnamelen = HEK_LEN(name);
2883 if (HEK_UTF8(name)) {
2889 stashname = "__ANON__";
2892 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2893 + 2 * sizeof(UV) + 2 /* )\0 */;
2895 len = typelen + 3 /* (0x */
2896 + 2 * sizeof(UV) + 2 /* )\0 */;
2899 Newx(buffer, len, char);
2900 buffer_end = retval = buffer + len;
2902 /* Working backwards */
2906 *--retval = PL_hexdigit[addr & 15];
2907 } while (addr >>= 4);
2913 memcpy(retval, typestr, typelen);
2917 retval -= stashnamelen;
2918 memcpy(retval, stashname, stashnamelen);
2920 /* retval may not neccesarily have reached the start of the
2922 assert (retval >= buffer);
2924 len = buffer_end - retval - 1; /* -1 for that \0 */
2932 if (SvREADONLY(sv) && !SvOK(sv)) {
2935 if (flags & SV_UNDEF_RETURNS_NULL)
2937 if (ckWARN(WARN_UNINITIALIZED))
2942 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2943 /* I'm assuming that if both IV and NV are equally valid then
2944 converting the IV is going to be more efficient */
2945 const U32 isUIOK = SvIsUV(sv);
2946 char buf[TYPE_CHARS(UV)];
2950 if (SvTYPE(sv) < SVt_PVIV)
2951 sv_upgrade(sv, SVt_PVIV);
2952 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2954 /* inlined from sv_setpvn */
2955 s = SvGROW_mutable(sv, len + 1);
2956 Move(ptr, s, len, char);
2960 else if (SvNOKp(sv)) {
2962 if (SvTYPE(sv) < SVt_PVNV)
2963 sv_upgrade(sv, SVt_PVNV);
2964 /* The +20 is pure guesswork. Configure test needed. --jhi */
2965 s = SvGROW_mutable(sv, NV_DIG + 20);
2966 /* some Xenix systems wipe out errno here */
2968 if (SvNVX(sv) == 0.0)
2969 my_strlcpy(s, "0", SvLEN(sv));
2973 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2976 #ifdef FIXNEGATIVEZERO
2977 if (*s == '-' && s[1] == '0' && !s[2]) {
2989 if (isGV_with_GP(sv)) {
2990 GV *const gv = MUTABLE_GV(sv);
2991 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2992 SV *const buffer = sv_newmortal();
2994 /* FAKE globs can get coerced, so need to turn this off temporarily
2997 gv_efullname3(buffer, gv, "*");
2998 SvFLAGS(gv) |= wasfake;
3000 if (SvPOK(buffer)) {
3002 *lp = SvCUR(buffer);
3004 return SvPVX(buffer);
3015 if (flags & SV_UNDEF_RETURNS_NULL)
3017 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
3019 if (SvTYPE(sv) < SVt_PV)
3020 /* Typically the caller expects that sv_any is not NULL now. */
3021 sv_upgrade(sv, SVt_PV);
3025 const STRLEN len = s - SvPVX_const(sv);
3031 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3032 PTR2UV(sv),SvPVX_const(sv)));
3033 if (flags & SV_CONST_RETURN)
3034 return (char *)SvPVX_const(sv);
3035 if (flags & SV_MUTABLE_RETURN)
3036 return SvPVX_mutable(sv);
3041 =for apidoc sv_copypv
3043 Copies a stringified representation of the source SV into the
3044 destination SV. Automatically performs any necessary mg_get and
3045 coercion of numeric values into strings. Guaranteed to preserve
3046 UTF8 flag even from overloaded objects. Similar in nature to
3047 sv_2pv[_flags] but operates directly on an SV instead of just the
3048 string. Mostly uses sv_2pv_flags to do its work, except when that
3049 would lose the UTF-8'ness of the PV.
3055 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3058 const char * const s = SvPV_const(ssv,len);
3060 PERL_ARGS_ASSERT_SV_COPYPV;
3062 sv_setpvn(dsv,s,len);
3070 =for apidoc sv_2pvbyte
3072 Return a pointer to the byte-encoded representation of the SV, and set *lp
3073 to its length. May cause the SV to be downgraded from UTF-8 as a
3076 Usually accessed via the C<SvPVbyte> macro.
3082 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3084 PERL_ARGS_ASSERT_SV_2PVBYTE;
3086 sv_utf8_downgrade(sv,0);
3087 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3091 =for apidoc sv_2pvutf8
3093 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3094 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3096 Usually accessed via the C<SvPVutf8> macro.
3102 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3104 PERL_ARGS_ASSERT_SV_2PVUTF8;
3106 sv_utf8_upgrade(sv);
3107 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3112 =for apidoc sv_2bool
3114 This function is only called on magical items, and is only used by
3115 sv_true() or its macro equivalent.
3121 Perl_sv_2bool(pTHX_ register SV *const sv)
3125 PERL_ARGS_ASSERT_SV_2BOOL;
3133 SV * const tmpsv = AMG_CALLun(sv,bool_);
3134 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3135 return cBOOL(SvTRUE(tmpsv));
3137 return SvRV(sv) != 0;
3140 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3142 (*sv->sv_u.svu_pv > '0' ||
3143 Xpvtmp->xpv_cur > 1 ||
3144 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3151 return SvIVX(sv) != 0;
3154 return SvNVX(sv) != 0.0;
3156 if (isGV_with_GP(sv))
3166 =for apidoc sv_utf8_upgrade
3168 Converts the PV of an SV to its UTF-8-encoded form.
3169 Forces the SV to string form if it is not already.
3170 Will C<mg_get> on C<sv> if appropriate.
3171 Always sets the SvUTF8 flag to avoid future validity checks even
3172 if the whole string is the same in UTF-8 as not.
3173 Returns the number of bytes in the converted string
3175 This is not as a general purpose byte encoding to Unicode interface:
3176 use the Encode extension for that.
3178 =for apidoc sv_utf8_upgrade_nomg
3180 Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3182 =for apidoc sv_utf8_upgrade_flags
3184 Converts the PV of an SV to its UTF-8-encoded form.
3185 Forces the SV to string form if it is not already.
3186 Always sets the SvUTF8 flag to avoid future validity checks even
3187 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3188 will C<mg_get> on C<sv> if appropriate, else not.
3189 Returns the number of bytes in the converted string
3190 C<sv_utf8_upgrade> and
3191 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3193 This is not as a general purpose byte encoding to Unicode interface:
3194 use the Encode extension for that.
3198 The grow version is currently not externally documented. It adds a parameter,
3199 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3200 have free after it upon return. This allows the caller to reserve extra space
3201 that it intends to fill, to avoid extra grows.
3203 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3204 which can be used to tell this function to not first check to see if there are
3205 any characters that are different in UTF-8 (variant characters) which would
3206 force it to allocate a new string to sv, but to assume there are. Typically
3207 this flag is used by a routine that has already parsed the string to find that
3208 there are such characters, and passes this information on so that the work
3209 doesn't have to be repeated.
3211 (One might think that the calling routine could pass in the position of the
3212 first such variant, so it wouldn't have to be found again. But that is not the
3213 case, because typically when the caller is likely to use this flag, it won't be
3214 calling this routine unless it finds something that won't fit into a byte.
3215 Otherwise it tries to not upgrade and just use bytes. But some things that
3216 do fit into a byte are variants in utf8, and the caller may not have been
3217 keeping track of these.)
3219 If the routine itself changes the string, it adds a trailing NUL. Such a NUL
3220 isn't guaranteed due to having other routines do the work in some input cases,
3221 or if the input is already flagged as being in utf8.
3223 The speed of this could perhaps be improved for many cases if someone wanted to
3224 write a fast function that counts the number of variant characters in a string,
3225 especially if it could return the position of the first one.
3230 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3234 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3236 if (sv == &PL_sv_undef)
3240 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3241 (void) sv_2pv_flags(sv,&len, flags);
3243 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3247 (void) SvPV_force(sv,len);
3252 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3257 sv_force_normal_flags(sv, 0);
3260 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3261 sv_recode_to_utf8(sv, PL_encoding);
3262 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3266 if (SvCUR(sv) == 0) {
3267 if (extra) SvGROW(sv, extra);
3268 } else { /* Assume Latin-1/EBCDIC */
3269 /* This function could be much more efficient if we
3270 * had a FLAG in SVs to signal if there are any variant
3271 * chars in the PV. Given that there isn't such a flag
3272 * make the loop as fast as possible (although there are certainly ways
3273 * to speed this up, eg. through vectorization) */
3274 U8 * s = (U8 *) SvPVX_const(sv);
3275 U8 * e = (U8 *) SvEND(sv);
3277 STRLEN two_byte_count = 0;
3279 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3281 /* See if really will need to convert to utf8. We mustn't rely on our
3282 * incoming SV being well formed and having a trailing '\0', as certain
3283 * code in pp_formline can send us partially built SVs. */
3287 if (NATIVE_IS_INVARIANT(ch)) continue;
3289 t--; /* t already incremented; re-point to first variant */
3294 /* utf8 conversion not needed because all are invariants. Mark as
3295 * UTF-8 even if no variant - saves scanning loop */
3301 /* Here, the string should be converted to utf8, either because of an
3302 * input flag (two_byte_count = 0), or because a character that
3303 * requires 2 bytes was found (two_byte_count = 1). t points either to
3304 * the beginning of the string (if we didn't examine anything), or to
3305 * the first variant. In either case, everything from s to t - 1 will
3306 * occupy only 1 byte each on output.
3308 * There are two main ways to convert. One is to create a new string
3309 * and go through the input starting from the beginning, appending each
3310 * converted value onto the new string as we go along. It's probably
3311 * best to allocate enough space in the string for the worst possible
3312 * case rather than possibly running out of space and having to
3313 * reallocate and then copy what we've done so far. Since everything
3314 * from s to t - 1 is invariant, the destination can be initialized
3315 * with these using a fast memory copy
3317 * The other way is to figure out exactly how big the string should be
3318 * by parsing the entire input. Then you don't have to make it big
3319 * enough to handle the worst possible case, and more importantly, if
3320 * the string you already have is large enough, you don't have to
3321 * allocate a new string, you can copy the last character in the input
3322 * string to the final position(s) that will be occupied by the
3323 * converted string and go backwards, stopping at t, since everything
3324 * before that is invariant.
3326 * There are advantages and disadvantages to each method.
3328 * In the first method, we can allocate a new string, do the memory
3329 * copy from the s to t - 1, and then proceed through the rest of the
3330 * string byte-by-byte.
3332 * In the second method, we proceed through the rest of the input
3333 * string just calculating how big the converted string will be. Then
3334 * there are two cases:
3335 * 1) if the string has enough extra space to handle the converted
3336 * value. We go backwards through the string, converting until we
3337 * get to the position we are at now, and then stop. If this
3338 * position is far enough along in the string, this method is
3339 * faster than the other method. If the memory copy were the same
3340 * speed as the byte-by-byte loop, that position would be about
3341 * half-way, as at the half-way mark, parsing to the end and back
3342 * is one complete string's parse, the same amount as starting
3343 * over and going all the way through. Actually, it would be
3344 * somewhat less than half-way, as it's faster to just count bytes
3345 * than to also copy, and we don't have the overhead of allocating
3346 * a new string, changing the scalar to use it, and freeing the
3347 * existing one. But if the memory copy is fast, the break-even
3348 * point is somewhere after half way. The counting loop could be
3349 * sped up by vectorization, etc, to move the break-even point
3350 * further towards the beginning.
3351 * 2) if the string doesn't have enough space to handle the converted
3352 * value. A new string will have to be allocated, and one might
3353 * as well, given that, start from the beginning doing the first
3354 * method. We've spent extra time parsing the string and in
3355 * exchange all we've gotten is that we know precisely how big to
3356 * make the new one. Perl is more optimized for time than space,
3357 * so this case is a loser.
3358 * So what I've decided to do is not use the 2nd method unless it is
3359 * guaranteed that a new string won't have to be allocated, assuming
3360 * the worst case. I also decided not to put any more conditions on it
3361 * than this, for now. It seems likely that, since the worst case is
3362 * twice as big as the unknown portion of the string (plus 1), we won't
3363 * be guaranteed enough space, causing us to go to the first method,
3364 * unless the string is short, or the first variant character is near
3365 * the end of it. In either of these cases, it seems best to use the
3366 * 2nd method. The only circumstance I can think of where this would
3367 * be really slower is if the string had once had much more data in it
3368 * than it does now, but there is still a substantial amount in it */
3371 STRLEN invariant_head = t - s;
3372 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3373 if (SvLEN(sv) < size) {
3375 /* Here, have decided to allocate a new string */
3380 Newx(dst, size, U8);
3382 /* If no known invariants at the beginning of the input string,
3383 * set so starts from there. Otherwise, can use memory copy to
3384 * get up to where we are now, and then start from here */
3386 if (invariant_head <= 0) {
3389 Copy(s, dst, invariant_head, char);
3390 d = dst + invariant_head;
3394 const UV uv = NATIVE8_TO_UNI(*t++);
3395 if (UNI_IS_INVARIANT(uv))
3396 *d++ = (U8)UNI_TO_NATIVE(uv);
3398 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3399 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3403 SvPV_free(sv); /* No longer using pre-existing string */
3404 SvPV_set(sv, (char*)dst);
3405 SvCUR_set(sv, d - dst);
3406 SvLEN_set(sv, size);
3409 /* Here, have decided to get the exact size of the string.
3410 * Currently this happens only when we know that there is
3411 * guaranteed enough space to fit the converted string, so
3412 * don't have to worry about growing. If two_byte_count is 0,
3413 * then t points to the first byte of the string which hasn't
3414 * been examined yet. Otherwise two_byte_count is 1, and t
3415 * points to the first byte in the string that will expand to
3416 * two. Depending on this, start examining at t or 1 after t.
3419 U8 *d = t + two_byte_count;
3422 /* Count up the remaining bytes that expand to two */
3425 const U8 chr = *d++;
3426 if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3429 /* The string will expand by just the number of bytes that
3430 * occupy two positions. But we are one afterwards because of
3431 * the increment just above. This is the place to put the
3432 * trailing NUL, and to set the length before we decrement */
3434 d += two_byte_count;
3435 SvCUR_set(sv, d - s);
3439 /* Having decremented d, it points to the position to put the
3440 * very last byte of the expanded string. Go backwards through
3441 * the string, copying and expanding as we go, stopping when we
3442 * get to the part that is invariant the rest of the way down */
3446 const U8 ch = NATIVE8_TO_UNI(*e--);
3447 if (UNI_IS_INVARIANT(ch)) {
3448 *d-- = UNI_TO_NATIVE(ch);
3450 *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3451 *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3458 /* Mark as UTF-8 even if no variant - saves scanning loop */
3464 =for apidoc sv_utf8_downgrade
3466 Attempts to convert the PV of an SV from characters to bytes.
3467 If the PV contains a character that cannot fit
3468 in a byte, this conversion will fail;
3469 in this case, either returns false or, if C<fail_ok> is not
3472 This is not as a general purpose Unicode to byte encoding interface:
3473 use the Encode extension for that.
3479 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3483 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3485 if (SvPOKp(sv) && SvUTF8(sv)) {
3491 sv_force_normal_flags(sv, 0);
3493 s = (U8 *) SvPV(sv, len);
3494 if (!utf8_to_bytes(s, &len)) {
3499 Perl_croak(aTHX_ "Wide character in %s",
3502 Perl_croak(aTHX_ "Wide character");
3513 =for apidoc sv_utf8_encode
3515 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3516 flag off so that it looks like octets again.
3522 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3524 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3527 sv_force_normal_flags(sv, 0);
3529 if (SvREADONLY(sv)) {
3530 Perl_croak(aTHX_ "%s", PL_no_modify);
3532 (void) sv_utf8_upgrade(sv);
3537 =for apidoc sv_utf8_decode
3539 If the PV of the SV is an octet sequence in UTF-8
3540 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3541 so that it looks like a character. If the PV contains only single-byte
3542 characters, the C<SvUTF8> flag stays being off.
3543 Scans PV for validity and returns false if the PV is invalid UTF-8.
3549 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3551 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3557 /* The octets may have got themselves encoded - get them back as
3560 if (!sv_utf8_downgrade(sv, TRUE))
3563 /* it is actually just a matter of turning the utf8 flag on, but
3564 * we want to make sure everything inside is valid utf8 first.
3566 c = (const U8 *) SvPVX_const(sv);
3567 if (!is_utf8_string(c, SvCUR(sv)+1))
3569 e = (const U8 *) SvEND(sv);
3572 if (!UTF8_IS_INVARIANT(ch)) {
3582 =for apidoc sv_setsv
3584 Copies the contents of the source SV C<ssv> into the destination SV
3585 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3586 function if the source SV needs to be reused. Does not handle 'set' magic.
3587 Loosely speaking, it performs a copy-by-value, obliterating any previous
3588 content of the destination.
3590 You probably want to use one of the assortment of wrappers, such as
3591 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3592 C<SvSetMagicSV_nosteal>.
3594 =for apidoc sv_setsv_flags
3596 Copies the contents of the source SV C<ssv> into the destination SV
3597 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3598 function if the source SV needs to be reused. Does not handle 'set' magic.
3599 Loosely speaking, it performs a copy-by-value, obliterating any previous
3600 content of the destination.
3601 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3602 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3603 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3604 and C<sv_setsv_nomg> are implemented in terms of this function.
3606 You probably want to use one of the assortment of wrappers, such as
3607 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3608 C<SvSetMagicSV_nosteal>.
3610 This is the primary function for copying scalars, and most other
3611 copy-ish functions and macros use this underneath.
3617 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3619 I32 mro_changes = 0; /* 1 = method, 2 = isa */
3621 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3623 if (dtype != SVt_PVGV) {
3624 const char * const name = GvNAME(sstr);
3625 const STRLEN len = GvNAMELEN(sstr);
3627 if (dtype >= SVt_PV) {
3633 SvUPGRADE(dstr, SVt_PVGV);
3634 (void)SvOK_off(dstr);
3635 /* FIXME - why are we doing this, then turning it off and on again
3637 isGV_with_GP_on(dstr);
3639 GvSTASH(dstr) = GvSTASH(sstr);
3641 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3642 gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
3643 SvFAKE_on(dstr); /* can coerce to non-glob */
3646 if(GvGP(MUTABLE_GV(sstr))) {
3647 /* If source has method cache entry, clear it */
3649 SvREFCNT_dec(GvCV(sstr));
3653 /* If source has a real method, then a method is
3655 else if(GvCV((const GV *)sstr)) {
3660 /* If dest already had a real method, that's a change as well */
3661 if(!mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)) {
3665 if(strEQ(GvNAME((const GV *)dstr),"ISA"))
3668 gp_free(MUTABLE_GV(dstr));
3669 isGV_with_GP_off(dstr);
3670 (void)SvOK_off(dstr);
3671 isGV_with_GP_on(dstr);
3672 GvINTRO_off(dstr); /* one-shot flag */
3673 GvGP(dstr) = gp_ref(GvGP(sstr));
3674 if (SvTAINTED(sstr))
3676 if (GvIMPORTED(dstr) != GVf_IMPORTED
3677 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3679 GvIMPORTED_on(dstr);
3682 if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3683 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3688 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3690 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3692 const int intro = GvINTRO(dstr);
3695 const U32 stype = SvTYPE(sref);
3697 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3700 GvINTRO_off(dstr); /* one-shot flag */
3701 GvLINE(dstr) = CopLINE(PL_curcop);
3702 GvEGV(dstr) = MUTABLE_GV(dstr);
3707 location = (SV **) &GvCV(dstr);
3708 import_flag = GVf_IMPORTED_CV;
3711 location = (SV **) &GvHV(dstr);
3712 import_flag = GVf_IMPORTED_HV;
3715 location = (SV **) &GvAV(dstr);
3716 import_flag = GVf_IMPORTED_AV;
3719 location = (SV **) &GvIOp(dstr);
3722 location = (SV **) &GvFORM(dstr);
3725 location = &GvSV(dstr);
3726 import_flag = GVf_IMPORTED_SV;
3729 if (stype == SVt_PVCV) {
3730 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3731 if (GvCVGEN(dstr)) {
3732 SvREFCNT_dec(GvCV(dstr));
3734 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3737 SAVEGENERICSV(*location);
3741 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3742 CV* const cv = MUTABLE_CV(*location);
3744 if (!GvCVGEN((const GV *)dstr) &&
3745 (CvROOT(cv) || CvXSUB(cv)))
3747 /* Redefining a sub - warning is mandatory if
3748 it was a const and its value changed. */
3749 if (CvCONST(cv) && CvCONST((const CV *)sref)
3751 == cv_const_sv((const CV *)sref)) {
3753 /* They are 2 constant subroutines generated from
3754 the same constant. This probably means that
3755 they are really the "same" proxy subroutine
3756 instantiated in 2 places. Most likely this is
3757 when a constant is exported twice. Don't warn.
3760 else if (ckWARN(WARN_REDEFINE)
3762 && (!CvCONST((const CV *)sref)
3763 || sv_cmp(cv_const_sv(cv),
3764 cv_const_sv((const CV *)
3766 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3769 ? "Constant subroutine %s::%s redefined"
3770 : "Subroutine %s::%s redefined"),
3771 HvNAME_get(GvSTASH((const GV *)dstr)),
3772 GvENAME(MUTABLE_GV(dstr)));
3776 cv_ckproto_len(cv, (const GV *)dstr,
3777 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3778 SvPOK(sref) ? SvCUR(sref) : 0);
3780 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3781 GvASSUMECV_on(dstr);
3782 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3785 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3786 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3787 GvFLAGS(dstr) |= import_flag;
3789 if (stype == SVt_PVAV && strEQ(GvNAME((GV*)dstr), "ISA")) {
3790 sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3791 mro_isa_changed_in(GvSTASH(dstr));
3796 if (SvTAINTED(sstr))
3802 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3805 register U32 sflags;
3807 register svtype stype;
3809 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3814 if (SvIS_FREED(dstr)) {
3815 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3816 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3818 SV_CHECK_THINKFIRST_COW_DROP(dstr);
3820 sstr = &PL_sv_undef;
3821 if (SvIS_FREED(sstr)) {
3822 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3823 (void*)sstr, (void*)dstr);
3825 stype = SvTYPE(sstr);
3826 dtype = SvTYPE(dstr);
3828 (void)SvAMAGIC_off(dstr);
3831 /* need to nuke the magic */
3835 /* There's a lot of redundancy below but we're going for speed here */
3840 if (dtype != SVt_PVGV) {
3841 (void)SvOK_off(dstr);
3849 sv_upgrade(dstr, SVt_IV);
3853 sv_upgrade(dstr, SVt_PVIV);
3856 goto end_of_first_switch;
3858 (void)SvIOK_only(dstr);
3859 SvIV_set(dstr, SvIVX(sstr));
3862 /* SvTAINTED can only be true if the SV has taint magic, which in
3863 turn means that the SV type is PVMG (or greater). This is the
3864 case statement for SVt_IV, so this cannot be true (whatever gcov
3866 assert(!SvTAINTED(sstr));
3871 if (dtype < SVt_PV && dtype != SVt_IV)
3872 sv_upgrade(dstr, SVt_IV);
3880 sv_upgrade(dstr, SVt_NV);
3884 sv_upgrade(dstr, SVt_PVNV);
3887 goto end_of_first_switch;
3889 SvNV_set(dstr, SvNVX(sstr));
3890 (void)SvNOK_only(dstr);
3891 /* SvTAINTED can only be true if the SV has taint magic, which in
3892 turn means that the SV type is PVMG (or greater). This is the
3893 case statement for SVt_NV, so this cannot be true (whatever gcov
3895 assert(!SvTAINTED(sstr));
3901 #ifdef PERL_OLD_COPY_ON_WRITE
3902 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3903 if (dtype < SVt_PVIV)
3904 sv_upgrade(dstr, SVt_PVIV);
3911 sv_upgrade(dstr, SVt_PV);
3914 if (dtype < SVt_PVIV)
3915 sv_upgrade(dstr, SVt_PVIV);
3918 if (dtype < SVt_PVNV)
3919 sv_upgrade(dstr, SVt_PVNV);
3923 const char * const type = sv_reftype(sstr,0);
3925 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
3927 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3932 if (dtype < SVt_REGEXP)
3933 sv_upgrade(dstr, SVt_REGEXP);
3936 /* case SVt_BIND: */
3939 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
3940 glob_assign_glob(dstr, sstr, dtype);
3943 /* SvVALID means that this PVGV is playing at being an FBM. */
3947 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3949 if (SvTYPE(sstr) != stype) {
3950 stype = SvTYPE(sstr);
3951 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
3952 glob_assign_glob(dstr, sstr, dtype);
3957 if (stype == SVt_PVLV)
3958 SvUPGRADE(dstr, SVt_PVNV);
3960 SvUPGRADE(dstr, (svtype)stype);
3962 end_of_first_switch:
3964 /* dstr may have been upgraded. */
3965 dtype = SvTYPE(dstr);
3966 sflags = SvFLAGS(sstr);
3968 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
3969 /* Assigning to a subroutine sets the prototype. */
3972 const char *const ptr = SvPV_const(sstr, len);
3974 SvGROW(dstr, len + 1);
3975 Copy(ptr, SvPVX(dstr), len + 1, char);
3976 SvCUR_set(dstr, len);
3978 SvFLAGS(dstr) |= sflags & SVf_UTF8;
3982 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3983 const char * const type = sv_reftype(dstr,0);
3985 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
3987 Perl_croak(aTHX_ "Cannot copy to %s", type);
3988 } else if (sflags & SVf_ROK) {
3989 if (isGV_with_GP(dstr) && dtype == SVt_PVGV
3990 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
3993 if (GvIMPORTED(dstr) != GVf_IMPORTED
3994 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3996 GvIMPORTED_on(dstr);
4001 glob_assign_glob(dstr, sstr, dtype);
4005 if (dtype >= SVt_PV) {
4006 if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
4007 glob_assign_ref(dstr, sstr);
4010 if (SvPVX_const(dstr)) {
4016 (void)SvOK_off(dstr);
4017 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4018 SvFLAGS(dstr) |= sflags & SVf_ROK;
4019 assert(!(sflags & SVp_NOK));
4020 assert(!(sflags & SVp_IOK));
4021 assert(!(sflags & SVf_NOK));
4022 assert(!(sflags & SVf_IOK));
4024 else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
4025 if (!(sflags & SVf_OK)) {
4026 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4027 "Undefined value assigned to typeglob");
4030 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
4031 if (dstr != (const SV *)gv) {
4033 gp_free(MUTABLE_GV(dstr));
4034 GvGP(dstr) = gp_ref(GvGP(gv));
4038 else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4039 reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4041 else if (sflags & SVp_POK) {
4045 * Check to see if we can just swipe the string. If so, it's a
4046 * possible small lose on short strings, but a big win on long ones.
4047 * It might even be a win on short strings if SvPVX_const(dstr)
4048 * has to be allocated and SvPVX_const(sstr) has to be freed.
4049 * Likewise if we can set up COW rather than doing an actual copy, we
4050 * drop to the else clause, as the swipe code and the COW setup code
4051 * have much in common.
4054 /* Whichever path we take through the next code, we want this true,
4055 and doing it now facilitates the COW check. */
4056 (void)SvPOK_only(dstr);
4059 /* If we're already COW then this clause is not true, and if COW
4060 is allowed then we drop down to the else and make dest COW
4061 with us. If caller hasn't said that we're allowed to COW
4062 shared hash keys then we don't do the COW setup, even if the
4063 source scalar is a shared hash key scalar. */
4064 (((flags & SV_COW_SHARED_HASH_KEYS)
4065 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4066 : 1 /* If making a COW copy is forbidden then the behaviour we
4067 desire is as if the source SV isn't actually already
4068 COW, even if it is. So we act as if the source flags
4069 are not COW, rather than actually testing them. */
4071 #ifndef PERL_OLD_COPY_ON_WRITE
4072 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4073 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4074 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4075 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4076 but in turn, it's somewhat dead code, never expected to go
4077 live, but more kept as a placeholder on how to do it better
4078 in a newer implementation. */
4079 /* If we are COW and dstr is a suitable target then we drop down
4080 into the else and make dest a COW of us. */
4081 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4086 (sflags & SVs_TEMP) && /* slated for free anyway? */
4087 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4088 (!(flags & SV_NOSTEAL)) &&
4089 /* and we're allowed to steal temps */
4090 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4091 SvLEN(sstr)) /* and really is a string */
4092 #ifdef PERL_OLD_COPY_ON_WRITE
4093 && ((flags & SV_COW_SHARED_HASH_KEYS)
4094 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4095 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4096 && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4100 /* Failed the swipe test, and it's not a shared hash key either.
4101 Have to copy the string. */
4102 STRLEN len = SvCUR(sstr);
4103 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4104 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4105 SvCUR_set(dstr, len);
4106 *SvEND(dstr) = '\0';
4108 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4110 /* Either it's a shared hash key, or it's suitable for
4111 copy-on-write or we can swipe the string. */
4113 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4117 #ifdef PERL_OLD_COPY_ON_WRITE
4119 if ((sflags & (SVf_FAKE | SVf_READONLY))
4120 != (SVf_FAKE | SVf_READONLY)) {
4121 SvREADONLY_on(sstr);
4123 /* Make the source SV into a loop of 1.
4124 (about to become 2) */
4125 SV_COW_NEXT_SV_SET(sstr, sstr);
4129 /* Initial code is common. */
4130 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4135 /* making another shared SV. */
4136 STRLEN cur = SvCUR(sstr);
4137 STRLEN len = SvLEN(sstr);
4138 #ifdef PERL_OLD_COPY_ON_WRITE
4140 assert (SvTYPE(dstr) >= SVt_PVIV);
4141 /* SvIsCOW_normal */
4142 /* splice us in between source and next-after-source. */
4143 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4144 SV_COW_NEXT_SV_SET(sstr, dstr);
4145 SvPV_set(dstr, SvPVX_mutable(sstr));
4149 /* SvIsCOW_shared_hash */
4150 DEBUG_C(PerlIO_printf(Perl_debug_log,
4151 "Copy on write: Sharing hash\n"));
4153 assert (SvTYPE(dstr) >= SVt_PV);
4155 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4157 SvLEN_set(dstr, len);
4158 SvCUR_set(dstr, cur);
4159 SvREADONLY_on(dstr);
4163 { /* Passes the swipe test. */
4164 SvPV_set(dstr, SvPVX_mutable(sstr));
4165 SvLEN_set(dstr, SvLEN(sstr));
4166 SvCUR_set(dstr, SvCUR(sstr));
4169 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4170 SvPV_set(sstr, NULL);
4176 if (sflags & SVp_NOK) {
4177 SvNV_set(dstr, SvNVX(sstr));
4179 if (sflags & SVp_IOK) {
4180 SvIV_set(dstr, SvIVX(sstr));
4181 /* Must do this otherwise some other overloaded use of 0x80000000
4182 gets confused. I guess SVpbm_VALID */
4183 if (sflags & SVf_IVisUV)
4186 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4188 const MAGIC * const smg = SvVSTRING_mg(sstr);
4190 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4191 smg->mg_ptr, smg->mg_len);
4192 SvRMAGICAL_on(dstr);
4196 else if (sflags & (SVp_IOK|SVp_NOK)) {
4197 (void)SvOK_off(dstr);
4198 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4199 if (sflags & SVp_IOK) {
4200 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4201 SvIV_set(dstr, SvIVX(sstr));
4203 if (sflags & SVp_NOK) {
4204 SvNV_set(dstr, SvNVX(sstr));
4208 if (isGV_with_GP(sstr)) {
4209 /* This stringification rule for globs is spread in 3 places.
4210 This feels bad. FIXME. */
4211 const U32 wasfake = sflags & SVf_FAKE;
4213 /* FAKE globs can get coerced, so need to turn this off
4214 temporarily if it is on. */
4216 gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4217 SvFLAGS(sstr) |= wasfake;
4220 (void)SvOK_off(dstr);
4222 if (SvTAINTED(sstr))
4227 =for apidoc sv_setsv_mg
4229 Like C<sv_setsv>, but also handles 'set' magic.
4235 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4237 PERL_ARGS_ASSERT_SV_SETSV_MG;
4239 sv_setsv(dstr,sstr);
4243 #ifdef PERL_OLD_COPY_ON_WRITE
4245 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4247 STRLEN cur = SvCUR(sstr);
4248 STRLEN len = SvLEN(sstr);
4249 register char *new_pv;
4251 PERL_ARGS_ASSERT_SV_SETSV_COW;
4254 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4255 (void*)sstr, (void*)dstr);
4262 if (SvTHINKFIRST(dstr))
4263 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4264 else if (SvPVX_const(dstr))
4265 Safefree(SvPVX_const(dstr));
4269 SvUPGRADE(dstr, SVt_PVIV);
4271 assert (SvPOK(sstr));
4272 assert (SvPOKp(sstr));
4273 assert (!SvIOK(sstr));
4274 assert (!SvIOKp(sstr));
4275 assert (!SvNOK(sstr));
4276 assert (!SvNOKp(sstr));
4278 if (SvIsCOW(sstr)) {
4280 if (SvLEN(sstr) == 0) {
4281 /* source is a COW shared hash key. */
4282 DEBUG_C(PerlIO_printf(Perl_debug_log,
4283 "Fast copy on write: Sharing hash\n"));
4284 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4287 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4289 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4290 SvUPGRADE(sstr, SVt_PVIV);
4291 SvREADONLY_on(sstr);
4293 DEBUG_C(PerlIO_printf(Perl_debug_log,
4294 "Fast copy on write: Converting sstr to COW\n"));
4295 SV_COW_NEXT_SV_SET(dstr, sstr);
4297 SV_COW_NEXT_SV_SET(sstr, dstr);
4298 new_pv = SvPVX_mutable(sstr);
4301 SvPV_set(dstr, new_pv);
4302 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4305 SvLEN_set(dstr, len);
4306 SvCUR_set(dstr, cur);
4315 =for apidoc sv_setpvn
4317 Copies a string into an SV. The C<len> parameter indicates the number of
4318 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4319 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4325 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4328 register char *dptr;
4330 PERL_ARGS_ASSERT_SV_SETPVN;
4332 SV_CHECK_THINKFIRST_COW_DROP(sv);
4338 /* len is STRLEN which is unsigned, need to copy to signed */
4341 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4343 SvUPGRADE(sv, SVt_PV);
4345 dptr = SvGROW(sv, len + 1);
4346 Move(ptr,dptr,len,char);
4349 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4354 =for apidoc sv_setpvn_mg
4356 Like C<sv_setpvn>, but also handles 'set' magic.
4362 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4364 PERL_ARGS_ASSERT_SV_SETPVN_MG;
4366 sv_setpvn(sv,ptr,len);
4371 =for apidoc sv_setpv
4373 Copies a string into an SV. The string must be null-terminated. Does not
4374 handle 'set' magic. See C<sv_setpv_mg>.
4380 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4383 register STRLEN len;
4385 PERL_ARGS_ASSERT_SV_SETPV;
4387 SV_CHECK_THINKFIRST_COW_DROP(sv);
4393 SvUPGRADE(sv, SVt_PV);
4395 SvGROW(sv, len + 1);
4396 Move(ptr,SvPVX(sv),len+1,char);
4398 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4403 =for apidoc sv_setpv_mg
4405 Like C<sv_setpv>, but also handles 'set' magic.
4411 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4413 PERL_ARGS_ASSERT_SV_SETPV_MG;
4420 =for apidoc sv_usepvn_flags
4422 Tells an SV to use C<ptr> to find its string value. Normally the
4423 string is stored inside the SV but sv_usepvn allows the SV to use an
4424 outside string. The C<ptr> should point to memory that was allocated
4425 by C<malloc>. The string length, C<len>, must be supplied. By default
4426 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4427 so that pointer should not be freed or used by the programmer after
4428 giving it to sv_usepvn, and neither should any pointers from "behind"
4429 that pointer (e.g. ptr + 1) be used.
4431 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4432 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4433 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4434 C<len>, and already meets the requirements for storing in C<SvPVX>)
4440 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4445 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4447 SV_CHECK_THINKFIRST_COW_DROP(sv);
4448 SvUPGRADE(sv, SVt_PV);
4451 if (flags & SV_SMAGIC)
4455 if (SvPVX_const(sv))
4459 if (flags & SV_HAS_TRAILING_NUL)
4460 assert(ptr[len] == '\0');
4463 allocate = (flags & SV_HAS_TRAILING_NUL)
4465 #ifdef Perl_safesysmalloc_size
4468 PERL_STRLEN_ROUNDUP(len + 1);
4470 if (flags & SV_HAS_TRAILING_NUL) {
4471 /* It's long enough - do nothing.
4472 Specfically Perl_newCONSTSUB is relying on this. */
4475 /* Force a move to shake out bugs in callers. */
4476 char *new_ptr = (char*)safemalloc(allocate);
4477 Copy(ptr, new_ptr, len, char);
4478 PoisonFree(ptr,len,char);
4482 ptr = (char*) saferealloc (ptr, allocate);
4485 #ifdef Perl_safesysmalloc_size
4486 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4488 SvLEN_set(sv, allocate);
4492 if (!(flags & SV_HAS_TRAILING_NUL)) {
4495 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4497 if (flags & SV_SMAGIC)
4501 #ifdef PERL_OLD_COPY_ON_WRITE
4502 /* Need to do this *after* making the SV normal, as we need the buffer
4503 pointer to remain valid until after we've copied it. If we let go too early,
4504 another thread could invalidate it by unsharing last of the same hash key
4505 (which it can do by means other than releasing copy-on-write Svs)
4506 or by changing the other copy-on-write SVs in the loop. */
4508 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4510 PERL_ARGS_ASSERT_SV_RELEASE_COW;
4512 { /* this SV was SvIsCOW_normal(sv) */
4513 /* we need to find the SV pointing to us. */
4514 SV *current = SV_COW_NEXT_SV(after);
4516 if (current == sv) {
4517 /* The SV we point to points back to us (there were only two of us
4519 Hence other SV is no longer copy on write either. */
4521 SvREADONLY_off(after);
4523 /* We need to follow the pointers around the loop. */
4525 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4528 /* don't loop forever if the structure is bust, and we have
4529 a pointer into a closed loop. */
4530 assert (current != after);
4531 assert (SvPVX_const(current) == pvx);
4533 /* Make the SV before us point to the SV after us. */
4534 SV_COW_NEXT_SV_SET(current, after);
4540 =for apidoc sv_force_normal_flags
4542 Undo various types of fakery on an SV: if the PV is a shared string, make
4543 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4544 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4545 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4546 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4547 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4548 set to some other value.) In addition, the C<flags> parameter gets passed to
4549 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4550 with flags set to 0.
4556 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4560 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4562 #ifdef PERL_OLD_COPY_ON_WRITE
4563 if (SvREADONLY(sv)) {
4565 const char * const pvx = SvPVX_const(sv);
4566 const STRLEN len = SvLEN(sv);
4567 const STRLEN cur = SvCUR(sv);
4568 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4569 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4570 we'll fail an assertion. */
4571 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4574 PerlIO_printf(Perl_debug_log,
4575 "Copy on write: Force normal %ld\n",
4581 /* This SV doesn't own the buffer, so need to Newx() a new one: */
4584 if (flags & SV_COW_DROP_PV) {
4585 /* OK, so we don't need to copy our buffer. */
4588 SvGROW(sv, cur + 1);
4589 Move(pvx,SvPVX(sv),cur,char);
4594 sv_release_COW(sv, pvx, next);
4596 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4602 else if (IN_PERL_RUNTIME)
4603 Perl_croak(aTHX_ "%s", PL_no_modify);
4606 if (SvREADONLY(sv)) {
4608 const char * const pvx = SvPVX_const(sv);
4609 const STRLEN len = SvCUR(sv);
4614 SvGROW(sv, len + 1);
4615 Move(pvx,SvPVX(sv),len,char);
4617 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4619 else if (IN_PERL_RUNTIME)
4620 Perl_croak(aTHX_ "%s", PL_no_modify);
4624 sv_unref_flags(sv, flags);
4625 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4627 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4628 /* Need to downgrade the REGEXP to a simple(r) scalar. This is analagous
4629 to sv_unglob. We only need it here, so inline it. */
4630 const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4631 SV *const temp = newSV_type(new_type);
4632 void *const temp_p = SvANY(sv);
4634 if (new_type == SVt_PVMG) {
4635 SvMAGIC_set(temp, SvMAGIC(sv));
4636 SvMAGIC_set(sv, NULL);
4637 SvSTASH_set(temp, SvSTASH(sv));
4638 SvSTASH_set(sv, NULL);
4640 SvCUR_set(temp, SvCUR(sv));
4641 /* Remember that SvPVX is in the head, not the body. */
4643 SvLEN_set(temp, SvLEN(sv));
4644 /* This signals "buffer is owned by someone else" in sv_clear,
4645 which is the least effort way to stop it freeing the buffer.
4647 SvLEN_set(sv, SvLEN(sv)+1);
4649 /* Their buffer is already owned by someone else. */
4650 SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4651 SvLEN_set(temp, SvCUR(sv)+1);
4654 /* Now swap the rest of the bodies. */
4656 SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4657 SvFLAGS(sv) |= new_type;
4658 SvANY(sv) = SvANY(temp);
4660 SvFLAGS(temp) &= ~(SVTYPEMASK);
4661 SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4662 SvANY(temp) = temp_p;
4671 Efficient removal of characters from the beginning of the string buffer.
4672 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4673 the string buffer. The C<ptr> becomes the first character of the adjusted
4674 string. Uses the "OOK hack".
4675 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4676 refer to the same chunk of data.
4682 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4688 const U8 *real_start;
4692 PERL_ARGS_ASSERT_SV_CHOP;
4694 if (!ptr || !SvPOKp(sv))
4696 delta = ptr - SvPVX_const(sv);
4698 /* Nothing to do. */
4701 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4702 nothing uses the value of ptr any more. */
4703 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4704 if (ptr <= SvPVX_const(sv))
4705 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4706 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4707 SV_CHECK_THINKFIRST(sv);
4708 if (delta > max_delta)
4709 Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4710 SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4711 SvPVX_const(sv) + max_delta);
4714 if (!SvLEN(sv)) { /* make copy of shared string */
4715 const char *pvx = SvPVX_const(sv);
4716 const STRLEN len = SvCUR(sv);
4717 SvGROW(sv, len + 1);
4718 Move(pvx,SvPVX(sv),len,char);
4721 SvFLAGS(sv) |= SVf_OOK;
4724 SvOOK_offset(sv, old_delta);
4726 SvLEN_set(sv, SvLEN(sv) - delta);
4727 SvCUR_set(sv, SvCUR(sv) - delta);
4728 SvPV_set(sv, SvPVX(sv) + delta);
4730 p = (U8 *)SvPVX_const(sv);
4735 real_start = p - delta;
4739 if (delta < 0x100) {
4743 p -= sizeof(STRLEN);
4744 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4748 /* Fill the preceding buffer with sentinals to verify that no-one is
4750 while (p > real_start) {
4758 =for apidoc sv_catpvn
4760 Concatenates the string onto the end of the string which is in the SV. The
4761 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4762 status set, then the bytes appended should be valid UTF-8.
4763 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4765 =for apidoc sv_catpvn_flags
4767 Concatenates the string onto the end of the string which is in the SV. The
4768 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4769 status set, then the bytes appended should be valid UTF-8.
4770 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4771 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4772 in terms of this function.
4778 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4782 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4784 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4786 SvGROW(dsv, dlen + slen + 1);
4788 sstr = SvPVX_const(dsv);
4789 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4790 SvCUR_set(dsv, SvCUR(dsv) + slen);
4792 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4794 if (flags & SV_SMAGIC)
4799 =for apidoc sv_catsv
4801 Concatenates the string from SV C<ssv> onto the end of the string in
4802 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4803 not 'set' magic. See C<sv_catsv_mg>.
4805 =for apidoc sv_catsv_flags
4807 Concatenates the string from SV C<ssv> onto the end of the string in
4808 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4809 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4810 and C<sv_catsv_nomg> are implemented in terms of this function.
4815 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
4819 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4823 const char *spv = SvPV_const(ssv, slen);
4825 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4826 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4827 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4828 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4829 dsv->sv_flags doesn't have that bit set.
4830 Andy Dougherty 12 Oct 2001
4832 const I32 sutf8 = DO_UTF8(ssv);
4835 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4837 dutf8 = DO_UTF8(dsv);
4839 if (dutf8 != sutf8) {
4841 /* Not modifying source SV, so taking a temporary copy. */
4842 SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
4844 sv_utf8_upgrade(csv);
4845 spv = SvPV_const(csv, slen);
4848 /* Leave enough space for the cat that's about to happen */
4849 sv_utf8_upgrade_flags_grow(dsv, 0, slen);
4851 sv_catpvn_nomg(dsv, spv, slen);
4854 if (flags & SV_SMAGIC)
4859 =for apidoc sv_catpv
4861 Concatenates the string onto the end of the string which is in the SV.
4862 If the SV has the UTF-8 status set, then the bytes appended should be
4863 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4868 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
4871 register STRLEN len;
4875 PERL_ARGS_ASSERT_SV_CATPV;
4879 junk = SvPV_force(sv, tlen);
4881 SvGROW(sv, tlen + len + 1);
4883 ptr = SvPVX_const(sv);
4884 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4885 SvCUR_set(sv, SvCUR(sv) + len);
4886 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4891 =for apidoc sv_catpv_mg
4893 Like C<sv_catpv>, but also handles 'set' magic.
4899 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4901 PERL_ARGS_ASSERT_SV_CATPV_MG;
4910 Creates a new SV. A non-zero C<len> parameter indicates the number of
4911 bytes of preallocated string space the SV should have. An extra byte for a
4912 trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4913 space is allocated.) The reference count for the new SV is set to 1.
4915 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4916 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4917 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4918 L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4919 modules supporting older perls.
4925 Perl_newSV(pTHX_ const STRLEN len)
4932 sv_upgrade(sv, SVt_PV);
4933 SvGROW(sv, len + 1);
4938 =for apidoc sv_magicext
4940 Adds magic to an SV, upgrading it if necessary. Applies the
4941 supplied vtable and returns a pointer to the magic added.
4943 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4944 In particular, you can add magic to SvREADONLY SVs, and add more than
4945 one instance of the same 'how'.
4947 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4948 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4949 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4950 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4952 (This is now used as a subroutine by C<sv_magic>.)
4957 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
4958 const MGVTBL *const vtable, const char *const name, const I32 namlen)
4963 PERL_ARGS_ASSERT_SV_MAGICEXT;
4965 SvUPGRADE(sv, SVt_PVMG);
4966 Newxz(mg, 1, MAGIC);
4967 mg->mg_moremagic = SvMAGIC(sv);
4968 SvMAGIC_set(sv, mg);
4970 /* Sometimes a magic contains a reference loop, where the sv and
4971 object refer to each other. To prevent a reference loop that
4972 would prevent such objects being freed, we look for such loops
4973 and if we find one we avoid incrementing the object refcount.
4975 Note we cannot do this to avoid self-tie loops as intervening RV must
4976 have its REFCNT incremented to keep it in existence.
4979 if (!obj || obj == sv ||
4980 how == PERL_MAGIC_arylen ||
4981 how == PERL_MAGIC_symtab ||
4982 (SvTYPE(obj) == SVt_PVGV &&
4983 (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
4984 || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
4985 || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
4990 mg->mg_obj = SvREFCNT_inc_simple(obj);
4991 mg->mg_flags |= MGf_REFCOUNTED;
4994 /* Normal self-ties simply pass a null object, and instead of
4995 using mg_obj directly, use the SvTIED_obj macro to produce a
4996 new RV as needed. For glob "self-ties", we are tieing the PVIO
4997 with an RV obj pointing to the glob containing the PVIO. In
4998 this case, to avoid a reference loop, we need to weaken the
5002 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5003 obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5009 mg->mg_len = namlen;
5012 mg->mg_ptr = savepvn(name, namlen);
5013 else if (namlen == HEf_SVKEY) {
5014 /* Yes, this is casting away const. This is only for the case of
5015 HEf_SVKEY. I think we need to document this abberation of the
5016 constness of the API, rather than making name non-const, as
5017 that change propagating outwards a long way. */
5018 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5020 mg->mg_ptr = (char *) name;
5022 mg->mg_virtual = (MGVTBL *) vtable;
5026 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5031 =for apidoc sv_magic
5033 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5034 then adds a new magic item of type C<how> to the head of the magic list.
5036 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5037 handling of the C<name> and C<namlen> arguments.
5039 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5040 to add more than one instance of the same 'how'.
5046 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how,
5047 const char *const name, const I32 namlen)
5050 const MGVTBL *vtable;
5053 PERL_ARGS_ASSERT_SV_MAGIC;
5055 #ifdef PERL_OLD_COPY_ON_WRITE
5057 sv_force_normal_flags(sv, 0);
5059 if (SvREADONLY(sv)) {
5061 /* its okay to attach magic to shared strings; the subsequent
5062 * upgrade to PVMG will unshare the string */
5063 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5066 && how != PERL_MAGIC_regex_global
5067 && how != PERL_MAGIC_bm
5068 && how != PERL_MAGIC_fm
5069 && how != PERL_MAGIC_sv
5070 && how != PERL_MAGIC_backref
5073 Perl_croak(aTHX_ "%s", PL_no_modify);
5076 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5077 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5078 /* sv_magic() refuses to add a magic of the same 'how' as an
5081 if (how == PERL_MAGIC_taint) {
5083 /* Any scalar which already had taint magic on which someone
5084 (erroneously?) did SvIOK_on() or similar will now be
5085 incorrectly sporting public "OK" flags. */
5086 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5094 vtable = &PL_vtbl_sv;
5096 case PERL_MAGIC_overload:
5097 vtable = &PL_vtbl_amagic;
5099 case PERL_MAGIC_overload_elem:
5100 vtable = &PL_vtbl_amagicelem;
5102 case PERL_MAGIC_overload_table:
5103 vtable = &PL_vtbl_ovrld;
5106 vtable = &PL_vtbl_bm;
5108 case PERL_MAGIC_regdata:
5109 vtable = &PL_vtbl_regdata;
5111 case PERL_MAGIC_regdatum:
5112 vtable = &PL_vtbl_regdatum;
5114 case PERL_MAGIC_env:
5115 vtable = &PL_vtbl_env;
5118 vtable = &PL_vtbl_fm;
5120 case PERL_MAGIC_envelem:
5121 vtable = &PL_vtbl_envelem;
5123 case PERL_MAGIC_regex_global:
5124 vtable = &PL_vtbl_mglob;
5126 case PERL_MAGIC_isa:
5127 vtable = &PL_vtbl_isa;
5129 case PERL_MAGIC_isaelem:
5130 vtable = &PL_vtbl_isaelem;
5132 case PERL_MAGIC_nkeys:
5133 vtable = &PL_vtbl_nkeys;
5135 case PERL_MAGIC_dbfile:
5138 case PERL_MAGIC_dbline:
5139 vtable = &PL_vtbl_dbline;
5141 #ifdef USE_LOCALE_COLLATE
5142 case PERL_MAGIC_collxfrm:
5143 vtable = &PL_vtbl_collxfrm;
5145 #endif /* USE_LOCALE_COLLATE */
5146 case PERL_MAGIC_tied:
5147 vtable = &PL_vtbl_pack;
5149 case PERL_MAGIC_tiedelem:
5150 case PERL_MAGIC_tiedscalar:
5151 vtable = &PL_vtbl_packelem;
5154 vtable = &PL_vtbl_regexp;
5156 case PERL_MAGIC_sig:
5157 vtable = &PL_vtbl_sig;
5159 case PERL_MAGIC_sigelem:
5160 vtable = &PL_vtbl_sigelem;
5162 case PERL_MAGIC_taint:
5163 vtable = &PL_vtbl_taint;
5165 case PERL_MAGIC_uvar:
5166 vtable = &PL_vtbl_uvar;
5168 case PERL_MAGIC_vec:
5169 vtable = &PL_vtbl_vec;
5171 case PERL_MAGIC_arylen_p:
5172 case PERL_MAGIC_rhash:
5173 case PERL_MAGIC_symtab:
5174 case PERL_MAGIC_vstring:
5177 case PERL_MAGIC_utf8:
5178 vtable = &PL_vtbl_utf8;
5180 case PERL_MAGIC_substr:
5181 vtable = &PL_vtbl_substr;
5183 case PERL_MAGIC_defelem:
5184 vtable = &PL_vtbl_defelem;
5186 case PERL_MAGIC_arylen:
5187 vtable = &PL_vtbl_arylen;
5189 case PERL_MAGIC_pos:
5190 vtable = &PL_vtbl_pos;
5192 case PERL_MAGIC_backref:
5193 vtable = &PL_vtbl_backref;
5195 case PERL_MAGIC_hintselem:
5196 vtable = &PL_vtbl_hintselem;
5198 case PERL_MAGIC_hints:
5199 vtable = &PL_vtbl_hints;
5201 case PERL_MAGIC_ext:
5202 /* Reserved for use by extensions not perl internals. */
5203 /* Useful for attaching extension internal data to perl vars. */
5204 /* Note that multiple extensions may clash if magical scalars */
5205 /* etc holding private data from one are passed to another. */
5209 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5212 /* Rest of work is done else where */
5213 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5216 case PERL_MAGIC_taint:
5219 case PERL_MAGIC_ext:
5220 case PERL_MAGIC_dbfile:
5227 =for apidoc sv_unmagic
5229 Removes all magic of type C<type> from an SV.
5235 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5240 PERL_ARGS_ASSERT_SV_UNMAGIC;
5242 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5244 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5245 for (mg = *mgp; mg; mg = *mgp) {
5246 if (mg->mg_type == type) {
5247 const MGVTBL* const vtbl = mg->mg_virtual;
5248 *mgp = mg->mg_moremagic;
5249 if (vtbl && vtbl->svt_free)
5250 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
5251 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5253 Safefree(mg->mg_ptr);
5254 else if (mg->mg_len == HEf_SVKEY)
5255 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5256 else if (mg->mg_type == PERL_MAGIC_utf8)
5257 Safefree(mg->mg_ptr);
5259 if (mg->mg_flags & MGf_REFCOUNTED)
5260 SvREFCNT_dec(mg->mg_obj);
5264 mgp = &mg->mg_moremagic;
5267 if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */
5268 mg_magical(sv); /* else fix the flags now */
5272 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5278 =for apidoc sv_rvweaken
5280 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5281 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5282 push a back-reference to this RV onto the array of backreferences
5283 associated with that magic. If the RV is magical, set magic will be
5284 called after the RV is cleared.
5290 Perl_sv_rvweaken(pTHX_ SV *const sv)
5294 PERL_ARGS_ASSERT_SV_RVWEAKEN;
5296 if (!SvOK(sv)) /* let undefs pass */
5299 Perl_croak(aTHX_ "Can't weaken a nonreference");
5300 else if (SvWEAKREF(sv)) {
5301 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5305 Perl_sv_add_backref(aTHX_ tsv, sv);
5311 /* Give tsv backref magic if it hasn't already got it, then push a
5312 * back-reference to sv onto the array associated with the backref magic.
5315 /* A discussion about the backreferences array and its refcount:
5317 * The AV holding the backreferences is pointed to either as the mg_obj of
5318 * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5319 * structure, from the xhv_backreferences field. (A HV without hv_aux will
5320 * have the standard magic instead.) The array is created with a refcount
5321 * of 2. This means that if during global destruction the array gets
5322 * picked on first to have its refcount decremented by the random zapper,
5323 * it won't actually be freed, meaning it's still theere for when its
5324 * parent gets freed.
5325 * When the parent SV is freed, in the case of magic, the magic is freed,
5326 * Perl_magic_killbackrefs is called which decrements one refcount, then
5327 * mg_obj is freed which kills the second count.
5328 * In the vase of a HV being freed, one ref is removed by
5329 * Perl_hv_kill_backrefs, the other by Perl_sv_kill_backrefs, which it
5334 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5339 PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5341 if (SvTYPE(tsv) == SVt_PVHV) {
5342 AV **const avp = Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5346 /* There is no AV in the offical place - try a fixup. */
5347 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
5350 /* Aha. They've got it stowed in magic. Bring it back. */
5351 av = MUTABLE_AV(mg->mg_obj);
5352 /* Stop mg_free decreasing the refernce count. */
5354 /* Stop mg_free even calling the destructor, given that
5355 there's no AV to free up. */
5357 sv_unmagic(tsv, PERL_MAGIC_backref);
5361 SvREFCNT_inc_simple_void(av); /* see discussion above */
5366 const MAGIC *const mg
5367 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5369 av = MUTABLE_AV(mg->mg_obj);
5373 sv_magic(tsv, MUTABLE_SV(av), PERL_MAGIC_backref, NULL, 0);
5374 /* av now has a refcnt of 2; see discussion above */
5377 if (AvFILLp(av) >= AvMAX(av)) {
5378 av_extend(av, AvFILLp(av)+1);
5380 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5383 /* delete a back-reference to ourselves from the backref magic associated
5384 * with the SV we point to.
5388 S_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5395 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5397 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
5398 av = *Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5399 /* We mustn't attempt to "fix up" the hash here by moving the
5400 backreference array back to the hv_aux structure, as that is stored
5401 in the main HvARRAY(), and hfreentries assumes that no-one
5402 reallocates HvARRAY() while it is running. */
5405 const MAGIC *const mg
5406 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5408 av = MUTABLE_AV(mg->mg_obj);
5412 Perl_croak(aTHX_ "panic: del_backref");
5414 assert(!SvIS_FREED(av));
5417 /* We shouldn't be in here more than once, but for paranoia reasons lets
5419 for (i = AvFILLp(av); i >= 0; i--) {
5421 const SSize_t fill = AvFILLp(av);
5423 /* We weren't the last entry.
5424 An unordered list has this property that you can take the
5425 last element off the end to fill the hole, and it's still
5426 an unordered list :-)
5431 AvFILLp(av) = fill - 1;
5437 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5439 SV **svp = AvARRAY(av);
5441 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5442 PERL_UNUSED_ARG(sv);
5444 assert(!svp || !SvIS_FREED(av));
5446 SV *const *const last = svp + AvFILLp(av);
5448 while (svp <= last) {
5450 SV *const referrer = *svp;
5451 if (SvWEAKREF(referrer)) {
5452 /* XXX Should we check that it hasn't changed? */
5453 SvRV_set(referrer, 0);
5455 SvWEAKREF_off(referrer);
5456 SvSETMAGIC(referrer);
5457 } else if (SvTYPE(referrer) == SVt_PVGV ||
5458 SvTYPE(referrer) == SVt_PVLV) {
5459 /* You lookin' at me? */
5460 assert(GvSTASH(referrer));
5461 assert(GvSTASH(referrer) == (const HV *)sv);
5462 GvSTASH(referrer) = 0;
5465 "panic: magic_killbackrefs (flags=%"UVxf")",
5466 (UV)SvFLAGS(referrer));
5474 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5479 =for apidoc sv_insert
5481 Inserts a string at the specified offset/length within the SV. Similar to
5482 the Perl substr() function. Handles get magic.
5484 =for apidoc sv_insert_flags
5486 Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5492 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5497 register char *midend;
5498 register char *bigend;
5502 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5505 Perl_croak(aTHX_ "Can't modify non-existent substring");
5506 SvPV_force_flags(bigstr, curlen, flags);
5507 (void)SvPOK_only_UTF8(bigstr);
5508 if (offset + len > curlen) {
5509 SvGROW(bigstr, offset+len+1);
5510 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5511 SvCUR_set(bigstr, offset+len);
5515 i = littlelen - len;
5516 if (i > 0) { /* string might grow */
5517 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5518 mid = big + offset + len;
5519 midend = bigend = big + SvCUR(bigstr);
5522 while (midend > mid) /* shove everything down */
5523 *--bigend = *--midend;
5524 Move(little,big+offset,littlelen,char);
5525 SvCUR_set(bigstr, SvCUR(bigstr) + i);
5530 Move(little,SvPVX(bigstr)+offset,len,char);
5535 big = SvPVX(bigstr);
5538 bigend = big + SvCUR(bigstr);
5540 if (midend > bigend)
5541 Perl_croak(aTHX_ "panic: sv_insert");
5543 if (mid - big > bigend - midend) { /* faster to shorten from end */
5545 Move(little, mid, littlelen,char);
5548 i = bigend - midend;
5550 Move(midend, mid, i,char);
5554 SvCUR_set(bigstr, mid - big);
5556 else if ((i = mid - big)) { /* faster from front */
5557 midend -= littlelen;
5559 Move(big, midend - i, i, char);
5560 sv_chop(bigstr,midend-i);
5562 Move(little, mid, littlelen,char);
5564 else if (littlelen) {
5565 midend -= littlelen;
5566 sv_chop(bigstr,midend);
5567 Move(little,midend,littlelen,char);
5570 sv_chop(bigstr,midend);
5576 =for apidoc sv_replace
5578 Make the first argument a copy of the second, then delete the original.
5579 The target SV physically takes over ownership of the body of the source SV
5580 and inherits its flags; however, the target keeps any magic it owns,
5581 and any magic in the source is discarded.
5582 Note that this is a rather specialist SV copying operation; most of the
5583 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5589 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5592 const U32 refcnt = SvREFCNT(sv);
5594 PERL_ARGS_ASSERT_SV_REPLACE;
5596 SV_CHECK_THINKFIRST_COW_DROP(sv);
5597 if (SvREFCNT(nsv) != 1) {
5598 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5599 " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5601 if (SvMAGICAL(sv)) {
5605 sv_upgrade(nsv, SVt_PVMG);
5606 SvMAGIC_set(nsv, SvMAGIC(sv));
5607 SvFLAGS(nsv) |= SvMAGICAL(sv);
5609 SvMAGIC_set(sv, NULL);
5613 assert(!SvREFCNT(sv));
5614 #ifdef DEBUG_LEAKING_SCALARS
5615 sv->sv_flags = nsv->sv_flags;
5616 sv->sv_any = nsv->sv_any;
5617 sv->sv_refcnt = nsv->sv_refcnt;
5618 sv->sv_u = nsv->sv_u;
5620 StructCopy(nsv,sv,SV);
5622 if(SvTYPE(sv) == SVt_IV) {
5624 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5628 #ifdef PERL_OLD_COPY_ON_WRITE
5629 if (SvIsCOW_normal(nsv)) {
5630 /* We need to follow the pointers around the loop to make the
5631 previous SV point to sv, rather than nsv. */
5634 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5637 assert(SvPVX_const(current) == SvPVX_const(nsv));
5639 /* Make the SV before us point to the SV after us. */
5641 PerlIO_printf(Perl_debug_log, "previous is\n");
5643 PerlIO_printf(Perl_debug_log,
5644 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5645 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5647 SV_COW_NEXT_SV_SET(current, sv);
5650 SvREFCNT(sv) = refcnt;
5651 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5657 =for apidoc sv_clear
5659 Clear an SV: call any destructors, free up any memory used by the body,
5660 and free the body itself. The SV's head is I<not> freed, although
5661 its type is set to all 1's so that it won't inadvertently be assumed
5662 to be live during global destruction etc.
5663 This function should only be called when REFCNT is zero. Most of the time
5664 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5671 Perl_sv_clear(pTHX_ register SV *const sv)
5674 const U32 type = SvTYPE(sv);
5675 const struct body_details *const sv_type_details
5676 = bodies_by_type + type;
5679 PERL_ARGS_ASSERT_SV_CLEAR;
5680 assert(SvREFCNT(sv) == 0);
5681 assert(SvTYPE(sv) != SVTYPEMASK);
5683 if (type <= SVt_IV) {
5684 /* See the comment in sv.h about the collusion between this early
5685 return and the overloading of the NULL slots in the size table. */
5688 SvFLAGS(sv) &= SVf_BREAK;
5689 SvFLAGS(sv) |= SVTYPEMASK;
5694 if (PL_defstash && /* Still have a symbol table? */
5701 stash = SvSTASH(sv);
5702 destructor = StashHANDLER(stash,DESTROY);
5704 /* A constant subroutine can have no side effects, so
5705 don't bother calling it. */
5706 && !CvCONST(destructor)
5707 /* Don't bother calling an empty destructor */
5708 && (CvISXSUB(destructor)
5709 || (CvSTART(destructor)
5710 && (CvSTART(destructor)->op_next->op_type != OP_LEAVESUB))))
5712 SV* const tmpref = newRV(sv);
5713 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5715 PUSHSTACKi(PERLSI_DESTROY);
5720 call_sv(MUTABLE_SV(destructor), G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5726 if(SvREFCNT(tmpref) < 2) {
5727 /* tmpref is not kept alive! */
5729 SvRV_set(tmpref, NULL);
5732 SvREFCNT_dec(tmpref);
5734 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5738 if (PL_in_clean_objs)
5739 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5741 /* DESTROY gave object new lease on life */
5747 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5748 SvOBJECT_off(sv); /* Curse the object. */
5749 if (type != SVt_PVIO)
5750 --PL_sv_objcount; /* XXX Might want something more general */
5753 if (type >= SVt_PVMG) {
5754 if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5755 SvREFCNT_dec(SvOURSTASH(sv));
5756 } else if (SvMAGIC(sv))
5758 if (type == SVt_PVMG && SvPAD_TYPED(sv))
5759 SvREFCNT_dec(SvSTASH(sv));
5762 /* case SVt_BIND: */
5765 IoIFP(sv) != PerlIO_stdin() &&
5766 IoIFP(sv) != PerlIO_stdout() &&
5767 IoIFP(sv) != PerlIO_stderr())
5769 io_close(MUTABLE_IO(sv), FALSE);
5771 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5772 PerlDir_close(IoDIRP(sv));
5773 IoDIRP(sv) = (DIR*)NULL;
5774 Safefree(IoTOP_NAME(sv));
5775 Safefree(IoFMT_NAME(sv));
5776 Safefree(IoBOTTOM_NAME(sv));
5779 /* FIXME for plugins */
5780 pregfree2((REGEXP*) sv);
5784 cv_undef(MUTABLE_CV(sv));
5787 if (PL_last_swash_hv == (const HV *)sv) {
5788 PL_last_swash_hv = NULL;
5790 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
5791 hv_undef(MUTABLE_HV(sv));
5794 if (PL_comppad == MUTABLE_AV(sv)) {
5798 av_undef(MUTABLE_AV(sv));
5801 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5802 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5803 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5804 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5806 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5807 SvREFCNT_dec(LvTARG(sv));
5809 if (isGV_with_GP(sv)) {
5810 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
5811 && HvNAME_get(stash))
5812 mro_method_changed_in(stash);
5813 gp_free(MUTABLE_GV(sv));
5815 unshare_hek(GvNAME_HEK(sv));
5816 /* If we're in a stash, we don't own a reference to it. However it does
5817 have a back reference to us, which needs to be cleared. */
5818 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
5819 sv_del_backref(MUTABLE_SV(stash), sv);
5821 /* FIXME. There are probably more unreferenced pointers to SVs in the
5822 interpreter struct that we should check and tidy in a similar
5824 if ((const GV *)sv == PL_last_in_gv)
5825 PL_last_in_gv = NULL;
5831 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5834 SvOOK_offset(sv, offset);
5835 SvPV_set(sv, SvPVX_mutable(sv) - offset);
5836 /* Don't even bother with turning off the OOK flag. */
5841 SV * const target = SvRV(sv);
5843 sv_del_backref(target, sv);
5845 SvREFCNT_dec(target);
5848 #ifdef PERL_OLD_COPY_ON_WRITE
5849 else if (SvPVX_const(sv)) {
5852 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
5856 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5858 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5862 } else if (SvLEN(sv)) {
5863 Safefree(SvPVX_const(sv));
5867 else if (SvPVX_const(sv) && SvLEN(sv))
5868 Safefree(SvPVX_mutable(sv));
5869 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5870 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5879 SvFLAGS(sv) &= SVf_BREAK;
5880 SvFLAGS(sv) |= SVTYPEMASK;
5882 if (sv_type_details->arena) {
5883 del_body(((char *)SvANY(sv) + sv_type_details->offset),
5884 &PL_body_roots[type]);
5886 else if (sv_type_details->body_size) {
5887 my_safefree(SvANY(sv));
5892 =for apidoc sv_newref
5894 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5901 Perl_sv_newref(pTHX_ SV *const sv)
5903 PERL_UNUSED_CONTEXT;
5912 Decrement an SV's reference count, and if it drops to zero, call
5913 C<sv_clear> to invoke destructors and free up any memory used by
5914 the body; finally, deallocate the SV's head itself.
5915 Normally called via a wrapper macro C<SvREFCNT_dec>.
5921 Perl_sv_free(pTHX_ SV *const sv)
5926 if (SvREFCNT(sv) == 0) {
5927 if (SvFLAGS(sv) & SVf_BREAK)
5928 /* this SV's refcnt has been artificially decremented to
5929 * trigger cleanup */
5931 if (PL_in_clean_all) /* All is fair */
5933 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5934 /* make sure SvREFCNT(sv)==0 happens very seldom */
5935 SvREFCNT(sv) = (~(U32)0)/2;
5938 if (ckWARN_d(WARN_INTERNAL)) {
5939 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5940 Perl_dump_sv_child(aTHX_ sv);
5942 #ifdef DEBUG_LEAKING_SCALARS
5945 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5946 if (PL_warnhook == PERL_WARNHOOK_FATAL
5947 || ckDEAD(packWARN(WARN_INTERNAL))) {
5948 /* Don't let Perl_warner cause us to escape our fate: */
5952 /* This may not return: */
5953 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5954 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5955 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5958 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5963 if (--(SvREFCNT(sv)) > 0)
5965 Perl_sv_free2(aTHX_ sv);
5969 Perl_sv_free2(pTHX_ SV *const sv)
5973 PERL_ARGS_ASSERT_SV_FREE2;
5977 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
5978 "Attempt to free temp prematurely: SV 0x%"UVxf
5979 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5983 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5984 /* make sure SvREFCNT(sv)==0 happens very seldom */
5985 SvREFCNT(sv) = (~(U32)0)/2;
5996 Returns the length of the string in the SV. Handles magic and type
5997 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6003 Perl_sv_len(pTHX_ register SV *const sv)
6011 len = mg_length(sv);
6013 (void)SvPV_const(sv, len);
6018 =for apidoc sv_len_utf8
6020 Returns the number of characters in the string in an SV, counting wide
6021 UTF-8 bytes as a single character. Handles magic and type coercion.
6027 * The length is cached in PERL_MAGIC_utf8, in the mg_len field. Also the
6028 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6029 * (Note that the mg_len is not the length of the mg_ptr field.
6030 * This allows the cache to store the character length of the string without
6031 * needing to malloc() extra storage to attach to the mg_ptr.)
6036 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6042 return mg_length(sv);
6046 const U8 *s = (U8*)SvPV_const(sv, len);
6050 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6052 if (mg && mg->mg_len != -1) {
6054 if (PL_utf8cache < 0) {
6055 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6057 /* Need to turn the assertions off otherwise we may
6058 recurse infinitely while printing error messages.
6060 SAVEI8(PL_utf8cache);
6062 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
6063 " real %"UVuf" for %"SVf,
6064 (UV) ulen, (UV) real, SVfARG(sv));
6069 ulen = Perl_utf8_length(aTHX_ s, s + len);
6070 if (!SvREADONLY(sv)) {
6071 if (!mg && (SvTYPE(sv) < SVt_PVMG ||
6072 !(mg = mg_find(sv, PERL_MAGIC_utf8)))) {
6073 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
6074 &PL_vtbl_utf8, 0, 0);
6078 /* For now, treat "overflowed" as "still unknown".
6080 if (ulen != (STRLEN) mg->mg_len)
6086 return Perl_utf8_length(aTHX_ s, s + len);
6090 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6093 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6096 const U8 *s = start;
6098 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6100 while (s < send && uoffset--)
6103 /* This is the existing behaviour. Possibly it should be a croak, as
6104 it's actually a bounds error */
6110 /* Given the length of the string in both bytes and UTF-8 characters, decide
6111 whether to walk forwards or backwards to find the byte corresponding to
6112 the passed in UTF-8 offset. */
6114 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6115 const STRLEN uoffset, const STRLEN uend)
6117 STRLEN backw = uend - uoffset;
6119 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6121 if (uoffset < 2 * backw) {
6122 /* The assumption is that going forwards is twice the speed of going
6123 forward (that's where the 2 * backw comes from).
6124 (The real figure of course depends on the UTF-8 data.) */
6125 return sv_pos_u2b_forwards(start, send, uoffset);
6130 while (UTF8_IS_CONTINUATION(*send))
6133 return send - start;
6136 /* For the string representation of the given scalar, find the byte
6137 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
6138 give another position in the string, *before* the sought offset, which
6139 (which is always true, as 0, 0 is a valid pair of positions), which should
6140 help reduce the amount of linear searching.
6141 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6142 will be used to reduce the amount of linear searching. The cache will be
6143 created if necessary, and the found value offered to it for update. */
6145 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6146 const U8 *const send, const STRLEN uoffset,
6147 STRLEN uoffset0, STRLEN boffset0)
6149 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
6152 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6154 assert (uoffset >= uoffset0);
6158 && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6159 (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6160 if ((*mgp)->mg_ptr) {
6161 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6162 if (cache[0] == uoffset) {
6163 /* An exact match. */
6166 if (cache[2] == uoffset) {
6167 /* An exact match. */
6171 if (cache[0] < uoffset) {
6172 /* The cache already knows part of the way. */
6173 if (cache[0] > uoffset0) {
6174 /* The cache knows more than the passed in pair */
6175 uoffset0 = cache[0];
6176 boffset0 = cache[1];
6178 if ((*mgp)->mg_len != -1) {
6179 /* And we know the end too. */
6181 + sv_pos_u2b_midway(start + boffset0, send,
6183 (*mgp)->mg_len - uoffset0);
6186 + sv_pos_u2b_forwards(start + boffset0,
6187 send, uoffset - uoffset0);
6190 else if (cache[2] < uoffset) {
6191 /* We're between the two cache entries. */
6192 if (cache[2] > uoffset0) {
6193 /* and the cache knows more than the passed in pair */
6194 uoffset0 = cache[2];
6195 boffset0 = cache[3];
6199 + sv_pos_u2b_midway(start + boffset0,
6202 cache[0] - uoffset0);
6205 + sv_pos_u2b_midway(start + boffset0,
6208 cache[2] - uoffset0);
6212 else if ((*mgp)->mg_len != -1) {
6213 /* If we can take advantage of a passed in offset, do so. */
6214 /* In fact, offset0 is either 0, or less than offset, so don't
6215 need to worry about the other possibility. */
6217 + sv_pos_u2b_midway(start + boffset0, send,
6219 (*mgp)->mg_len - uoffset0);
6224 if (!found || PL_utf8cache < 0) {
6225 const STRLEN real_boffset
6226 = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6227 send, uoffset - uoffset0);
6229 if (found && PL_utf8cache < 0) {
6230 if (real_boffset != boffset) {
6231 /* Need to turn the assertions off otherwise we may recurse
6232 infinitely while printing error messages. */
6233 SAVEI8(PL_utf8cache);
6235 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
6236 " real %"UVuf" for %"SVf,
6237 (UV) boffset, (UV) real_boffset, SVfARG(sv));
6240 boffset = real_boffset;
6244 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6250 =for apidoc sv_pos_u2b_flags
6252 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6253 the start of the string, to a count of the equivalent number of bytes; if
6254 lenp is non-zero, it does the same to lenp, but this time starting from
6255 the offset, rather than from the start of the string. Handles type coercion.
6256 I<flags> is passed to C<SvPV_flags>, and usually should be
6257 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6263 * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6264 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6265 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6270 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6277 PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6279 start = (U8*)SvPV_flags(sv, len, flags);
6281 const U8 * const send = start + len;
6283 boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6286 /* Convert the relative offset to absolute. */
6287 const STRLEN uoffset2 = uoffset + *lenp;
6288 const STRLEN boffset2
6289 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6290 uoffset, boffset) - boffset;
6304 =for apidoc sv_pos_u2b
6306 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6307 the start of the string, to a count of the equivalent number of bytes; if
6308 lenp is non-zero, it does the same to lenp, but this time starting from
6309 the offset, rather than from the start of the string. Handles magic and
6312 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6319 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6320 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6321 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
6325 /* This function is subject to size and sign problems */
6328 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6330 PERL_ARGS_ASSERT_SV_POS_U2B;
6333 STRLEN ulen = (STRLEN)*lenp;
6334 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6335 SV_GMAGIC|SV_CONST_RETURN);
6338 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6339 SV_GMAGIC|SV_CONST_RETURN);
6343 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6344 byte length pairing. The (byte) length of the total SV is passed in too,
6345 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6346 may not have updated SvCUR, so we can't rely on reading it directly.
6348 The proffered utf8/byte length pairing isn't used if the cache already has
6349 two pairs, and swapping either for the proffered pair would increase the
6350 RMS of the intervals between known byte offsets.
6352 The cache itself consists of 4 STRLEN values
6353 0: larger UTF-8 offset
6354 1: corresponding byte offset
6355 2: smaller UTF-8 offset
6356 3: corresponding byte offset
6358 Unused cache pairs have the value 0, 0.
6359 Keeping the cache "backwards" means that the invariant of
6360 cache[0] >= cache[2] is maintained even with empty slots, which means that
6361 the code that uses it doesn't need to worry if only 1 entry has actually
6362 been set to non-zero. It also makes the "position beyond the end of the
6363 cache" logic much simpler, as the first slot is always the one to start
6367 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6368 const STRLEN utf8, const STRLEN blen)
6372 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6377 if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6378 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6379 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6381 (*mgp)->mg_len = -1;
6385 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6386 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6387 (*mgp)->mg_ptr = (char *) cache;
6391 if (PL_utf8cache < 0 && SvPOKp(sv)) {
6392 /* SvPOKp() because it's possible that sv has string overloading, and
6393 therefore is a reference, hence SvPVX() is actually a pointer.
6394 This cures the (very real) symptoms of RT 69422, but I'm not actually
6395 sure whether we should even be caching the results of UTF-8
6396 operations on overloading, given that nothing stops overloading
6397 returning a different value every time it's called. */
6398 const U8 *start = (const U8 *) SvPVX_const(sv);
6399 const STRLEN realutf8 = utf8_length(start, start + byte);
6401 if (realutf8 != utf8) {
6402 /* Need to turn the assertions off otherwise we may recurse
6403 infinitely while printing error messages. */
6404 SAVEI8(PL_utf8cache);
6406 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
6407 " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
6411 /* Cache is held with the later position first, to simplify the code
6412 that deals with unbounded ends. */
6414 ASSERT_UTF8_CACHE(cache);
6415 if (cache[1] == 0) {
6416 /* Cache is totally empty */
6419 } else if (cache[3] == 0) {
6420 if (byte > cache[1]) {
6421 /* New one is larger, so goes first. */
6422 cache[2] = cache[0];
6423 cache[3] = cache[1];
6431 #define THREEWAY_SQUARE(a,b,c,d) \
6432 ((float)((d) - (c))) * ((float)((d) - (c))) \
6433 + ((float)((c) - (b))) * ((float)((c) - (b))) \
6434 + ((float)((b) - (a))) * ((float)((b) - (a)))
6436 /* Cache has 2 slots in use, and we know three potential pairs.
6437 Keep the two that give the lowest RMS distance. Do the
6438 calcualation in bytes simply because we always know the byte
6439 length. squareroot has the same ordering as the positive value,
6440 so don't bother with the actual square root. */
6441 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6442 if (byte > cache[1]) {
6443 /* New position is after the existing pair of pairs. */
6444 const float keep_earlier
6445 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6446 const float keep_later
6447 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6449 if (keep_later < keep_earlier) {
6450 if (keep_later < existing) {
6451 cache[2] = cache[0];
6452 cache[3] = cache[1];
6458 if (keep_earlier < existing) {
6464 else if (byte > cache[3]) {
6465 /* New position is between the existing pair of pairs. */
6466 const float keep_earlier
6467 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6468 const float keep_later
6469 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6471 if (keep_later < keep_earlier) {
6472 if (keep_later < existing) {
6478 if (keep_earlier < existing) {
6485 /* New position is before the existing pair of pairs. */
6486 const float keep_earlier
6487 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6488 const float keep_later
6489 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6491 if (keep_later < keep_earlier) {
6492 if (keep_later < existing) {
6498 if (keep_earlier < existing) {
6499 cache[0] = cache[2];
6500 cache[1] = cache[3];
6507 ASSERT_UTF8_CACHE(cache);
6510 /* We already know all of the way, now we may be able to walk back. The same
6511 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6512 backward is half the speed of walking forward. */
6514 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6515 const U8 *end, STRLEN endu)
6517 const STRLEN forw = target - s;
6518 STRLEN backw = end - target;
6520 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6522 if (forw < 2 * backw) {
6523 return utf8_length(s, target);
6526 while (end > target) {
6528 while (UTF8_IS_CONTINUATION(*end)) {
6537 =for apidoc sv_pos_b2u
6539 Converts the value pointed to by offsetp from a count of bytes from the
6540 start of the string, to a count of the equivalent number of UTF-8 chars.
6541 Handles magic and type coercion.
6547 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6548 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6553 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
6556 const STRLEN byte = *offsetp;
6557 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
6563 PERL_ARGS_ASSERT_SV_POS_B2U;
6568 s = (const U8*)SvPV_const(sv, blen);
6571 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6577 && SvTYPE(sv) >= SVt_PVMG
6578 && (mg = mg_find(sv, PERL_MAGIC_utf8)))
6581 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
6582 if (cache[1] == byte) {
6583 /* An exact match. */
6584 *offsetp = cache[0];
6587 if (cache[3] == byte) {
6588 /* An exact match. */
6589 *offsetp = cache[2];
6593 if (cache[1] < byte) {
6594 /* We already know part of the way. */
6595 if (mg->mg_len != -1) {
6596 /* Actually, we know the end too. */
6598 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
6599 s + blen, mg->mg_len - cache[0]);
6601 len = cache[0] + utf8_length(s + cache[1], send);
6604 else if (cache[3] < byte) {
6605 /* We're between the two cached pairs, so we do the calculation
6606 offset by the byte/utf-8 positions for the earlier pair,
6607 then add the utf-8 characters from the string start to
6609 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6610 s + cache[1], cache[0] - cache[2])
6614 else { /* cache[3] > byte */
6615 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6619 ASSERT_UTF8_CACHE(cache);
6621 } else if (mg->mg_len != -1) {
6622 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
6626 if (!found || PL_utf8cache < 0) {
6627 const STRLEN real_len = utf8_length(s, send);
6629 if (found && PL_utf8cache < 0) {
6630 if (len != real_len) {
6631 /* Need to turn the assertions off otherwise we may recurse
6632 infinitely while printing error messages. */
6633 SAVEI8(PL_utf8cache);
6635 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
6636 " real %"UVuf" for %"SVf,
6637 (UV) len, (UV) real_len, SVfARG(sv));
6645 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
6651 Returns a boolean indicating whether the strings in the two SVs are
6652 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6653 coerce its args to strings if necessary.
6659 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
6668 SV* svrecode = NULL;
6675 /* if pv1 and pv2 are the same, second SvPV_const call may
6676 * invalidate pv1, so we may need to make a copy */
6677 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6678 pv1 = SvPV_const(sv1, cur1);
6679 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
6681 pv1 = SvPV_const(sv1, cur1);
6689 pv2 = SvPV_const(sv2, cur2);
6691 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6692 /* Differing utf8ness.
6693 * Do not UTF8size the comparands as a side-effect. */
6696 svrecode = newSVpvn(pv2, cur2);
6697 sv_recode_to_utf8(svrecode, PL_encoding);
6698 pv2 = SvPV_const(svrecode, cur2);
6701 svrecode = newSVpvn(pv1, cur1);
6702 sv_recode_to_utf8(svrecode, PL_encoding);
6703 pv1 = SvPV_const(svrecode, cur1);
6705 /* Now both are in UTF-8. */
6707 SvREFCNT_dec(svrecode);
6712 bool is_utf8 = TRUE;
6715 /* sv1 is the UTF-8 one,
6716 * if is equal it must be downgrade-able */
6717 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
6723 /* sv2 is the UTF-8 one,
6724 * if is equal it must be downgrade-able */
6725 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
6731 /* Downgrade not possible - cannot be eq */
6739 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6741 SvREFCNT_dec(svrecode);
6751 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6752 string in C<sv1> is less than, equal to, or greater than the string in
6753 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6754 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
6760 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
6764 const char *pv1, *pv2;
6767 SV *svrecode = NULL;
6774 pv1 = SvPV_const(sv1, cur1);
6781 pv2 = SvPV_const(sv2, cur2);
6783 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6784 /* Differing utf8ness.
6785 * Do not UTF8size the comparands as a side-effect. */
6788 svrecode = newSVpvn(pv2, cur2);
6789 sv_recode_to_utf8(svrecode, PL_encoding);
6790 pv2 = SvPV_const(svrecode, cur2);
6793 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6798 svrecode = newSVpvn(pv1, cur1);
6799 sv_recode_to_utf8(svrecode, PL_encoding);
6800 pv1 = SvPV_const(svrecode, cur1);
6803 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6809 cmp = cur2 ? -1 : 0;
6813 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6816 cmp = retval < 0 ? -1 : 1;
6817 } else if (cur1 == cur2) {
6820 cmp = cur1 < cur2 ? -1 : 1;
6824 SvREFCNT_dec(svrecode);
6832 =for apidoc sv_cmp_locale
6834 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6835 'use bytes' aware, handles get magic, and will coerce its args to strings
6836 if necessary. See also C<sv_cmp>.
6842 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
6845 #ifdef USE_LOCALE_COLLATE
6851 if (PL_collation_standard)
6855 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6857 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6859 if (!pv1 || !len1) {
6870 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6873 return retval < 0 ? -1 : 1;
6876 * When the result of collation is equality, that doesn't mean
6877 * that there are no differences -- some locales exclude some
6878 * characters from consideration. So to avoid false equalities,
6879 * we use the raw string as a tiebreaker.
6885 #endif /* USE_LOCALE_COLLATE */
6887 return sv_cmp(sv1, sv2);
6891 #ifdef USE_LOCALE_COLLATE
6894 =for apidoc sv_collxfrm
6896 Add Collate Transform magic to an SV if it doesn't already have it.
6898 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6899 scalar data of the variable, but transformed to such a format that a normal
6900 memory comparison can be used to compare the data according to the locale
6907 Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
6912 PERL_ARGS_ASSERT_SV_COLLXFRM;
6914 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6915 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6921 Safefree(mg->mg_ptr);
6922 s = SvPV_const(sv, len);
6923 if ((xf = mem_collxfrm(s, len, &xlen))) {
6925 #ifdef PERL_OLD_COPY_ON_WRITE
6927 sv_force_normal_flags(sv, 0);
6929 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6943 if (mg && mg->mg_ptr) {
6945 return mg->mg_ptr + sizeof(PL_collation_ix);
6953 #endif /* USE_LOCALE_COLLATE */
6958 Get a line from the filehandle and store it into the SV, optionally
6959 appending to the currently-stored string.
6965 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
6970 register STDCHAR rslast;
6971 register STDCHAR *bp;
6976 PERL_ARGS_ASSERT_SV_GETS;
6978 if (SvTHINKFIRST(sv))
6979 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6980 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6982 However, perlbench says it's slower, because the existing swipe code
6983 is faster than copy on write.
6984 Swings and roundabouts. */
6985 SvUPGRADE(sv, SVt_PV);
6990 if (PerlIO_isutf8(fp)) {
6992 sv_utf8_upgrade_nomg(sv);
6993 sv_pos_u2b(sv,&append,0);
6995 } else if (SvUTF8(sv)) {
6996 SV * const tsv = newSV(0);
6997 sv_gets(tsv, fp, 0);
6998 sv_utf8_upgrade_nomg(tsv);
6999 SvCUR_set(sv,append);
7002 goto return_string_or_null;
7007 if (PerlIO_isutf8(fp))
7010 if (IN_PERL_COMPILETIME) {
7011 /* we always read code in line mode */
7015 else if (RsSNARF(PL_rs)) {
7016 /* If it is a regular disk file use size from stat() as estimate
7017 of amount we are going to read -- may result in mallocing
7018 more memory than we really need if the layers below reduce
7019 the size we read (e.g. CRLF or a gzip layer).
7022 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
7023 const Off_t offset = PerlIO_tell(fp);
7024 if (offset != (Off_t) -1 && st.st_size + append > offset) {
7025 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7031 else if (RsRECORD(PL_rs)) {
7039 /* Grab the size of the record we're getting */
7040 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7041 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7044 /* VMS wants read instead of fread, because fread doesn't respect */
7045 /* RMS record boundaries. This is not necessarily a good thing to be */
7046 /* doing, but we've got no other real choice - except avoid stdio
7047 as implementation - perhaps write a :vms layer ?
7049 fd = PerlIO_fileno(fp);
7050 if (fd == -1) { /* in-memory file from PerlIO::Scalar */
7051 bytesread = PerlIO_read(fp, buffer, recsize);
7054 bytesread = PerlLIO_read(fd, buffer, recsize);
7057 bytesread = PerlIO_read(fp, buffer, recsize);
7061 SvCUR_set(sv, bytesread + append);
7062 buffer[bytesread] = '\0';
7063 goto return_string_or_null;
7065 else if (RsPARA(PL_rs)) {
7071 /* Get $/ i.e. PL_rs into same encoding as stream wants */
7072 if (PerlIO_isutf8(fp)) {
7073 rsptr = SvPVutf8(PL_rs, rslen);
7076 if (SvUTF8(PL_rs)) {
7077 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7078 Perl_croak(aTHX_ "Wide character in $/");
7081 rsptr = SvPV_const(PL_rs, rslen);
7085 rslast = rslen ? rsptr[rslen - 1] : '\0';
7087 if (rspara) { /* have to do this both before and after */
7088 do { /* to make sure file boundaries work right */
7091 i = PerlIO_getc(fp);
7095 PerlIO_ungetc(fp,i);
7101 /* See if we know enough about I/O mechanism to cheat it ! */
7103 /* This used to be #ifdef test - it is made run-time test for ease
7104 of abstracting out stdio interface. One call should be cheap
7105 enough here - and may even be a macro allowing compile
7109 if (PerlIO_fast_gets(fp)) {
7112 * We're going to steal some values from the stdio struct
7113 * and put EVERYTHING in the innermost loop into registers.
7115 register STDCHAR *ptr;
7119 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7120 /* An ungetc()d char is handled separately from the regular
7121 * buffer, so we getc() it back out and stuff it in the buffer.
7123 i = PerlIO_getc(fp);
7124 if (i == EOF) return 0;
7125 *(--((*fp)->_ptr)) = (unsigned char) i;
7129 /* Here is some breathtakingly efficient cheating */
7131 cnt = PerlIO_get_cnt(fp); /* get count into register */
7132 /* make sure we have the room */
7133 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7134 /* Not room for all of it
7135 if we are looking for a separator and room for some
7137 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7138 /* just process what we have room for */
7139 shortbuffered = cnt - SvLEN(sv) + append + 1;
7140 cnt -= shortbuffered;
7144 /* remember that cnt can be negative */
7145 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7150 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
7151 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7152 DEBUG_P(PerlIO_printf(Perl_debug_log,
7153 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7154 DEBUG_P(PerlIO_printf(Perl_debug_log,
7155 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7156 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7157 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7162 while (cnt > 0) { /* this | eat */
7164 if ((*bp++ = *ptr++) == rslast) /* really | dust */
7165 goto thats_all_folks; /* screams | sed :-) */
7169 Copy(ptr, bp, cnt, char); /* this | eat */
7170 bp += cnt; /* screams | dust */
7171 ptr += cnt; /* louder | sed :-) */
7176 if (shortbuffered) { /* oh well, must extend */
7177 cnt = shortbuffered;
7179 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7181 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7182 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7186 DEBUG_P(PerlIO_printf(Perl_debug_log,
7187 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7188 PTR2UV(ptr),(long)cnt));
7189 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7191 DEBUG_P(PerlIO_printf(Perl_debug_log,
7192 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7193 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7194 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7196 /* This used to call 'filbuf' in stdio form, but as that behaves like
7197 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7198 another abstraction. */
7199 i = PerlIO_getc(fp); /* get more characters */
7201 DEBUG_P(PerlIO_printf(Perl_debug_log,
7202 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7203 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7204 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7206 cnt = PerlIO_get_cnt(fp);
7207 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
7208 DEBUG_P(PerlIO_printf(Perl_debug_log,
7209 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7211 if (i == EOF) /* all done for ever? */
7212 goto thats_really_all_folks;
7214 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7216 SvGROW(sv, bpx + cnt + 2);
7217 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7219 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
7221 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
7222 goto thats_all_folks;
7226 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7227 memNE((char*)bp - rslen, rsptr, rslen))
7228 goto screamer; /* go back to the fray */
7229 thats_really_all_folks:
7231 cnt += shortbuffered;
7232 DEBUG_P(PerlIO_printf(Perl_debug_log,
7233 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7234 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
7235 DEBUG_P(PerlIO_printf(Perl_debug_log,
7236 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7237 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7238 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7240 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
7241 DEBUG_P(PerlIO_printf(Perl_debug_log,
7242 "Screamer: done, len=%ld, string=|%.*s|\n",
7243 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7247 /*The big, slow, and stupid way. */
7248 #ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
7249 STDCHAR *buf = NULL;
7250 Newx(buf, 8192, STDCHAR);
7258 register const STDCHAR * const bpe = buf + sizeof(buf);
7260 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7261 ; /* keep reading */
7265 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7266 /* Accomodate broken VAXC compiler, which applies U8 cast to
7267 * both args of ?: operator, causing EOF to change into 255
7270 i = (U8)buf[cnt - 1];
7276 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
7278 sv_catpvn(sv, (char *) buf, cnt);
7280 sv_setpvn(sv, (char *) buf, cnt);
7282 if (i != EOF && /* joy */
7284 SvCUR(sv) < rslen ||
7285 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7289 * If we're reading from a TTY and we get a short read,
7290 * indicating that the user hit his EOF character, we need
7291 * to notice it now, because if we try to read from the TTY
7292 * again, the EOF condition will disappear.
7294 * The comparison of cnt to sizeof(buf) is an optimization
7295 * that prevents unnecessary calls to feof().
7299 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7303 #ifdef USE_HEAP_INSTEAD_OF_STACK
7308 if (rspara) { /* have to do this both before and after */
7309 while (i != EOF) { /* to make sure file boundaries work right */
7310 i = PerlIO_getc(fp);
7312 PerlIO_ungetc(fp,i);
7318 return_string_or_null:
7319 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7325 Auto-increment of the value in the SV, doing string to numeric conversion
7326 if necessary. Handles 'get' magic.
7332 Perl_sv_inc(pTHX_ register SV *const sv)
7341 if (SvTHINKFIRST(sv)) {
7343 sv_force_normal_flags(sv, 0);
7344 if (SvREADONLY(sv)) {
7345 if (IN_PERL_RUNTIME)
7346 Perl_croak(aTHX_ "%s", PL_no_modify);
7350 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7352 i = PTR2IV(SvRV(sv));
7357 flags = SvFLAGS(sv);
7358 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7359 /* It's (privately or publicly) a float, but not tested as an
7360 integer, so test it to see. */
7362 flags = SvFLAGS(sv);
7364 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7365 /* It's publicly an integer, or privately an integer-not-float */
7366 #ifdef PERL_PRESERVE_IVUV
7370 if (SvUVX(sv) == UV_MAX)
7371 sv_setnv(sv, UV_MAX_P1);
7373 (void)SvIOK_only_UV(sv);
7374 SvUV_set(sv, SvUVX(sv) + 1);
7376 if (SvIVX(sv) == IV_MAX)
7377 sv_setuv(sv, (UV)IV_MAX + 1);
7379 (void)SvIOK_only(sv);
7380 SvIV_set(sv, SvIVX(sv) + 1);
7385 if (flags & SVp_NOK) {
7386 const NV was = SvNVX(sv);
7387 if (NV_OVERFLOWS_INTEGERS_AT &&
7388 was >= NV_OVERFLOWS_INTEGERS_AT) {
7389 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7390 "Lost precision when incrementing %" NVff " by 1",
7393 (void)SvNOK_only(sv);
7394 SvNV_set(sv, was + 1.0);
7398 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7399 if ((flags & SVTYPEMASK) < SVt_PVIV)
7400 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7401 (void)SvIOK_only(sv);
7406 while (isALPHA(*d)) d++;
7407 while (isDIGIT(*d)) d++;
7408 if (d < SvEND(sv)) {
7409 #ifdef PERL_PRESERVE_IVUV
7410 /* Got to punt this as an integer if needs be, but we don't issue
7411 warnings. Probably ought to make the sv_iv_please() that does
7412 the conversion if possible, and silently. */
7413 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7414 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7415 /* Need to try really hard to see if it's an integer.
7416 9.22337203685478e+18 is an integer.
7417 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7418 so $a="9.22337203685478e+18"; $a+0; $a++
7419 needs to be the same as $a="9.22337203685478e+18"; $a++
7426 /* sv_2iv *should* have made this an NV */
7427 if (flags & SVp_NOK) {
7428 (void)SvNOK_only(sv);
7429 SvNV_set(sv, SvNVX(sv) + 1.0);
7432 /* I don't think we can get here. Maybe I should assert this
7433 And if we do get here I suspect that sv_setnv will croak. NWC
7435 #if defined(USE_LONG_DOUBLE)
7436 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",
7437 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7439 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7440 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7443 #endif /* PERL_PRESERVE_IVUV */
7444 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7448 while (d >= SvPVX_const(sv)) {
7456 /* MKS: The original code here died if letters weren't consecutive.
7457 * at least it didn't have to worry about non-C locales. The
7458 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7459 * arranged in order (although not consecutively) and that only
7460 * [A-Za-z] are accepted by isALPHA in the C locale.
7462 if (*d != 'z' && *d != 'Z') {
7463 do { ++*d; } while (!isALPHA(*d));
7466 *(d--) -= 'z' - 'a';
7471 *(d--) -= 'z' - 'a' + 1;
7475 /* oh,oh, the number grew */
7476 SvGROW(sv, SvCUR(sv) + 2);
7477 SvCUR_set(sv, SvCUR(sv) + 1);
7478 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
7489 Auto-decrement of the value in the SV, doing string to numeric conversion
7490 if necessary. Handles 'get' magic.
7496 Perl_sv_dec(pTHX_ register SV *const sv)
7504 if (SvTHINKFIRST(sv)) {
7506 sv_force_normal_flags(sv, 0);
7507 if (SvREADONLY(sv)) {
7508 if (IN_PERL_RUNTIME)
7509 Perl_croak(aTHX_ "%s", PL_no_modify);
7513 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7515 i = PTR2IV(SvRV(sv));
7520 /* Unlike sv_inc we don't have to worry about string-never-numbers
7521 and keeping them magic. But we mustn't warn on punting */
7522 flags = SvFLAGS(sv);
7523 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7524 /* It's publicly an integer, or privately an integer-not-float */
7525 #ifdef PERL_PRESERVE_IVUV
7529 if (SvUVX(sv) == 0) {
7530 (void)SvIOK_only(sv);
7534 (void)SvIOK_only_UV(sv);
7535 SvUV_set(sv, SvUVX(sv) - 1);
7538 if (SvIVX(sv) == IV_MIN) {
7539 sv_setnv(sv, (NV)IV_MIN);
7543 (void)SvIOK_only(sv);
7544 SvIV_set(sv, SvIVX(sv) - 1);
7549 if (flags & SVp_NOK) {
7552 const NV was = SvNVX(sv);
7553 if (NV_OVERFLOWS_INTEGERS_AT &&
7554 was <= -NV_OVERFLOWS_INTEGERS_AT) {
7555 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7556 "Lost precision when decrementing %" NVff " by 1",
7559 (void)SvNOK_only(sv);
7560 SvNV_set(sv, was - 1.0);
7564 if (!(flags & SVp_POK)) {
7565 if ((flags & SVTYPEMASK) < SVt_PVIV)
7566 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7568 (void)SvIOK_only(sv);
7571 #ifdef PERL_PRESERVE_IVUV
7573 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7574 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7575 /* Need to try really hard to see if it's an integer.
7576 9.22337203685478e+18 is an integer.
7577 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7578 so $a="9.22337203685478e+18"; $a+0; $a--
7579 needs to be the same as $a="9.22337203685478e+18"; $a--
7586 /* sv_2iv *should* have made this an NV */
7587 if (flags & SVp_NOK) {
7588 (void)SvNOK_only(sv);
7589 SvNV_set(sv, SvNVX(sv) - 1.0);
7592 /* I don't think we can get here. Maybe I should assert this
7593 And if we do get here I suspect that sv_setnv will croak. NWC
7595 #if defined(USE_LONG_DOUBLE)
7596 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",
7597 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7599 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7600 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7604 #endif /* PERL_PRESERVE_IVUV */
7605 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
7608 /* this define is used to eliminate a chunk of duplicated but shared logic
7609 * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
7610 * used anywhere but here - yves
7612 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
7615 PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
7619 =for apidoc sv_mortalcopy
7621 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
7622 The new SV is marked as mortal. It will be destroyed "soon", either by an
7623 explicit call to FREETMPS, or by an implicit call at places such as
7624 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
7629 /* Make a string that will exist for the duration of the expression
7630 * evaluation. Actually, it may have to last longer than that, but
7631 * hopefully we won't free it until it has been assigned to a
7632 * permanent location. */
7635 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
7641 sv_setsv(sv,oldstr);
7642 PUSH_EXTEND_MORTAL__SV_C(sv);
7648 =for apidoc sv_newmortal
7650 Creates a new null SV which is mortal. The reference count of the SV is
7651 set to 1. It will be destroyed "soon", either by an explicit call to
7652 FREETMPS, or by an implicit call at places such as statement boundaries.
7653 See also C<sv_mortalcopy> and C<sv_2mortal>.
7659 Perl_sv_newmortal(pTHX)
7665 SvFLAGS(sv) = SVs_TEMP;
7666 PUSH_EXTEND_MORTAL__SV_C(sv);
7672 =for apidoc newSVpvn_flags
7674 Creates a new SV and copies a string into it. The reference count for the
7675 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7676 string. You are responsible for ensuring that the source string is at least
7677 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7678 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
7679 If C<SVs_TEMP> is set, then C<sv2mortal()> is called on the result before
7680 returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
7681 C<SVf_UTF8> flag will be set on the new SV.
7682 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
7684 #define newSVpvn_utf8(s, len, u) \
7685 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7691 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
7696 /* All the flags we don't support must be zero.
7697 And we're new code so I'm going to assert this from the start. */
7698 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
7700 sv_setpvn(sv,s,len);
7702 /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
7703 * and do what it does outselves here.
7704 * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
7705 * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
7706 * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
7707 * eleminate quite a few steps than it looks - Yves (explaining patch by gfx)
7710 SvFLAGS(sv) |= flags;
7712 if(flags & SVs_TEMP){
7713 PUSH_EXTEND_MORTAL__SV_C(sv);
7720 =for apidoc sv_2mortal
7722 Marks an existing SV as mortal. The SV will be destroyed "soon", either
7723 by an explicit call to FREETMPS, or by an implicit call at places such as
7724 statement boundaries. SvTEMP() is turned on which means that the SV's
7725 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7726 and C<sv_mortalcopy>.
7732 Perl_sv_2mortal(pTHX_ register SV *const sv)
7737 if (SvREADONLY(sv) && SvIMMORTAL(sv))
7739 PUSH_EXTEND_MORTAL__SV_C(sv);
7747 Creates a new SV and copies a string into it. The reference count for the
7748 SV is set to 1. If C<len> is zero, Perl will compute the length using
7749 strlen(). For efficiency, consider using C<newSVpvn> instead.
7755 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
7761 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
7766 =for apidoc newSVpvn
7768 Creates a new SV and copies a string into it. The reference count for the
7769 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7770 string. You are responsible for ensuring that the source string is at least
7771 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7777 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
7783 sv_setpvn(sv,s,len);
7788 =for apidoc newSVhek
7790 Creates a new SV from the hash key structure. It will generate scalars that
7791 point to the shared string table where possible. Returns a new (undefined)
7792 SV if the hek is NULL.
7798 Perl_newSVhek(pTHX_ const HEK *const hek)
7808 if (HEK_LEN(hek) == HEf_SVKEY) {
7809 return newSVsv(*(SV**)HEK_KEY(hek));
7811 const int flags = HEK_FLAGS(hek);
7812 if (flags & HVhek_WASUTF8) {
7814 Andreas would like keys he put in as utf8 to come back as utf8
7816 STRLEN utf8_len = HEK_LEN(hek);
7817 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7818 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
7821 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7823 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
7824 /* We don't have a pointer to the hv, so we have to replicate the
7825 flag into every HEK. This hv is using custom a hasing
7826 algorithm. Hence we can't return a shared string scalar, as
7827 that would contain the (wrong) hash value, and might get passed
7828 into an hv routine with a regular hash.
7829 Similarly, a hash that isn't using shared hash keys has to have
7830 the flag in every key so that we know not to try to call
7831 share_hek_kek on it. */
7833 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
7838 /* This will be overwhelminly the most common case. */
7840 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7841 more efficient than sharepvn(). */
7845 sv_upgrade(sv, SVt_PV);
7846 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7847 SvCUR_set(sv, HEK_LEN(hek));
7860 =for apidoc newSVpvn_share
7862 Creates a new SV with its SvPVX_const pointing to a shared string in the string
7863 table. If the string does not already exist in the table, it is created
7864 first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7865 value is used; otherwise the hash is computed. The string's hash can be later
7866 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7867 that as the string table is used for shared hash keys these strings will have
7868 SvPVX_const == HeKEY and hash lookup will avoid string compare.
7874 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7878 bool is_utf8 = FALSE;
7879 const char *const orig_src = src;
7882 STRLEN tmplen = -len;
7884 /* See the note in hv.c:hv_fetch() --jhi */
7885 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7889 PERL_HASH(hash, src, len);
7891 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
7892 changes here, update it there too. */
7893 sv_upgrade(sv, SVt_PV);
7894 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7902 if (src != orig_src)
7908 #if defined(PERL_IMPLICIT_CONTEXT)
7910 /* pTHX_ magic can't cope with varargs, so this is a no-context
7911 * version of the main function, (which may itself be aliased to us).
7912 * Don't access this version directly.
7916 Perl_newSVpvf_nocontext(const char *const pat, ...)
7922 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
7924 va_start(args, pat);
7925 sv = vnewSVpvf(pat, &args);
7932 =for apidoc newSVpvf
7934 Creates a new SV and initializes it with the string formatted like
7941 Perl_newSVpvf(pTHX_ const char *const pat, ...)
7946 PERL_ARGS_ASSERT_NEWSVPVF;
7948 va_start(args, pat);
7949 sv = vnewSVpvf(pat, &args);
7954 /* backend for newSVpvf() and newSVpvf_nocontext() */
7957 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
7962 PERL_ARGS_ASSERT_VNEWSVPVF;
7965 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
7972 Creates a new SV and copies a floating point value into it.
7973 The reference count for the SV is set to 1.
7979 Perl_newSVnv(pTHX_ const NV n)
7992 Creates a new SV and copies an integer into it. The reference count for the
7999 Perl_newSViv(pTHX_ const IV i)
8012 Creates a new SV and copies an unsigned integer into it.
8013 The reference count for the SV is set to 1.
8019 Perl_newSVuv(pTHX_ const UV u)
8030 =for apidoc newSV_type
8032 Creates a new SV, of the type specified. The reference count for the new SV
8039 Perl_newSV_type(pTHX_ const svtype type)
8044 sv_upgrade(sv, type);
8049 =for apidoc newRV_noinc
8051 Creates an RV wrapper for an SV. The reference count for the original
8052 SV is B<not> incremented.
8058 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8061 register SV *sv = newSV_type(SVt_IV);
8063 PERL_ARGS_ASSERT_NEWRV_NOINC;
8066 SvRV_set(sv, tmpRef);
8071 /* newRV_inc is the official function name to use now.
8072 * newRV_inc is in fact #defined to newRV in sv.h
8076 Perl_newRV(pTHX_ SV *const sv)
8080 PERL_ARGS_ASSERT_NEWRV;
8082 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8088 Creates a new SV which is an exact duplicate of the original SV.
8095 Perl_newSVsv(pTHX_ register SV *const old)
8102 if (SvTYPE(old) == SVTYPEMASK) {
8103 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8107 /* SV_GMAGIC is the default for sv_setv()
8108 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8109 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
8110 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8115 =for apidoc sv_reset
8117 Underlying implementation for the C<reset> Perl function.
8118 Note that the perl-level function is vaguely deprecated.
8124 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8127 char todo[PERL_UCHAR_MAX+1];
8129 PERL_ARGS_ASSERT_SV_RESET;
8134 if (!*s) { /* reset ?? searches */
8135 MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8137 const U32 count = mg->mg_len / sizeof(PMOP**);
8138 PMOP **pmp = (PMOP**) mg->mg_ptr;
8139 PMOP *const *const end = pmp + count;
8143 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8145 (*pmp)->op_pmflags &= ~PMf_USED;
8153 /* reset variables */
8155 if (!HvARRAY(stash))
8158 Zero(todo, 256, char);
8161 I32 i = (unsigned char)*s;
8165 max = (unsigned char)*s++;
8166 for ( ; i <= max; i++) {
8169 for (i = 0; i <= (I32) HvMAX(stash); i++) {
8171 for (entry = HvARRAY(stash)[i];
8173 entry = HeNEXT(entry))
8178 if (!todo[(U8)*HeKEY(entry)])
8180 gv = MUTABLE_GV(HeVAL(entry));
8183 if (SvTHINKFIRST(sv)) {
8184 if (!SvREADONLY(sv) && SvROK(sv))
8186 /* XXX Is this continue a bug? Why should THINKFIRST
8187 exempt us from resetting arrays and hashes? */
8191 if (SvTYPE(sv) >= SVt_PV) {
8193 if (SvPVX_const(sv) != NULL)
8201 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8203 Perl_die(aTHX_ "Can't reset %%ENV on this system");
8206 # if defined(USE_ENVIRON_ARRAY)
8209 # endif /* USE_ENVIRON_ARRAY */
8220 Using various gambits, try to get an IO from an SV: the IO slot if its a
8221 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8222 named after the PV if we're a string.
8228 Perl_sv_2io(pTHX_ SV *const sv)
8233 PERL_ARGS_ASSERT_SV_2IO;
8235 switch (SvTYPE(sv)) {
8237 io = MUTABLE_IO(sv);
8240 if (isGV_with_GP(sv)) {
8241 gv = MUTABLE_GV(sv);
8244 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8250 Perl_croak(aTHX_ PL_no_usym, "filehandle");
8252 return sv_2io(SvRV(sv));
8253 gv = gv_fetchsv(sv, 0, SVt_PVIO);
8259 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
8268 Using various gambits, try to get a CV from an SV; in addition, try if
8269 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8270 The flags in C<lref> are passed to gv_fetchsv.
8276 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8282 PERL_ARGS_ASSERT_SV_2CV;
8289 switch (SvTYPE(sv)) {
8293 return MUTABLE_CV(sv);
8300 if (isGV_with_GP(sv)) {
8301 gv = MUTABLE_GV(sv);
8310 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
8312 tryAMAGICunDEREF(to_cv);
8315 if (SvTYPE(sv) == SVt_PVCV) {
8316 cv = MUTABLE_CV(sv);
8321 else if(isGV_with_GP(sv))
8322 gv = MUTABLE_GV(sv);
8324 Perl_croak(aTHX_ "Not a subroutine reference");
8326 else if (isGV_with_GP(sv)) {
8328 gv = MUTABLE_GV(sv);
8331 gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
8337 /* Some flags to gv_fetchsv mean don't really create the GV */
8338 if (!isGV_with_GP(gv)) {
8344 if (lref && !GvCVu(gv)) {
8348 gv_efullname3(tmpsv, gv, NULL);
8349 /* XXX this is probably not what they think they're getting.
8350 * It has the same effect as "sub name;", i.e. just a forward
8352 newSUB(start_subparse(FALSE, 0),
8353 newSVOP(OP_CONST, 0, tmpsv),
8357 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
8358 SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8367 Returns true if the SV has a true value by Perl's rules.
8368 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8369 instead use an in-line version.
8375 Perl_sv_true(pTHX_ register SV *const sv)
8380 register const XPV* const tXpv = (XPV*)SvANY(sv);
8382 (tXpv->xpv_cur > 1 ||
8383 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8390 return SvIVX(sv) != 0;
8393 return SvNVX(sv) != 0.0;
8395 return sv_2bool(sv);
8401 =for apidoc sv_pvn_force
8403 Get a sensible string out of the SV somehow.
8404 A private implementation of the C<SvPV_force> macro for compilers which
8405 can't cope with complex macro expressions. Always use the macro instead.
8407 =for apidoc sv_pvn_force_flags
8409 Get a sensible string out of the SV somehow.
8410 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8411 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8412 implemented in terms of this function.
8413 You normally want to use the various wrapper macros instead: see
8414 C<SvPV_force> and C<SvPV_force_nomg>
8420 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8424 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8426 if (SvTHINKFIRST(sv) && !SvROK(sv))
8427 sv_force_normal_flags(sv, 0);
8437 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
8438 const char * const ref = sv_reftype(sv,0);
8440 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
8441 ref, OP_DESC(PL_op));
8443 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
8445 if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8446 || isGV_with_GP(sv))
8447 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8449 s = sv_2pv_flags(sv, &len, flags);
8453 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
8456 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
8457 SvGROW(sv, len + 1);
8458 Move(s,SvPVX(sv),len,char);
8460 SvPVX(sv)[len] = '\0';
8463 SvPOK_on(sv); /* validate pointer */
8465 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8466 PTR2UV(sv),SvPVX_const(sv)));
8469 return SvPVX_mutable(sv);
8473 =for apidoc sv_pvbyten_force
8475 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
8481 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
8483 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8485 sv_pvn_force(sv,lp);
8486 sv_utf8_downgrade(sv,0);
8492 =for apidoc sv_pvutf8n_force
8494 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
8500 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
8502 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8504 sv_pvn_force(sv,lp);
8505 sv_utf8_upgrade(sv);
8511 =for apidoc sv_reftype
8513 Returns a string describing what the SV is a reference to.
8519 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
8521 PERL_ARGS_ASSERT_SV_REFTYPE;
8523 /* The fact that I don't need to downcast to char * everywhere, only in ?:
8524 inside return suggests a const propagation bug in g++. */
8525 if (ob && SvOBJECT(sv)) {
8526 char * const name = HvNAME_get(SvSTASH(sv));
8527 return name ? name : (char *) "__ANON__";
8530 switch (SvTYPE(sv)) {
8545 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
8546 /* tied lvalues should appear to be
8547 * scalars for backwards compatitbility */
8548 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
8549 ? "SCALAR" : "LVALUE");
8550 case SVt_PVAV: return "ARRAY";
8551 case SVt_PVHV: return "HASH";
8552 case SVt_PVCV: return "CODE";
8553 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
8554 ? "GLOB" : "SCALAR");
8555 case SVt_PVFM: return "FORMAT";
8556 case SVt_PVIO: return "IO";
8557 case SVt_BIND: return "BIND";
8558 case SVt_REGEXP: return "REGEXP";
8559 default: return "UNKNOWN";
8565 =for apidoc sv_isobject
8567 Returns a boolean indicating whether the SV is an RV pointing to a blessed
8568 object. If the SV is not an RV, or if the object is not blessed, then this
8575 Perl_sv_isobject(pTHX_ SV *sv)
8591 Returns a boolean indicating whether the SV is blessed into the specified
8592 class. This does not check for subtypes; use C<sv_derived_from> to verify
8593 an inheritance relationship.
8599 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
8603 PERL_ARGS_ASSERT_SV_ISA;
8613 hvname = HvNAME_get(SvSTASH(sv));
8617 return strEQ(hvname, name);
8623 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
8624 it will be upgraded to one. If C<classname> is non-null then the new SV will
8625 be blessed in the specified package. The new SV is returned and its
8626 reference count is 1.
8632 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
8637 PERL_ARGS_ASSERT_NEWSVRV;
8641 SV_CHECK_THINKFIRST_COW_DROP(rv);
8642 (void)SvAMAGIC_off(rv);
8644 if (SvTYPE(rv) >= SVt_PVMG) {
8645 const U32 refcnt = SvREFCNT(rv);
8649 SvREFCNT(rv) = refcnt;
8651 sv_upgrade(rv, SVt_IV);
8652 } else if (SvROK(rv)) {
8653 SvREFCNT_dec(SvRV(rv));
8655 prepare_SV_for_RV(rv);
8663 HV* const stash = gv_stashpv(classname, GV_ADD);
8664 (void)sv_bless(rv, stash);
8670 =for apidoc sv_setref_pv
8672 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
8673 argument will be upgraded to an RV. That RV will be modified to point to
8674 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8675 into the SV. The C<classname> argument indicates the package for the
8676 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8677 will have a reference count of 1, and the RV will be returned.
8679 Do not use with other Perl types such as HV, AV, SV, CV, because those
8680 objects will become corrupted by the pointer copy process.
8682 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8688 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
8692 PERL_ARGS_ASSERT_SV_SETREF_PV;
8695 sv_setsv(rv, &PL_sv_undef);
8699 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
8704 =for apidoc sv_setref_iv
8706 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
8707 argument will be upgraded to an RV. That RV will be modified to point to
8708 the new SV. The C<classname> argument indicates the package for the
8709 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8710 will have a reference count of 1, and the RV will be returned.
8716 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
8718 PERL_ARGS_ASSERT_SV_SETREF_IV;
8720 sv_setiv(newSVrv(rv,classname), iv);
8725 =for apidoc sv_setref_uv
8727 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
8728 argument will be upgraded to an RV. That RV will be modified to point to
8729 the new SV. The C<classname> argument indicates the package for the
8730 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8731 will have a reference count of 1, and the RV will be returned.
8737 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
8739 PERL_ARGS_ASSERT_SV_SETREF_UV;
8741 sv_setuv(newSVrv(rv,classname), uv);
8746 =for apidoc sv_setref_nv
8748 Copies a double into a new SV, optionally blessing the SV. The C<rv>
8749 argument will be upgraded to an RV. That RV will be modified to point to
8750 the new SV. The C<classname> argument indicates the package for the
8751 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8752 will have a reference count of 1, and the RV will be returned.
8758 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
8760 PERL_ARGS_ASSERT_SV_SETREF_NV;
8762 sv_setnv(newSVrv(rv,classname), nv);
8767 =for apidoc sv_setref_pvn
8769 Copies a string into a new SV, optionally blessing the SV. The length of the
8770 string must be specified with C<n>. The C<rv> argument will be upgraded to
8771 an RV. That RV will be modified to point to the new SV. The C<classname>
8772 argument indicates the package for the blessing. Set C<classname> to
8773 C<NULL> to avoid the blessing. The new SV will have a reference count
8774 of 1, and the RV will be returned.
8776 Note that C<sv_setref_pv> copies the pointer while this copies the string.
8782 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
8783 const char *const pv, const STRLEN n)
8785 PERL_ARGS_ASSERT_SV_SETREF_PVN;
8787 sv_setpvn(newSVrv(rv,classname), pv, n);
8792 =for apidoc sv_bless
8794 Blesses an SV into a specified package. The SV must be an RV. The package
8795 must be designated by its stash (see C<gv_stashpv()>). The reference count
8796 of the SV is unaffected.
8802 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
8807 PERL_ARGS_ASSERT_SV_BLESS;
8810 Perl_croak(aTHX_ "Can't bless non-reference value");
8812 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8813 if (SvIsCOW(tmpRef))
8814 sv_force_normal_flags(tmpRef, 0);
8815 if (SvREADONLY(tmpRef))
8816 Perl_croak(aTHX_ "%s", PL_no_modify);
8817 if (SvOBJECT(tmpRef)) {
8818 if (SvTYPE(tmpRef) != SVt_PVIO)
8820 SvREFCNT_dec(SvSTASH(tmpRef));
8823 SvOBJECT_on(tmpRef);
8824 if (SvTYPE(tmpRef) != SVt_PVIO)
8826 SvUPGRADE(tmpRef, SVt_PVMG);
8827 SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
8832 (void)SvAMAGIC_off(sv);
8834 if(SvSMAGICAL(tmpRef))
8835 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8843 /* Downgrades a PVGV to a PVMG.
8847 S_sv_unglob(pTHX_ SV *const sv)
8852 SV * const temp = sv_newmortal();
8854 PERL_ARGS_ASSERT_SV_UNGLOB;
8856 assert(SvTYPE(sv) == SVt_PVGV);
8858 gv_efullname3(temp, MUTABLE_GV(sv), "*");
8861 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
8862 && HvNAME_get(stash))
8863 mro_method_changed_in(stash);
8864 gp_free(MUTABLE_GV(sv));
8867 sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
8871 if (GvNAME_HEK(sv)) {
8872 unshare_hek(GvNAME_HEK(sv));
8874 isGV_with_GP_off(sv);
8876 /* need to keep SvANY(sv) in the right arena */
8877 xpvmg = new_XPVMG();
8878 StructCopy(SvANY(sv), xpvmg, XPVMG);
8879 del_XPVGV(SvANY(sv));
8882 SvFLAGS(sv) &= ~SVTYPEMASK;
8883 SvFLAGS(sv) |= SVt_PVMG;
8885 /* Intentionally not calling any local SET magic, as this isn't so much a
8886 set operation as merely an internal storage change. */
8887 sv_setsv_flags(sv, temp, 0);
8891 =for apidoc sv_unref_flags
8893 Unsets the RV status of the SV, and decrements the reference count of
8894 whatever was being referenced by the RV. This can almost be thought of
8895 as a reversal of C<newSVrv>. The C<cflags> argument can contain
8896 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8897 (otherwise the decrementing is conditional on the reference count being
8898 different from one or the reference being a readonly SV).
8905 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
8907 SV* const target = SvRV(ref);
8909 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
8911 if (SvWEAKREF(ref)) {
8912 sv_del_backref(target, ref);
8914 SvRV_set(ref, NULL);
8917 SvRV_set(ref, NULL);
8919 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
8920 assigned to as BEGIN {$a = \"Foo"} will fail. */
8921 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8922 SvREFCNT_dec(target);
8923 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8924 sv_2mortal(target); /* Schedule for freeing later */
8928 =for apidoc sv_untaint
8930 Untaint an SV. Use C<SvTAINTED_off> instead.
8935 Perl_sv_untaint(pTHX_ SV *const sv)
8937 PERL_ARGS_ASSERT_SV_UNTAINT;
8939 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8940 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8947 =for apidoc sv_tainted
8949 Test an SV for taintedness. Use C<SvTAINTED> instead.
8954 Perl_sv_tainted(pTHX_ SV *const sv)
8956 PERL_ARGS_ASSERT_SV_TAINTED;
8958 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8959 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8960 if (mg && (mg->mg_len & 1) )
8967 =for apidoc sv_setpviv
8969 Copies an integer into the given SV, also updating its string value.
8970 Does not handle 'set' magic. See C<sv_setpviv_mg>.
8976 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
8978 char buf[TYPE_CHARS(UV)];
8980 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8982 PERL_ARGS_ASSERT_SV_SETPVIV;
8984 sv_setpvn(sv, ptr, ebuf - ptr);
8988 =for apidoc sv_setpviv_mg
8990 Like C<sv_setpviv>, but also handles 'set' magic.
8996 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
8998 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9004 #if defined(PERL_IMPLICIT_CONTEXT)
9006 /* pTHX_ magic can't cope with varargs, so this is a no-context
9007 * version of the main function, (which may itself be aliased to us).
9008 * Don't access this version directly.
9012 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9017 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9019 va_start(args, pat);
9020 sv_vsetpvf(sv, pat, &args);
9024 /* pTHX_ magic can't cope with varargs, so this is a no-context
9025 * version of the main function, (which may itself be aliased to us).
9026 * Don't access this version directly.
9030 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9035 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9037 va_start(args, pat);
9038 sv_vsetpvf_mg(sv, pat, &args);
9044 =for apidoc sv_setpvf
9046 Works like C<sv_catpvf> but copies the text into the SV instead of
9047 appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
9053 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9057 PERL_ARGS_ASSERT_SV_SETPVF;
9059 va_start(args, pat);
9060 sv_vsetpvf(sv, pat, &args);
9065 =for apidoc sv_vsetpvf
9067 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9068 appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
9070 Usually used via its frontend C<sv_setpvf>.
9076 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9078 PERL_ARGS_ASSERT_SV_VSETPVF;
9080 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9084 =for apidoc sv_setpvf_mg
9086 Like C<sv_setpvf>, but also handles 'set' magic.
9092 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9096 PERL_ARGS_ASSERT_SV_SETPVF_MG;
9098 va_start(args, pat);
9099 sv_vsetpvf_mg(sv, pat, &args);
9104 =for apidoc sv_vsetpvf_mg
9106 Like C<sv_vsetpvf>, but also handles 'set' magic.
9108 Usually used via its frontend C<sv_setpvf_mg>.
9114 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9116 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9118 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9122 #if defined(PERL_IMPLICIT_CONTEXT)
9124 /* pTHX_ magic can't cope with varargs, so this is a no-context
9125 * version of the main function, (which may itself be aliased to us).
9126 * Don't access this version directly.
9130 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9135 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9137 va_start(args, pat);
9138 sv_vcatpvf(sv, pat, &args);
9142 /* pTHX_ magic can't cope with varargs, so this is a no-context
9143 * version of the main function, (which may itself be aliased to us).
9144 * Don't access this version directly.
9148 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9153 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9155 va_start(args, pat);
9156 sv_vcatpvf_mg(sv, pat, &args);
9162 =for apidoc sv_catpvf
9164 Processes its arguments like C<sprintf> and appends the formatted
9165 output to an SV. If the appended data contains "wide" characters
9166 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9167 and characters >255 formatted with %c), the original SV might get
9168 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
9169 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9170 valid UTF-8; if the original SV was bytes, the pattern should be too.
9175 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9179 PERL_ARGS_ASSERT_SV_CATPVF;
9181 va_start(args, pat);
9182 sv_vcatpvf(sv, pat, &args);
9187 =for apidoc sv_vcatpvf
9189 Processes its arguments like C<vsprintf> and appends the formatted output
9190 to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
9192 Usually used via its frontend C<sv_catpvf>.
9198 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9200 PERL_ARGS_ASSERT_SV_VCATPVF;
9202 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9206 =for apidoc sv_catpvf_mg
9208 Like C<sv_catpvf>, but also handles 'set' magic.
9214 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9218 PERL_ARGS_ASSERT_SV_CATPVF_MG;
9220 va_start(args, pat);
9221 sv_vcatpvf_mg(sv, pat, &args);
9226 =for apidoc sv_vcatpvf_mg
9228 Like C<sv_vcatpvf>, but also handles 'set' magic.
9230 Usually used via its frontend C<sv_catpvf_mg>.
9236 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9238 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9240 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9245 =for apidoc sv_vsetpvfn
9247 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9250 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9256 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9257 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9259 PERL_ARGS_ASSERT_SV_VSETPVFN;
9262 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9267 * Warn of missing argument to sprintf, and then return a defined value
9268 * to avoid inappropriate "use of uninit" warnings [perl #71000].
9270 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9272 S_vcatpvfn_missing_argument(pTHX) {
9273 if (ckWARN(WARN_MISSING)) {
9274 Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9275 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9282 S_expect_number(pTHX_ char **const pattern)
9287 PERL_ARGS_ASSERT_EXPECT_NUMBER;
9289 switch (**pattern) {
9290 case '1': case '2': case '3':
9291 case '4': case '5': case '6':
9292 case '7': case '8': case '9':
9293 var = *(*pattern)++ - '0';
9294 while (isDIGIT(**pattern)) {
9295 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9297 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9305 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9307 const int neg = nv < 0;
9310 PERL_ARGS_ASSERT_F0CONVERT;
9318 if (uv & 1 && uv == nv)
9319 uv--; /* Round to even */
9321 const unsigned dig = uv % 10;
9334 =for apidoc sv_vcatpvfn
9336 Processes its arguments like C<vsprintf> and appends the formatted output
9337 to an SV. Uses an array of SVs if the C style variable argument list is
9338 missing (NULL). When running with taint checks enabled, indicates via
9339 C<maybe_tainted> if results are untrustworthy (often due to the use of
9342 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9348 #define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
9349 vecstr = (U8*)SvPV_const(vecsv,veclen);\
9350 vec_utf8 = DO_UTF8(vecsv);
9352 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9355 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9356 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9364 static const char nullstr[] = "(null)";
9366 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
9367 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
9369 /* Times 4: a decimal digit takes more than 3 binary digits.
9370 * NV_DIG: mantissa takes than many decimal digits.
9371 * Plus 32: Playing safe. */
9372 char ebuf[IV_DIG * 4 + NV_DIG + 32];
9373 /* large enough for "%#.#f" --chip */
9374 /* what about long double NVs? --jhi */
9376 PERL_ARGS_ASSERT_SV_VCATPVFN;
9377 PERL_UNUSED_ARG(maybe_tainted);
9379 /* no matter what, this is a string now */
9380 (void)SvPV_force(sv, origlen);
9382 /* special-case "", "%s", and "%-p" (SVf - see below) */
9385 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
9387 const char * const s = va_arg(*args, char*);
9388 sv_catpv(sv, s ? s : nullstr);
9390 else if (svix < svmax) {
9391 sv_catsv(sv, *svargs);
9394 S_vcatpvfn_missing_argument(aTHX);
9397 if (args && patlen == 3 && pat[0] == '%' &&
9398 pat[1] == '-' && pat[2] == 'p') {
9399 argsv = MUTABLE_SV(va_arg(*args, void*));
9400 sv_catsv(sv, argsv);
9404 #ifndef USE_LONG_DOUBLE
9405 /* special-case "%.<number>[gf]" */
9406 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
9407 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9408 unsigned digits = 0;
9412 while (*pp >= '0' && *pp <= '9')
9413 digits = 10 * digits + (*pp++ - '0');
9414 if (pp - pat == (int)patlen - 1 && svix < svmax) {
9415 const NV nv = SvNV(*svargs);
9417 /* Add check for digits != 0 because it seems that some
9418 gconverts are buggy in this case, and we don't yet have
9419 a Configure test for this. */
9420 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9421 /* 0, point, slack */
9422 Gconvert(nv, (int)digits, 0, ebuf);
9424 if (*ebuf) /* May return an empty string for digits==0 */
9427 } else if (!digits) {
9430 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9431 sv_catpvn(sv, p, l);
9437 #endif /* !USE_LONG_DOUBLE */
9439 if (!args && svix < svmax && DO_UTF8(*svargs))
9442 patend = (char*)pat + patlen;
9443 for (p = (char*)pat; p < patend; p = q) {
9446 bool vectorize = FALSE;
9447 bool vectorarg = FALSE;
9448 bool vec_utf8 = FALSE;
9454 bool has_precis = FALSE;
9456 const I32 osvix = svix;
9457 bool is_utf8 = FALSE; /* is this item utf8? */
9458 #ifdef HAS_LDBL_SPRINTF_BUG
9459 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9460 with sfio - Allen <allens@cpan.org> */
9461 bool fix_ldbl_sprintf_bug = FALSE;
9465 U8 utf8buf[UTF8_MAXBYTES+1];
9466 STRLEN esignlen = 0;
9468 const char *eptr = NULL;
9469 const char *fmtstart;
9472 const U8 *vecstr = NULL;
9479 /* we need a long double target in case HAS_LONG_DOUBLE but
9482 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9490 const char *dotstr = ".";
9491 STRLEN dotstrlen = 1;
9492 I32 efix = 0; /* explicit format parameter index */
9493 I32 ewix = 0; /* explicit width index */
9494 I32 epix = 0; /* explicit precision index */
9495 I32 evix = 0; /* explicit vector index */
9496 bool asterisk = FALSE;
9498 /* echo everything up to the next format specification */
9499 for (q = p; q < patend && *q != '%'; ++q) ;
9501 if (has_utf8 && !pat_utf8)
9502 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9504 sv_catpvn(sv, p, q - p);
9513 We allow format specification elements in this order:
9514 \d+\$ explicit format parameter index
9516 v|\*(\d+\$)?v vector with optional (optionally specified) arg
9517 0 flag (as above): repeated to allow "v02"
9518 \d+|\*(\d+\$)? width using optional (optionally specified) arg
9519 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9521 [%bcdefginopsuxDFOUX] format (mandatory)
9526 As of perl5.9.3, printf format checking is on by default.
9527 Internally, perl uses %p formats to provide an escape to
9528 some extended formatting. This block deals with those
9529 extensions: if it does not match, (char*)q is reset and
9530 the normal format processing code is used.
9532 Currently defined extensions are:
9533 %p include pointer address (standard)
9534 %-p (SVf) include an SV (previously %_)
9535 %-<num>p include an SV with precision <num>
9536 %<num>p reserved for future extensions
9538 Robin Barker 2005-07-14
9540 %1p (VDf) removed. RMB 2007-10-19
9547 n = expect_number(&q);
9554 argsv = MUTABLE_SV(va_arg(*args, void*));
9555 eptr = SvPV_const(argsv, elen);
9561 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
9562 "internal %%<num>p might conflict with future printf extensions");
9568 if ( (width = expect_number(&q)) ) {
9583 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9612 if ( (ewix = expect_number(&q)) )
9621 if ((vectorarg = asterisk)) {
9634 width = expect_number(&q);
9640 vecsv = va_arg(*args, SV*);
9642 vecsv = (evix > 0 && evix <= svmax)
9643 ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
9645 vecsv = svix < svmax
9646 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
9648 dotstr = SvPV_const(vecsv, dotstrlen);
9649 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
9650 bad with tied or overloaded values that return UTF8. */
9653 else if (has_utf8) {
9654 vecsv = sv_mortalcopy(vecsv);
9655 sv_utf8_upgrade(vecsv);
9656 dotstr = SvPV_const(vecsv, dotstrlen);
9663 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
9664 vecsv = svargs[efix ? efix-1 : svix++];
9665 vecstr = (U8*)SvPV_const(vecsv,veclen);
9666 vec_utf8 = DO_UTF8(vecsv);
9668 /* if this is a version object, we need to convert
9669 * back into v-string notation and then let the
9670 * vectorize happen normally
9672 if (sv_derived_from(vecsv, "version")) {
9673 char *version = savesvpv(vecsv);
9674 if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
9675 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9676 "vector argument not supported with alpha versions");
9679 vecsv = sv_newmortal();
9680 scan_vstring(version, version + veclen, vecsv);
9681 vecstr = (U8*)SvPV_const(vecsv, veclen);
9682 vec_utf8 = DO_UTF8(vecsv);
9694 i = va_arg(*args, int);
9696 i = (ewix ? ewix <= svmax : svix < svmax) ?
9697 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9699 width = (i < 0) ? -i : i;
9709 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
9711 /* XXX: todo, support specified precision parameter */
9715 i = va_arg(*args, int);
9717 i = (ewix ? ewix <= svmax : svix < svmax)
9718 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9720 has_precis = !(i < 0);
9725 precis = precis * 10 + (*q++ - '0');
9734 case 'I': /* Ix, I32x, and I64x */
9736 if (q[1] == '6' && q[2] == '4') {
9742 if (q[1] == '3' && q[2] == '2') {
9752 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9763 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9764 if (*(q + 1) == 'l') { /* lld, llf */
9790 if (!vectorize && !args) {
9792 const I32 i = efix-1;
9793 argsv = (i >= 0 && i < svmax)
9794 ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
9796 argsv = (svix >= 0 && svix < svmax)
9797 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
9808 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
9810 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
9812 eptr = (char*)utf8buf;
9813 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
9827 eptr = va_arg(*args, char*);
9829 elen = strlen(eptr);
9831 eptr = (char *)nullstr;
9832 elen = sizeof nullstr - 1;
9836 eptr = SvPV_const(argsv, elen);
9837 if (DO_UTF8(argsv)) {
9838 STRLEN old_precis = precis;
9839 if (has_precis && precis < elen) {
9840 STRLEN ulen = sv_len_utf8(argsv);
9841 I32 p = precis > ulen ? ulen : precis;
9842 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
9845 if (width) { /* fudge width (can't fudge elen) */
9846 if (has_precis && precis < elen)
9847 width += precis - old_precis;
9849 width += elen - sv_len_utf8(argsv);
9856 if (has_precis && precis < elen)
9863 if (alt || vectorize)
9865 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
9886 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9895 esignbuf[esignlen++] = plus;
9899 case 'h': iv = (short)va_arg(*args, int); break;
9900 case 'l': iv = va_arg(*args, long); break;
9901 case 'V': iv = va_arg(*args, IV); break;
9902 default: iv = va_arg(*args, int); break;
9905 iv = va_arg(*args, Quad_t); break;
9912 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
9914 case 'h': iv = (short)tiv; break;
9915 case 'l': iv = (long)tiv; break;
9917 default: iv = tiv; break;
9920 iv = (Quad_t)tiv; break;
9926 if ( !vectorize ) /* we already set uv above */
9931 esignbuf[esignlen++] = plus;
9935 esignbuf[esignlen++] = '-';
9979 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9990 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
9991 case 'l': uv = va_arg(*args, unsigned long); break;
9992 case 'V': uv = va_arg(*args, UV); break;
9993 default: uv = va_arg(*args, unsigned); break;
9996 uv = va_arg(*args, Uquad_t); break;
10003 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10005 case 'h': uv = (unsigned short)tuv; break;
10006 case 'l': uv = (unsigned long)tuv; break;
10008 default: uv = tuv; break;
10011 uv = (Uquad_t)tuv; break;
10020 char *ptr = ebuf + sizeof ebuf;
10021 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10027 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10031 } while (uv >>= 4);
10033 esignbuf[esignlen++] = '0';
10034 esignbuf[esignlen++] = c; /* 'x' or 'X' */
10040 *--ptr = '0' + dig;
10041 } while (uv >>= 3);
10042 if (alt && *ptr != '0')
10048 *--ptr = '0' + dig;
10049 } while (uv >>= 1);
10051 esignbuf[esignlen++] = '0';
10052 esignbuf[esignlen++] = c;
10055 default: /* it had better be ten or less */
10058 *--ptr = '0' + dig;
10059 } while (uv /= base);
10062 elen = (ebuf + sizeof ebuf) - ptr;
10066 zeros = precis - elen;
10067 else if (precis == 0 && elen == 1 && *eptr == '0'
10068 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10071 /* a precision nullifies the 0 flag. */
10078 /* FLOATING POINT */
10081 c = 'f'; /* maybe %F isn't supported here */
10083 case 'e': case 'E':
10085 case 'g': case 'G':
10089 /* This is evil, but floating point is even more evil */
10091 /* for SV-style calling, we can only get NV
10092 for C-style calling, we assume %f is double;
10093 for simplicity we allow any of %Lf, %llf, %qf for long double
10097 #if defined(USE_LONG_DOUBLE)
10101 /* [perl #20339] - we should accept and ignore %lf rather than die */
10105 #if defined(USE_LONG_DOUBLE)
10106 intsize = args ? 0 : 'q';
10110 #if defined(HAS_LONG_DOUBLE)
10119 /* now we need (long double) if intsize == 'q', else (double) */
10121 #if LONG_DOUBLESIZE > DOUBLESIZE
10123 va_arg(*args, long double) :
10124 va_arg(*args, double)
10126 va_arg(*args, double)
10131 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10132 else. frexp() has some unspecified behaviour for those three */
10133 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10135 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10136 will cast our (long double) to (double) */
10137 (void)Perl_frexp(nv, &i);
10138 if (i == PERL_INT_MIN)
10139 Perl_die(aTHX_ "panic: frexp");
10141 need = BIT_DIGITS(i);
10143 need += has_precis ? precis : 6; /* known default */
10148 #ifdef HAS_LDBL_SPRINTF_BUG
10149 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10150 with sfio - Allen <allens@cpan.org> */
10153 # define MY_DBL_MAX DBL_MAX
10154 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10155 # if DOUBLESIZE >= 8
10156 # define MY_DBL_MAX 1.7976931348623157E+308L
10158 # define MY_DBL_MAX 3.40282347E+38L
10162 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10163 # define MY_DBL_MAX_BUG 1L
10165 # define MY_DBL_MAX_BUG MY_DBL_MAX
10169 # define MY_DBL_MIN DBL_MIN
10170 # else /* XXX guessing! -Allen */
10171 # if DOUBLESIZE >= 8
10172 # define MY_DBL_MIN 2.2250738585072014E-308L
10174 # define MY_DBL_MIN 1.17549435E-38L
10178 if ((intsize == 'q') && (c == 'f') &&
10179 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10180 (need < DBL_DIG)) {
10181 /* it's going to be short enough that
10182 * long double precision is not needed */
10184 if ((nv <= 0L) && (nv >= -0L))
10185 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10187 /* would use Perl_fp_class as a double-check but not
10188 * functional on IRIX - see perl.h comments */
10190 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10191 /* It's within the range that a double can represent */
10192 #if defined(DBL_MAX) && !defined(DBL_MIN)
10193 if ((nv >= ((long double)1/DBL_MAX)) ||
10194 (nv <= (-(long double)1/DBL_MAX)))
10196 fix_ldbl_sprintf_bug = TRUE;
10199 if (fix_ldbl_sprintf_bug == TRUE) {
10209 # undef MY_DBL_MAX_BUG
10212 #endif /* HAS_LDBL_SPRINTF_BUG */
10214 need += 20; /* fudge factor */
10215 if (PL_efloatsize < need) {
10216 Safefree(PL_efloatbuf);
10217 PL_efloatsize = need + 20; /* more fudge */
10218 Newx(PL_efloatbuf, PL_efloatsize, char);
10219 PL_efloatbuf[0] = '\0';
10222 if ( !(width || left || plus || alt) && fill != '0'
10223 && has_precis && intsize != 'q' ) { /* Shortcuts */
10224 /* See earlier comment about buggy Gconvert when digits,
10226 if ( c == 'g' && precis) {
10227 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10228 /* May return an empty string for digits==0 */
10229 if (*PL_efloatbuf) {
10230 elen = strlen(PL_efloatbuf);
10231 goto float_converted;
10233 } else if ( c == 'f' && !precis) {
10234 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10239 char *ptr = ebuf + sizeof ebuf;
10242 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10243 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10244 if (intsize == 'q') {
10245 /* Copy the one or more characters in a long double
10246 * format before the 'base' ([efgEFG]) character to
10247 * the format string. */
10248 static char const prifldbl[] = PERL_PRIfldbl;
10249 char const *p = prifldbl + sizeof(prifldbl) - 3;
10250 while (p >= prifldbl) { *--ptr = *p--; }
10255 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10260 do { *--ptr = '0' + (base % 10); } while (base /= 10);
10272 /* No taint. Otherwise we are in the strange situation
10273 * where printf() taints but print($float) doesn't.
10275 #if defined(HAS_LONG_DOUBLE)
10276 elen = ((intsize == 'q')
10277 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10278 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10280 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10284 eptr = PL_efloatbuf;
10292 i = SvCUR(sv) - origlen;
10295 case 'h': *(va_arg(*args, short*)) = i; break;
10296 default: *(va_arg(*args, int*)) = i; break;
10297 case 'l': *(va_arg(*args, long*)) = i; break;
10298 case 'V': *(va_arg(*args, IV*)) = i; break;
10301 *(va_arg(*args, Quad_t*)) = i; break;
10308 sv_setuv_mg(argsv, (UV)i);
10309 continue; /* not "break" */
10316 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10317 && ckWARN(WARN_PRINTF))
10319 SV * const msg = sv_newmortal();
10320 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10321 (PL_op->op_type == OP_PRTF) ? "" : "s");
10322 if (fmtstart < patend) {
10323 const char * const fmtend = q < patend ? q : patend;
10325 sv_catpvs(msg, "\"%");
10326 for (f = fmtstart; f < fmtend; f++) {
10328 sv_catpvn(msg, f, 1);
10330 Perl_sv_catpvf(aTHX_ msg,
10331 "\\%03"UVof, (UV)*f & 0xFF);
10334 sv_catpvs(msg, "\"");
10336 sv_catpvs(msg, "end of string");
10338 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
10341 /* output mangled stuff ... */
10347 /* ... right here, because formatting flags should not apply */
10348 SvGROW(sv, SvCUR(sv) + elen + 1);
10350 Copy(eptr, p, elen, char);
10353 SvCUR_set(sv, p - SvPVX_const(sv));
10355 continue; /* not "break" */
10358 if (is_utf8 != has_utf8) {
10361 sv_utf8_upgrade(sv);
10364 const STRLEN old_elen = elen;
10365 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
10366 sv_utf8_upgrade(nsv);
10367 eptr = SvPVX_const(nsv);
10370 if (width) { /* fudge width (can't fudge elen) */
10371 width += elen - old_elen;
10377 have = esignlen + zeros + elen;
10379 Perl_croak_nocontext("%s", PL_memory_wrap);
10381 need = (have > width ? have : width);
10384 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
10385 Perl_croak_nocontext("%s", PL_memory_wrap);
10386 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
10388 if (esignlen && fill == '0') {
10390 for (i = 0; i < (int)esignlen; i++)
10391 *p++ = esignbuf[i];
10393 if (gap && !left) {
10394 memset(p, fill, gap);
10397 if (esignlen && fill != '0') {
10399 for (i = 0; i < (int)esignlen; i++)
10400 *p++ = esignbuf[i];
10404 for (i = zeros; i; i--)
10408 Copy(eptr, p, elen, char);
10412 memset(p, ' ', gap);
10417 Copy(dotstr, p, dotstrlen, char);
10421 vectorize = FALSE; /* done iterating over vecstr */
10428 SvCUR_set(sv, p - SvPVX_const(sv));
10437 /* =========================================================================
10439 =head1 Cloning an interpreter
10441 All the macros and functions in this section are for the private use of
10442 the main function, perl_clone().
10444 The foo_dup() functions make an exact copy of an existing foo thingy.
10445 During the course of a cloning, a hash table is used to map old addresses
10446 to new addresses. The table is created and manipulated with the
10447 ptr_table_* functions.
10451 * =========================================================================*/
10454 #if defined(USE_ITHREADS)
10456 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
10457 #ifndef GpREFCNT_inc
10458 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10462 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
10463 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
10464 If this changes, please unmerge ss_dup.
10465 Likewise, sv_dup_inc_multiple() relies on this fact. */
10466 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
10467 #define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup(s,t))
10468 #define av_dup(s,t) MUTABLE_AV(sv_dup((const SV *)s,t))
10469 #define av_dup_inc(s,t) MUTABLE_AV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10470 #define hv_dup(s,t) MUTABLE_HV(sv_dup((const SV *)s,t))
10471 #define hv_dup_inc(s,t) MUTABLE_HV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10472 #define cv_dup(s,t) MUTABLE_CV(sv_dup((const SV *)s,t))
10473 #define cv_dup_inc(s,t) MUTABLE_CV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10474 #define io_dup(s,t) MUTABLE_IO(sv_dup((const SV *)s,t))
10475 #define io_dup_inc(s,t) MUTABLE_IO(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10476 #define gv_dup(s,t) MUTABLE_GV(sv_dup((const SV *)s,t))
10477 #define gv_dup_inc(s,t) MUTABLE_GV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10478 #define SAVEPV(p) ((p) ? savepv(p) : NULL)
10479 #define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
10481 /* clone a parser */
10484 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
10488 PERL_ARGS_ASSERT_PARSER_DUP;
10493 /* look for it in the table first */
10494 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10498 /* create anew and remember what it is */
10499 Newxz(parser, 1, yy_parser);
10500 ptr_table_store(PL_ptr_table, proto, parser);
10502 parser->yyerrstatus = 0;
10503 parser->yychar = YYEMPTY; /* Cause a token to be read. */
10505 /* XXX these not yet duped */
10506 parser->old_parser = NULL;
10507 parser->stack = NULL;
10509 parser->stack_size = 0;
10510 /* XXX parser->stack->state = 0; */
10512 /* XXX eventually, just Copy() most of the parser struct ? */
10514 parser->lex_brackets = proto->lex_brackets;
10515 parser->lex_casemods = proto->lex_casemods;
10516 parser->lex_brackstack = savepvn(proto->lex_brackstack,
10517 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10518 parser->lex_casestack = savepvn(proto->lex_casestack,
10519 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10520 parser->lex_defer = proto->lex_defer;
10521 parser->lex_dojoin = proto->lex_dojoin;
10522 parser->lex_expect = proto->lex_expect;
10523 parser->lex_formbrack = proto->lex_formbrack;
10524 parser->lex_inpat = proto->lex_inpat;
10525 parser->lex_inwhat = proto->lex_inwhat;
10526 parser->lex_op = proto->lex_op;
10527 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
10528 parser->lex_starts = proto->lex_starts;
10529 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
10530 parser->multi_close = proto->multi_close;
10531 parser->multi_open = proto->multi_open;
10532 parser->multi_start = proto->multi_start;
10533 parser->multi_end = proto->multi_end;
10534 parser->pending_ident = proto->pending_ident;
10535 parser->preambled = proto->preambled;
10536 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
10537 parser->linestr = sv_dup_inc(proto->linestr, param);
10538 parser->expect = proto->expect;
10539 parser->copline = proto->copline;
10540 parser->last_lop_op = proto->last_lop_op;
10541 parser->lex_state = proto->lex_state;
10542 parser->rsfp = fp_dup(proto->rsfp, '<', param);
10543 /* rsfp_filters entries have fake IoDIRP() */
10544 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
10545 parser->in_my = proto->in_my;
10546 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
10547 parser->error_count = proto->error_count;
10550 parser->linestr = sv_dup_inc(proto->linestr, param);
10553 char * const ols = SvPVX(proto->linestr);
10554 char * const ls = SvPVX(parser->linestr);
10556 parser->bufptr = ls + (proto->bufptr >= ols ?
10557 proto->bufptr - ols : 0);
10558 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
10559 proto->oldbufptr - ols : 0);
10560 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10561 proto->oldoldbufptr - ols : 0);
10562 parser->linestart = ls + (proto->linestart >= ols ?
10563 proto->linestart - ols : 0);
10564 parser->last_uni = ls + (proto->last_uni >= ols ?
10565 proto->last_uni - ols : 0);
10566 parser->last_lop = ls + (proto->last_lop >= ols ?
10567 proto->last_lop - ols : 0);
10569 parser->bufend = ls + SvCUR(parser->linestr);
10572 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10576 parser->endwhite = proto->endwhite;
10577 parser->faketokens = proto->faketokens;
10578 parser->lasttoke = proto->lasttoke;
10579 parser->nextwhite = proto->nextwhite;
10580 parser->realtokenstart = proto->realtokenstart;
10581 parser->skipwhite = proto->skipwhite;
10582 parser->thisclose = proto->thisclose;
10583 parser->thismad = proto->thismad;
10584 parser->thisopen = proto->thisopen;
10585 parser->thisstuff = proto->thisstuff;
10586 parser->thistoken = proto->thistoken;
10587 parser->thiswhite = proto->thiswhite;
10589 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10590 parser->curforce = proto->curforce;
10592 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10593 Copy(proto->nexttype, parser->nexttype, 5, I32);
10594 parser->nexttoke = proto->nexttoke;
10597 /* XXX should clone saved_curcop here, but we aren't passed
10598 * proto_perl; so do it in perl_clone_using instead */
10604 /* duplicate a file handle */
10607 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
10611 PERL_ARGS_ASSERT_FP_DUP;
10612 PERL_UNUSED_ARG(type);
10615 return (PerlIO*)NULL;
10617 /* look for it in the table first */
10618 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10622 /* create anew and remember what it is */
10623 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
10624 ptr_table_store(PL_ptr_table, fp, ret);
10628 /* duplicate a directory handle */
10631 Perl_dirp_dup(pTHX_ DIR *const dp)
10633 PERL_UNUSED_CONTEXT;
10640 /* duplicate a typeglob */
10643 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
10647 PERL_ARGS_ASSERT_GP_DUP;
10651 /* look for it in the table first */
10652 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10656 /* create anew and remember what it is */
10658 ptr_table_store(PL_ptr_table, gp, ret);
10661 /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
10662 on Newxz() to do this for us. */
10663 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
10664 ret->gp_io = io_dup_inc(gp->gp_io, param);
10665 ret->gp_form = cv_dup_inc(gp->gp_form, param);
10666 ret->gp_av = av_dup_inc(gp->gp_av, param);
10667 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
10668 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10669 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
10670 ret->gp_cvgen = gp->gp_cvgen;
10671 ret->gp_line = gp->gp_line;
10672 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
10676 /* duplicate a chain of magic */
10679 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
10681 MAGIC *mgret = NULL;
10682 MAGIC **mgprev_p = &mgret;
10684 PERL_ARGS_ASSERT_MG_DUP;
10686 for (; mg; mg = mg->mg_moremagic) {
10688 Newx(nmg, 1, MAGIC);
10690 mgprev_p = &(nmg->mg_moremagic);
10692 /* There was a comment "XXX copy dynamic vtable?" but as we don't have
10693 dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
10694 from the original commit adding Perl_mg_dup() - revision 4538.
10695 Similarly there is the annotation "XXX random ptr?" next to the
10696 assignment to nmg->mg_ptr. */
10699 /* FIXME for plugins
10700 if (nmg->mg_type == PERL_MAGIC_qr) {
10701 nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
10705 if(nmg->mg_type == PERL_MAGIC_backref) {
10706 /* The backref AV has its reference count deliberately bumped by
10709 = SvREFCNT_inc(av_dup_inc((const AV *) nmg->mg_obj, param));
10712 nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
10713 ? sv_dup_inc(nmg->mg_obj, param)
10714 : sv_dup(nmg->mg_obj, param);
10717 if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
10718 if (nmg->mg_len > 0) {
10719 nmg->mg_ptr = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
10720 if (nmg->mg_type == PERL_MAGIC_overload_table &&
10721 AMT_AMAGIC((AMT*)nmg->mg_ptr))
10723 AMT * const namtp = (AMT*)nmg->mg_ptr;
10724 sv_dup_inc_multiple((SV**)(namtp->table),
10725 (SV**)(namtp->table), NofAMmeth, param);
10728 else if (nmg->mg_len == HEf_SVKEY)
10729 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
10731 if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
10732 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10738 #endif /* USE_ITHREADS */
10740 struct ptr_tbl_arena {
10741 struct ptr_tbl_arena *next;
10742 struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers. */
10745 /* create a new pointer-mapping table */
10748 Perl_ptr_table_new(pTHX)
10751 PERL_UNUSED_CONTEXT;
10753 Newx(tbl, 1, PTR_TBL_t);
10754 tbl->tbl_max = 511;
10755 tbl->tbl_items = 0;
10756 tbl->tbl_arena = NULL;
10757 tbl->tbl_arena_next = NULL;
10758 tbl->tbl_arena_end = NULL;
10759 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
10763 #define PTR_TABLE_HASH(ptr) \
10764 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
10766 /* map an existing pointer using a table */
10768 STATIC PTR_TBL_ENT_t *
10769 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
10771 PTR_TBL_ENT_t *tblent;
10772 const UV hash = PTR_TABLE_HASH(sv);
10774 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
10776 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10777 for (; tblent; tblent = tblent->next) {
10778 if (tblent->oldval == sv)
10785 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
10787 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
10789 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
10790 PERL_UNUSED_CONTEXT;
10792 return tblent ? tblent->newval : NULL;
10795 /* add a new entry to a pointer-mapping table */
10798 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
10800 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
10802 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
10803 PERL_UNUSED_CONTEXT;
10806 tblent->newval = newsv;
10808 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
10810 if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
10811 struct ptr_tbl_arena *new_arena;
10813 Newx(new_arena, 1, struct ptr_tbl_arena);
10814 new_arena->next = tbl->tbl_arena;
10815 tbl->tbl_arena = new_arena;
10816 tbl->tbl_arena_next = new_arena->array;
10817 tbl->tbl_arena_end = new_arena->array
10818 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
10821 tblent = tbl->tbl_arena_next++;
10823 tblent->oldval = oldsv;
10824 tblent->newval = newsv;
10825 tblent->next = tbl->tbl_ary[entry];
10826 tbl->tbl_ary[entry] = tblent;
10828 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
10829 ptr_table_split(tbl);
10833 /* double the hash bucket size of an existing ptr table */
10836 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
10838 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
10839 const UV oldsize = tbl->tbl_max + 1;
10840 UV newsize = oldsize * 2;
10843 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
10844 PERL_UNUSED_CONTEXT;
10846 Renew(ary, newsize, PTR_TBL_ENT_t*);
10847 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10848 tbl->tbl_max = --newsize;
10849 tbl->tbl_ary = ary;
10850 for (i=0; i < oldsize; i++, ary++) {
10851 PTR_TBL_ENT_t **curentp, **entp, *ent;
10854 curentp = ary + oldsize;
10855 for (entp = ary, ent = *ary; ent; ent = *entp) {
10856 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
10858 ent->next = *curentp;
10868 /* remove all the entries from a ptr table */
10869 /* Deprecated - will be removed post 5.14 */
10872 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
10874 if (tbl && tbl->tbl_items) {
10875 struct ptr_tbl_arena *arena = tbl->tbl_arena;
10877 Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
10880 struct ptr_tbl_arena *next = arena->next;
10886 tbl->tbl_items = 0;
10887 tbl->tbl_arena = NULL;
10888 tbl->tbl_arena_next = NULL;
10889 tbl->tbl_arena_end = NULL;
10893 /* clear and free a ptr table */
10896 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
10898 struct ptr_tbl_arena *arena;
10904 arena = tbl->tbl_arena;
10907 struct ptr_tbl_arena *next = arena->next;
10913 Safefree(tbl->tbl_ary);
10917 #if defined(USE_ITHREADS)
10920 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
10922 PERL_ARGS_ASSERT_RVPV_DUP;
10925 SvRV_set(dstr, SvWEAKREF(sstr)
10926 ? sv_dup(SvRV_const(sstr), param)
10927 : sv_dup_inc(SvRV_const(sstr), param));
10930 else if (SvPVX_const(sstr)) {
10931 /* Has something there */
10933 /* Normal PV - clone whole allocated space */
10934 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
10935 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10936 /* Not that normal - actually sstr is copy on write.
10937 But we are a true, independant SV, so: */
10938 SvREADONLY_off(dstr);
10943 /* Special case - not normally malloced for some reason */
10944 if (isGV_with_GP(sstr)) {
10945 /* Don't need to do anything here. */
10947 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
10948 /* A "shared" PV - clone it as "shared" PV */
10950 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
10954 /* Some other special case - random pointer */
10955 SvPV_set(dstr, (char *) SvPVX_const(sstr));
10960 /* Copy the NULL */
10961 SvPV_set(dstr, NULL);
10965 /* duplicate a list of SVs. source and dest may point to the same memory. */
10967 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
10968 SSize_t items, CLONE_PARAMS *const param)
10970 PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
10972 while (items-- > 0) {
10973 *dest++ = sv_dup_inc(*source++, param);
10979 /* duplicate an SV of any type (including AV, HV etc) */
10982 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
10987 PERL_ARGS_ASSERT_SV_DUP;
10991 if (SvTYPE(sstr) == SVTYPEMASK) {
10992 #ifdef DEBUG_LEAKING_SCALARS_ABORT
10997 /* look for it in the table first */
10998 dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
11002 if(param->flags & CLONEf_JOIN_IN) {
11003 /** We are joining here so we don't want do clone
11004 something that is bad **/
11005 if (SvTYPE(sstr) == SVt_PVHV) {
11006 const HEK * const hvname = HvNAME_HEK(sstr);
11008 /** don't clone stashes if they already exist **/
11009 return MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
11013 /* create anew and remember what it is */
11016 #ifdef DEBUG_LEAKING_SCALARS
11017 dstr->sv_debug_optype = sstr->sv_debug_optype;
11018 dstr->sv_debug_line = sstr->sv_debug_line;
11019 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
11020 dstr->sv_debug_cloned = 1;
11021 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11024 ptr_table_store(PL_ptr_table, sstr, dstr);
11027 SvFLAGS(dstr) = SvFLAGS(sstr);
11028 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
11029 SvREFCNT(dstr) = 0; /* must be before any other dups! */
11032 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11033 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11034 (void*)PL_watch_pvx, SvPVX_const(sstr));
11037 /* don't clone objects whose class has asked us not to */
11038 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11043 switch (SvTYPE(sstr)) {
11045 SvANY(dstr) = NULL;
11048 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11050 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11052 SvIV_set(dstr, SvIVX(sstr));
11056 SvANY(dstr) = new_XNV();
11057 SvNV_set(dstr, SvNVX(sstr));
11059 /* case SVt_BIND: */
11062 /* These are all the types that need complex bodies allocating. */
11064 const svtype sv_type = SvTYPE(sstr);
11065 const struct body_details *const sv_type_details
11066 = bodies_by_type + sv_type;
11070 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11085 assert(sv_type_details->body_size);
11086 if (sv_type_details->arena) {
11087 new_body_inline(new_body, sv_type);
11089 = (void*)((char*)new_body - sv_type_details->offset);
11091 new_body = new_NOARENA(sv_type_details);
11095 SvANY(dstr) = new_body;
11098 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11099 ((char*)SvANY(dstr)) + sv_type_details->offset,
11100 sv_type_details->copy, char);
11102 Copy(((char*)SvANY(sstr)),
11103 ((char*)SvANY(dstr)),
11104 sv_type_details->body_size + sv_type_details->offset, char);
11107 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11108 && !isGV_with_GP(dstr))
11109 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11111 /* The Copy above means that all the source (unduplicated) pointers
11112 are now in the destination. We can check the flags and the
11113 pointers in either, but it's possible that there's less cache
11114 missing by always going for the destination.
11115 FIXME - instrument and check that assumption */
11116 if (sv_type >= SVt_PVMG) {
11117 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11118 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11119 } else if (SvMAGIC(dstr))
11120 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11122 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11125 /* The cast silences a GCC warning about unhandled types. */
11126 switch ((int)sv_type) {
11136 /* FIXME for plugins */
11137 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11140 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11141 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11142 LvTARG(dstr) = dstr;
11143 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11144 LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11146 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11148 if(isGV_with_GP(sstr)) {
11149 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
11150 /* Don't call sv_add_backref here as it's going to be
11151 created as part of the magic cloning of the symbol
11152 table--unless this is during a join and the stash
11153 is not actually being cloned. */
11154 /* Danger Will Robinson - GvGP(dstr) isn't initialised
11155 at the point of this comment. */
11156 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
11157 if(param->flags & CLONEf_JOIN_IN) {
11158 const HEK * const hvname
11159 = HvNAME_HEK(GvSTASH(dstr));
11161 && GvSTASH(dstr) == gv_stashpvn(
11162 HEK_KEY(hvname), HEK_LEN(hvname), 0
11165 Perl_sv_add_backref(
11166 aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr
11169 GvGP(dstr) = gp_dup(GvGP(sstr), param);
11170 (void)GpREFCNT_inc(GvGP(dstr));
11172 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11175 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
11176 if (IoOFP(dstr) == IoIFP(sstr))
11177 IoOFP(dstr) = IoIFP(dstr);
11179 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
11180 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
11181 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11182 /* I have no idea why fake dirp (rsfps)
11183 should be treated differently but otherwise
11184 we end up with leaks -- sky*/
11185 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
11186 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
11187 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11189 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
11190 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
11191 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
11192 if (IoDIRP(dstr)) {
11193 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
11196 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
11199 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
11200 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
11201 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
11204 /* avoid cloning an empty array */
11205 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
11206 SV **dst_ary, **src_ary;
11207 SSize_t items = AvFILLp((const AV *)sstr) + 1;
11209 src_ary = AvARRAY((const AV *)sstr);
11210 Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
11211 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
11212 AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11213 AvALLOC((const AV *)dstr) = dst_ary;
11214 if (AvREAL((const AV *)sstr)) {
11215 dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11219 while (items-- > 0)
11220 *dst_ary++ = sv_dup(*src_ary++, param);
11221 if (!(param->flags & CLONEf_COPY_STACKS)
11224 av_reify(MUTABLE_AV(dstr)); /* #41138 */
11227 items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
11228 while (items-- > 0) {
11229 *dst_ary++ = &PL_sv_undef;
11233 AvARRAY(MUTABLE_AV(dstr)) = NULL;
11234 AvALLOC((const AV *)dstr) = (SV**)NULL;
11235 AvMAX( (const AV *)dstr) = -1;
11236 AvFILLp((const AV *)dstr) = -1;
11240 if (HvARRAY((const HV *)sstr)) {
11242 const bool sharekeys = !!HvSHAREKEYS(sstr);
11243 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
11244 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
11246 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
11247 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
11249 HvARRAY(dstr) = (HE**)darray;
11250 while (i <= sxhv->xhv_max) {
11251 const HE * const source = HvARRAY(sstr)[i];
11252 HvARRAY(dstr)[i] = source
11253 ? he_dup(source, sharekeys, param) : 0;
11258 const struct xpvhv_aux * const saux = HvAUX(sstr);
11259 struct xpvhv_aux * const daux = HvAUX(dstr);
11260 /* This flag isn't copied. */
11261 /* SvOOK_on(hv) attacks the IV flags. */
11262 SvFLAGS(dstr) |= SVf_OOK;
11264 hvname = saux->xhv_name;
11265 daux->xhv_name = hek_dup(hvname, param);
11267 daux->xhv_riter = saux->xhv_riter;
11268 daux->xhv_eiter = saux->xhv_eiter
11269 ? he_dup(saux->xhv_eiter,
11270 cBOOL(HvSHAREKEYS(sstr)), param) : 0;
11271 /* backref array needs refcnt=2; see sv_add_backref */
11272 daux->xhv_backreferences =
11273 saux->xhv_backreferences
11274 ? MUTABLE_AV(SvREFCNT_inc(
11275 sv_dup_inc((const SV *)saux->xhv_backreferences, param)))
11278 daux->xhv_mro_meta = saux->xhv_mro_meta
11279 ? mro_meta_dup(saux->xhv_mro_meta, param)
11282 /* Record stashes for possible cloning in Perl_clone(). */
11284 av_push(param->stashes, dstr);
11288 HvARRAY(MUTABLE_HV(dstr)) = NULL;
11291 if (!(param->flags & CLONEf_COPY_STACKS)) {
11295 /* NOTE: not refcounted */
11296 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
11298 if (!CvISXSUB(dstr))
11299 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
11301 if (CvCONST(dstr) && CvISXSUB(dstr)) {
11302 CvXSUBANY(dstr).any_ptr =
11303 sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
11305 /* don't dup if copying back - CvGV isn't refcounted, so the
11306 * duped GV may never be freed. A bit of a hack! DAPM */
11307 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
11308 NULL : gv_dup(CvGV(dstr), param) ;
11309 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
11311 CvWEAKOUTSIDE(sstr)
11312 ? cv_dup( CvOUTSIDE(dstr), param)
11313 : cv_dup_inc(CvOUTSIDE(dstr), param);
11314 if (!CvISXSUB(dstr))
11315 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
11321 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
11327 /* duplicate a context */
11330 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
11332 PERL_CONTEXT *ncxs;
11334 PERL_ARGS_ASSERT_CX_DUP;
11337 return (PERL_CONTEXT*)NULL;
11339 /* look for it in the table first */
11340 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
11344 /* create anew and remember what it is */
11345 Newx(ncxs, max + 1, PERL_CONTEXT);
11346 ptr_table_store(PL_ptr_table, cxs, ncxs);
11347 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
11350 PERL_CONTEXT * const ncx = &ncxs[ix];
11351 if (CxTYPE(ncx) == CXt_SUBST) {
11352 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
11355 switch (CxTYPE(ncx)) {
11357 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0
11358 ? cv_dup_inc(ncx->blk_sub.cv, param)
11359 : cv_dup(ncx->blk_sub.cv,param));
11360 ncx->blk_sub.argarray = (CxHASARGS(ncx)
11361 ? av_dup_inc(ncx->blk_sub.argarray,
11364 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,
11366 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
11367 ncx->blk_sub.oldcomppad);
11370 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
11372 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
11374 case CXt_LOOP_LAZYSV:
11375 ncx->blk_loop.state_u.lazysv.end
11376 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
11377 /* We are taking advantage of av_dup_inc and sv_dup_inc
11378 actually being the same function, and order equivalance of
11380 We can assert the later [but only at run time :-(] */
11381 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
11382 (void *) &ncx->blk_loop.state_u.lazysv.cur);
11384 ncx->blk_loop.state_u.ary.ary
11385 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
11386 case CXt_LOOP_LAZYIV:
11387 case CXt_LOOP_PLAIN:
11388 if (CxPADLOOP(ncx)) {
11389 ncx->blk_loop.oldcomppad
11390 = (PAD*)ptr_table_fetch(PL_ptr_table,
11391 ncx->blk_loop.oldcomppad);
11393 ncx->blk_loop.oldcomppad
11394 = (PAD*)gv_dup((const GV *)ncx->blk_loop.oldcomppad,
11399 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param);
11400 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
11401 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
11414 /* duplicate a stack info structure */
11417 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
11421 PERL_ARGS_ASSERT_SI_DUP;
11424 return (PERL_SI*)NULL;
11426 /* look for it in the table first */
11427 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
11431 /* create anew and remember what it is */
11432 Newxz(nsi, 1, PERL_SI);
11433 ptr_table_store(PL_ptr_table, si, nsi);
11435 nsi->si_stack = av_dup_inc(si->si_stack, param);
11436 nsi->si_cxix = si->si_cxix;
11437 nsi->si_cxmax = si->si_cxmax;
11438 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
11439 nsi->si_type = si->si_type;
11440 nsi->si_prev = si_dup(si->si_prev, param);
11441 nsi->si_next = si_dup(si->si_next, param);
11442 nsi->si_markoff = si->si_markoff;
11447 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
11448 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
11449 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
11450 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
11451 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
11452 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
11453 #define POPUV(ss,ix) ((ss)[--(ix)].any_uv)
11454 #define TOPUV(ss,ix) ((ss)[ix].any_uv)
11455 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
11456 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
11457 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
11458 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
11459 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
11460 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
11461 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11462 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11465 #define pv_dup_inc(p) SAVEPV(p)
11466 #define pv_dup(p) SAVEPV(p)
11467 #define svp_dup_inc(p,pp) any_dup(p,pp)
11469 /* map any object to the new equivent - either something in the
11470 * ptr table, or something in the interpreter structure
11474 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
11478 PERL_ARGS_ASSERT_ANY_DUP;
11481 return (void*)NULL;
11483 /* look for it in the table first */
11484 ret = ptr_table_fetch(PL_ptr_table, v);
11488 /* see if it is part of the interpreter structure */
11489 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
11490 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
11498 /* duplicate the save stack */
11501 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
11504 ANY * const ss = proto_perl->Isavestack;
11505 const I32 max = proto_perl->Isavestack_max;
11506 I32 ix = proto_perl->Isavestack_ix;
11519 void (*dptr) (void*);
11520 void (*dxptr) (pTHX_ void*);
11522 PERL_ARGS_ASSERT_SS_DUP;
11524 Newxz(nss, max, ANY);
11527 const UV uv = POPUV(ss,ix);
11528 const U8 type = (U8)uv & SAVE_MASK;
11530 TOPUV(nss,ix) = uv;
11532 case SAVEt_CLEARSV:
11534 case SAVEt_HELEM: /* hash element */
11535 sv = (const SV *)POPPTR(ss,ix);
11536 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11538 case SAVEt_ITEM: /* normal string */
11539 case SAVEt_SV: /* scalar reference */
11540 sv = (const SV *)POPPTR(ss,ix);
11541 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11544 case SAVEt_MORTALIZESV:
11545 sv = (const SV *)POPPTR(ss,ix);
11546 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11548 case SAVEt_SHARED_PVREF: /* char* in shared space */
11549 c = (char*)POPPTR(ss,ix);
11550 TOPPTR(nss,ix) = savesharedpv(c);
11551 ptr = POPPTR(ss,ix);
11552 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11554 case SAVEt_GENERIC_SVREF: /* generic sv */
11555 case SAVEt_SVREF: /* scalar reference */
11556 sv = (const SV *)POPPTR(ss,ix);
11557 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11558 ptr = POPPTR(ss,ix);
11559 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11561 case SAVEt_HV: /* hash reference */
11562 case SAVEt_AV: /* array reference */
11563 sv = (const SV *) POPPTR(ss,ix);
11564 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11566 case SAVEt_COMPPAD:
11568 sv = (const SV *) POPPTR(ss,ix);
11569 TOPPTR(nss,ix) = sv_dup(sv, param);
11571 case SAVEt_INT: /* int reference */
11572 ptr = POPPTR(ss,ix);
11573 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11574 intval = (int)POPINT(ss,ix);
11575 TOPINT(nss,ix) = intval;
11577 case SAVEt_LONG: /* long reference */
11578 ptr = POPPTR(ss,ix);
11579 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11580 longval = (long)POPLONG(ss,ix);
11581 TOPLONG(nss,ix) = longval;
11583 case SAVEt_I32: /* I32 reference */
11584 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
11585 ptr = POPPTR(ss,ix);
11586 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11588 TOPINT(nss,ix) = i;
11590 case SAVEt_IV: /* IV reference */
11591 ptr = POPPTR(ss,ix);
11592 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11594 TOPIV(nss,ix) = iv;
11596 case SAVEt_HPTR: /* HV* reference */
11597 case SAVEt_APTR: /* AV* reference */
11598 case SAVEt_SPTR: /* SV* reference */
11599 ptr = POPPTR(ss,ix);
11600 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11601 sv = (const SV *)POPPTR(ss,ix);
11602 TOPPTR(nss,ix) = sv_dup(sv, param);
11604 case SAVEt_VPTR: /* random* reference */
11605 ptr = POPPTR(ss,ix);
11606 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11608 case SAVEt_INT_SMALL:
11609 case SAVEt_I32_SMALL:
11610 case SAVEt_I16: /* I16 reference */
11611 case SAVEt_I8: /* I8 reference */
11613 ptr = POPPTR(ss,ix);
11614 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11616 case SAVEt_GENERIC_PVREF: /* generic char* */
11617 case SAVEt_PPTR: /* char* reference */
11618 ptr = POPPTR(ss,ix);
11619 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11620 c = (char*)POPPTR(ss,ix);
11621 TOPPTR(nss,ix) = pv_dup(c);
11623 case SAVEt_GP: /* scalar reference */
11624 gv = (const GV *)POPPTR(ss,ix);
11625 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11626 gp = (GP*)POPPTR(ss,ix);
11627 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
11628 (void)GpREFCNT_inc(gp);
11630 TOPINT(nss,ix) = i;
11633 ptr = POPPTR(ss,ix);
11634 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11635 /* these are assumed to be refcounted properly */
11637 switch (((OP*)ptr)->op_type) {
11639 case OP_LEAVESUBLV:
11643 case OP_LEAVEWRITE:
11644 TOPPTR(nss,ix) = ptr;
11647 (void) OpREFCNT_inc(o);
11651 TOPPTR(nss,ix) = NULL;
11656 TOPPTR(nss,ix) = NULL;
11659 hv = (const HV *)POPPTR(ss,ix);
11660 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11662 TOPINT(nss,ix) = i;
11665 c = (char*)POPPTR(ss,ix);
11666 TOPPTR(nss,ix) = pv_dup_inc(c);
11668 case SAVEt_STACK_POS: /* Position on Perl stack */
11670 TOPINT(nss,ix) = i;
11672 case SAVEt_DESTRUCTOR:
11673 ptr = POPPTR(ss,ix);
11674 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11675 dptr = POPDPTR(ss,ix);
11676 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11677 any_dup(FPTR2DPTR(void *, dptr),
11680 case SAVEt_DESTRUCTOR_X:
11681 ptr = POPPTR(ss,ix);
11682 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11683 dxptr = POPDXPTR(ss,ix);
11684 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11685 any_dup(FPTR2DPTR(void *, dxptr),
11688 case SAVEt_REGCONTEXT:
11690 ix -= uv >> SAVE_TIGHT_SHIFT;
11692 case SAVEt_AELEM: /* array element */
11693 sv = (const SV *)POPPTR(ss,ix);
11694 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11696 TOPINT(nss,ix) = i;
11697 av = (const AV *)POPPTR(ss,ix);
11698 TOPPTR(nss,ix) = av_dup_inc(av, param);
11701 ptr = POPPTR(ss,ix);
11702 TOPPTR(nss,ix) = ptr;
11705 ptr = POPPTR(ss,ix);
11708 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
11709 HINTS_REFCNT_UNLOCK;
11711 TOPPTR(nss,ix) = ptr;
11713 TOPINT(nss,ix) = i;
11714 if (i & HINT_LOCALIZE_HH) {
11715 hv = (const HV *)POPPTR(ss,ix);
11716 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11719 case SAVEt_PADSV_AND_MORTALIZE:
11720 longval = (long)POPLONG(ss,ix);
11721 TOPLONG(nss,ix) = longval;
11722 ptr = POPPTR(ss,ix);
11723 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11724 sv = (const SV *)POPPTR(ss,ix);
11725 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11727 case SAVEt_SET_SVFLAGS:
11729 TOPINT(nss,ix) = i;
11731 TOPINT(nss,ix) = i;
11732 sv = (const SV *)POPPTR(ss,ix);
11733 TOPPTR(nss,ix) = sv_dup(sv, param);
11735 case SAVEt_RE_STATE:
11737 const struct re_save_state *const old_state
11738 = (struct re_save_state *)
11739 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11740 struct re_save_state *const new_state
11741 = (struct re_save_state *)
11742 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11744 Copy(old_state, new_state, 1, struct re_save_state);
11745 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
11747 new_state->re_state_bostr
11748 = pv_dup(old_state->re_state_bostr);
11749 new_state->re_state_reginput
11750 = pv_dup(old_state->re_state_reginput);
11751 new_state->re_state_regeol
11752 = pv_dup(old_state->re_state_regeol);
11753 new_state->re_state_regoffs
11754 = (regexp_paren_pair*)
11755 any_dup(old_state->re_state_regoffs, proto_perl);
11756 new_state->re_state_reglastparen
11757 = (U32*) any_dup(old_state->re_state_reglastparen,
11759 new_state->re_state_reglastcloseparen
11760 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
11762 /* XXX This just has to be broken. The old save_re_context
11763 code did SAVEGENERICPV(PL_reg_start_tmp);
11764 PL_reg_start_tmp is char **.
11765 Look above to what the dup code does for
11766 SAVEt_GENERIC_PVREF
11767 It can never have worked.
11768 So this is merely a faithful copy of the exiting bug: */
11769 new_state->re_state_reg_start_tmp
11770 = (char **) pv_dup((char *)
11771 old_state->re_state_reg_start_tmp);
11772 /* I assume that it only ever "worked" because no-one called
11773 (pseudo)fork while the regexp engine had re-entered itself.
11775 #ifdef PERL_OLD_COPY_ON_WRITE
11776 new_state->re_state_nrs
11777 = sv_dup(old_state->re_state_nrs, param);
11779 new_state->re_state_reg_magic
11780 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
11782 new_state->re_state_reg_oldcurpm
11783 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
11785 new_state->re_state_reg_curpm
11786 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
11788 new_state->re_state_reg_oldsaved
11789 = pv_dup(old_state->re_state_reg_oldsaved);
11790 new_state->re_state_reg_poscache
11791 = pv_dup(old_state->re_state_reg_poscache);
11792 new_state->re_state_reg_starttry
11793 = pv_dup(old_state->re_state_reg_starttry);
11796 case SAVEt_COMPILE_WARNINGS:
11797 ptr = POPPTR(ss,ix);
11798 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
11801 ptr = POPPTR(ss,ix);
11802 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
11806 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
11814 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11815 * flag to the result. This is done for each stash before cloning starts,
11816 * so we know which stashes want their objects cloned */
11819 do_mark_cloneable_stash(pTHX_ SV *const sv)
11821 const HEK * const hvname = HvNAME_HEK((const HV *)sv);
11823 GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
11824 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11825 if (cloner && GvCV(cloner)) {
11832 mXPUSHs(newSVhek(hvname));
11834 call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
11841 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11849 =for apidoc perl_clone
11851 Create and return a new interpreter by cloning the current one.
11853 perl_clone takes these flags as parameters:
11855 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11856 without it we only clone the data and zero the stacks,
11857 with it we copy the stacks and the new perl interpreter is
11858 ready to run at the exact same point as the previous one.
11859 The pseudo-fork code uses COPY_STACKS while the
11860 threads->create doesn't.
11862 CLONEf_KEEP_PTR_TABLE
11863 perl_clone keeps a ptr_table with the pointer of the old
11864 variable as a key and the new variable as a value,
11865 this allows it to check if something has been cloned and not
11866 clone it again but rather just use the value and increase the
11867 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11868 the ptr_table using the function
11869 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11870 reason to keep it around is if you want to dup some of your own
11871 variable who are outside the graph perl scans, example of this
11872 code is in threads.xs create
11875 This is a win32 thing, it is ignored on unix, it tells perls
11876 win32host code (which is c++) to clone itself, this is needed on
11877 win32 if you want to run two threads at the same time,
11878 if you just want to do some stuff in a separate perl interpreter
11879 and then throw it away and return to the original one,
11880 you don't need to do anything.
11885 /* XXX the above needs expanding by someone who actually understands it ! */
11886 EXTERN_C PerlInterpreter *
11887 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11890 perl_clone(PerlInterpreter *proto_perl, UV flags)
11893 #ifdef PERL_IMPLICIT_SYS
11895 PERL_ARGS_ASSERT_PERL_CLONE;
11897 /* perlhost.h so we need to call into it
11898 to clone the host, CPerlHost should have a c interface, sky */
11900 if (flags & CLONEf_CLONE_HOST) {
11901 return perl_clone_host(proto_perl,flags);
11903 return perl_clone_using(proto_perl, flags,
11905 proto_perl->IMemShared,
11906 proto_perl->IMemParse,
11908 proto_perl->IStdIO,
11912 proto_perl->IProc);
11916 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11917 struct IPerlMem* ipM, struct IPerlMem* ipMS,
11918 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11919 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11920 struct IPerlDir* ipD, struct IPerlSock* ipS,
11921 struct IPerlProc* ipP)
11923 /* XXX many of the string copies here can be optimized if they're
11924 * constants; they need to be allocated as common memory and just
11925 * their pointers copied. */
11928 CLONE_PARAMS clone_params;
11929 CLONE_PARAMS* const param = &clone_params;
11931 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
11933 PERL_ARGS_ASSERT_PERL_CLONE_USING;
11934 #else /* !PERL_IMPLICIT_SYS */
11936 CLONE_PARAMS clone_params;
11937 CLONE_PARAMS* param = &clone_params;
11938 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
11940 PERL_ARGS_ASSERT_PERL_CLONE;
11941 #endif /* PERL_IMPLICIT_SYS */
11943 /* for each stash, determine whether its objects should be cloned */
11944 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11945 PERL_SET_THX(my_perl);
11948 PoisonNew(my_perl, 1, PerlInterpreter);
11953 PL_scopestack_name = 0;
11955 PL_savestack_ix = 0;
11956 PL_savestack_max = -1;
11957 PL_sig_pending = 0;
11959 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11960 # ifdef DEBUG_LEAKING_SCALARS
11961 PL_sv_serial = (((U32)my_perl >> 2) & 0xfff) * 1000000;
11963 #else /* !DEBUGGING */
11964 Zero(my_perl, 1, PerlInterpreter);
11965 #endif /* DEBUGGING */
11967 #ifdef PERL_IMPLICIT_SYS
11968 /* host pointers */
11970 PL_MemShared = ipMS;
11971 PL_MemParse = ipMP;
11978 #endif /* PERL_IMPLICIT_SYS */
11980 param->flags = flags;
11981 param->proto_perl = proto_perl;
11983 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
11985 PL_body_arenas = NULL;
11986 Zero(&PL_body_roots, 1, PL_body_roots);
11988 PL_nice_chunk = NULL;
11989 PL_nice_chunk_size = 0;
11991 PL_sv_objcount = 0;
11993 PL_sv_arenaroot = NULL;
11995 PL_debug = proto_perl->Idebug;
11997 PL_hash_seed = proto_perl->Ihash_seed;
11998 PL_rehash_seed = proto_perl->Irehash_seed;
12000 #ifdef USE_REENTRANT_API
12001 /* XXX: things like -Dm will segfault here in perlio, but doing
12002 * PERL_SET_CONTEXT(proto_perl);
12003 * breaks too many other things
12005 Perl_reentrant_init(aTHX);
12008 /* create SV map for pointer relocation */
12009 PL_ptr_table = ptr_table_new();
12011 /* initialize these special pointers as early as possible */
12012 SvANY(&PL_sv_undef) = NULL;
12013 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
12014 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
12015 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
12017 SvANY(&PL_sv_no) = new_XPVNV();
12018 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
12019 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12020 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12021 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
12022 SvCUR_set(&PL_sv_no, 0);
12023 SvLEN_set(&PL_sv_no, 1);
12024 SvIV_set(&PL_sv_no, 0);
12025 SvNV_set(&PL_sv_no, 0);
12026 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
12028 SvANY(&PL_sv_yes) = new_XPVNV();
12029 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
12030 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12031 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12032 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
12033 SvCUR_set(&PL_sv_yes, 1);
12034 SvLEN_set(&PL_sv_yes, 2);
12035 SvIV_set(&PL_sv_yes, 1);
12036 SvNV_set(&PL_sv_yes, 1);
12037 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
12039 /* dbargs array probably holds garbage */
12042 /* create (a non-shared!) shared string table */
12043 PL_strtab = newHV();
12044 HvSHAREKEYS_off(PL_strtab);
12045 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
12046 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
12048 PL_compiling = proto_perl->Icompiling;
12050 /* These two PVs will be free'd special way so must set them same way op.c does */
12051 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
12052 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
12054 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
12055 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
12057 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
12058 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
12059 if (PL_compiling.cop_hints_hash) {
12061 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
12062 HINTS_REFCNT_UNLOCK;
12064 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
12065 #ifdef PERL_DEBUG_READONLY_OPS
12070 /* pseudo environmental stuff */
12071 PL_origargc = proto_perl->Iorigargc;
12072 PL_origargv = proto_perl->Iorigargv;
12074 param->stashes = newAV(); /* Setup array of objects to call clone on */
12076 /* Set tainting stuff before PerlIO_debug can possibly get called */
12077 PL_tainting = proto_perl->Itainting;
12078 PL_taint_warn = proto_perl->Itaint_warn;
12080 #ifdef PERLIO_LAYERS
12081 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
12082 PerlIO_clone(aTHX_ proto_perl, param);
12085 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
12086 PL_incgv = gv_dup(proto_perl->Iincgv, param);
12087 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
12088 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
12089 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
12090 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
12093 PL_minus_c = proto_perl->Iminus_c;
12094 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
12095 PL_localpatches = proto_perl->Ilocalpatches;
12096 PL_splitstr = proto_perl->Isplitstr;
12097 PL_minus_n = proto_perl->Iminus_n;
12098 PL_minus_p = proto_perl->Iminus_p;
12099 PL_minus_l = proto_perl->Iminus_l;
12100 PL_minus_a = proto_perl->Iminus_a;
12101 PL_minus_E = proto_perl->Iminus_E;
12102 PL_minus_F = proto_perl->Iminus_F;
12103 PL_doswitches = proto_perl->Idoswitches;
12104 PL_dowarn = proto_perl->Idowarn;
12105 PL_doextract = proto_perl->Idoextract;
12106 PL_sawampersand = proto_perl->Isawampersand;
12107 PL_unsafe = proto_perl->Iunsafe;
12108 PL_inplace = SAVEPV(proto_perl->Iinplace);
12109 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
12110 PL_perldb = proto_perl->Iperldb;
12111 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12112 PL_exit_flags = proto_perl->Iexit_flags;
12114 /* magical thingies */
12115 /* XXX time(&PL_basetime) when asked for? */
12116 PL_basetime = proto_perl->Ibasetime;
12117 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
12119 PL_maxsysfd = proto_perl->Imaxsysfd;
12120 PL_statusvalue = proto_perl->Istatusvalue;
12122 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
12124 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12126 PL_encoding = sv_dup(proto_perl->Iencoding, param);
12128 sv_setpvs(PERL_DEBUG_PAD(0), ""); /* For regex debugging. */
12129 sv_setpvs(PERL_DEBUG_PAD(1), ""); /* ext/re needs these */
12130 sv_setpvs(PERL_DEBUG_PAD(2), ""); /* even without DEBUGGING. */
12133 /* RE engine related */
12134 Zero(&PL_reg_state, 1, struct re_save_state);
12135 PL_reginterp_cnt = 0;
12136 PL_regmatch_slab = NULL;
12138 /* Clone the regex array */
12139 /* ORANGE FIXME for plugins, probably in the SV dup code.
12140 newSViv(PTR2IV(CALLREGDUPE(
12141 INT2PTR(REGEXP *, SvIVX(regex)), param))))
12143 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
12144 PL_regex_pad = AvARRAY(PL_regex_padav);
12146 /* shortcuts to various I/O objects */
12147 PL_ofsgv = gv_dup(proto_perl->Iofsgv, param);
12148 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
12149 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
12150 PL_defgv = gv_dup(proto_perl->Idefgv, param);
12151 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
12152 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
12153 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
12155 /* shortcuts to regexp stuff */
12156 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
12158 /* shortcuts to misc objects */
12159 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
12161 /* shortcuts to debugging objects */
12162 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
12163 PL_DBline = gv_dup(proto_perl->IDBline, param);
12164 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
12165 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
12166 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
12167 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
12169 /* symbol tables */
12170 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
12171 PL_curstash = hv_dup(proto_perl->Icurstash, param);
12172 PL_debstash = hv_dup(proto_perl->Idebstash, param);
12173 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
12174 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
12176 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
12177 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
12178 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
12179 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
12180 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
12181 PL_endav = av_dup_inc(proto_perl->Iendav, param);
12182 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
12183 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
12185 PL_sub_generation = proto_perl->Isub_generation;
12186 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
12188 /* funky return mechanisms */
12189 PL_forkprocess = proto_perl->Iforkprocess;
12191 /* subprocess state */
12192 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
12194 /* internal state */
12195 PL_maxo = proto_perl->Imaxo;
12196 if (proto_perl->Iop_mask)
12197 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
12200 /* PL_asserting = proto_perl->Iasserting; */
12202 /* current interpreter roots */
12203 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
12205 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
12207 PL_main_start = proto_perl->Imain_start;
12208 PL_eval_root = proto_perl->Ieval_root;
12209 PL_eval_start = proto_perl->Ieval_start;
12211 /* runtime control stuff */
12212 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
12214 PL_filemode = proto_perl->Ifilemode;
12215 PL_lastfd = proto_perl->Ilastfd;
12216 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
12219 PL_gensym = proto_perl->Igensym;
12220 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
12221 PL_laststatval = proto_perl->Ilaststatval;
12222 PL_laststype = proto_perl->Ilaststype;
12225 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
12227 /* interpreter atexit processing */
12228 PL_exitlistlen = proto_perl->Iexitlistlen;
12229 if (PL_exitlistlen) {
12230 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12231 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12234 PL_exitlist = (PerlExitListEntry*)NULL;
12236 PL_my_cxt_size = proto_perl->Imy_cxt_size;
12237 if (PL_my_cxt_size) {
12238 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
12239 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
12240 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
12241 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
12242 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
12246 PL_my_cxt_list = (void**)NULL;
12247 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
12248 PL_my_cxt_keys = (const char**)NULL;
12251 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
12252 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
12253 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
12255 PL_profiledata = NULL;
12257 PL_compcv = cv_dup(proto_perl->Icompcv, param);
12259 PAD_CLONE_VARS(proto_perl, param);
12261 #ifdef HAVE_INTERP_INTERN
12262 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
12265 /* more statics moved here */
12266 PL_generation = proto_perl->Igeneration;
12267 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
12269 PL_in_clean_objs = proto_perl->Iin_clean_objs;
12270 PL_in_clean_all = proto_perl->Iin_clean_all;
12272 PL_uid = proto_perl->Iuid;
12273 PL_euid = proto_perl->Ieuid;
12274 PL_gid = proto_perl->Igid;
12275 PL_egid = proto_perl->Iegid;
12276 PL_nomemok = proto_perl->Inomemok;
12277 PL_an = proto_perl->Ian;
12278 PL_evalseq = proto_perl->Ievalseq;
12279 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
12280 PL_origalen = proto_perl->Iorigalen;
12281 #ifdef PERL_USES_PL_PIDSTATUS
12282 PL_pidstatus = newHV(); /* XXX flag for cloning? */
12284 PL_osname = SAVEPV(proto_perl->Iosname);
12285 PL_sighandlerp = proto_perl->Isighandlerp;
12287 PL_runops = proto_perl->Irunops;
12289 PL_parser = parser_dup(proto_perl->Iparser, param);
12291 /* XXX this only works if the saved cop has already been cloned */
12292 if (proto_perl->Iparser) {
12293 PL_parser->saved_curcop = (COP*)any_dup(
12294 proto_perl->Iparser->saved_curcop,
12298 PL_subline = proto_perl->Isubline;
12299 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
12302 PL_cryptseen = proto_perl->Icryptseen;
12305 PL_hints = proto_perl->Ihints;
12307 PL_amagic_generation = proto_perl->Iamagic_generation;
12309 #ifdef USE_LOCALE_COLLATE
12310 PL_collation_ix = proto_perl->Icollation_ix;
12311 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
12312 PL_collation_standard = proto_perl->Icollation_standard;
12313 PL_collxfrm_base = proto_perl->Icollxfrm_base;
12314 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
12315 #endif /* USE_LOCALE_COLLATE */
12317 #ifdef USE_LOCALE_NUMERIC
12318 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
12319 PL_numeric_standard = proto_perl->Inumeric_standard;
12320 PL_numeric_local = proto_perl->Inumeric_local;
12321 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
12322 #endif /* !USE_LOCALE_NUMERIC */
12324 /* utf8 character classes */
12325 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
12326 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
12327 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
12328 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
12329 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
12330 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
12331 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
12332 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
12333 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
12334 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
12335 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
12336 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
12337 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
12338 PL_utf8_X_begin = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
12339 PL_utf8_X_extend = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
12340 PL_utf8_X_prepend = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
12341 PL_utf8_X_non_hangul = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
12342 PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
12343 PL_utf8_X_LV = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
12344 PL_utf8_X_LVT = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
12345 PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
12346 PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
12347 PL_utf8_X_LV_LVT_V = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
12348 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
12349 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
12350 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
12351 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
12352 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
12353 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
12355 /* Did the locale setup indicate UTF-8? */
12356 PL_utf8locale = proto_perl->Iutf8locale;
12357 /* Unicode features (see perlrun/-C) */
12358 PL_unicode = proto_perl->Iunicode;
12360 /* Pre-5.8 signals control */
12361 PL_signals = proto_perl->Isignals;
12363 /* times() ticks per second */
12364 PL_clocktick = proto_perl->Iclocktick;
12366 /* Recursion stopper for PerlIO_find_layer */
12367 PL_in_load_module = proto_perl->Iin_load_module;
12369 /* sort() routine */
12370 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
12372 /* Not really needed/useful since the reenrant_retint is "volatile",
12373 * but do it for consistency's sake. */
12374 PL_reentrant_retint = proto_perl->Ireentrant_retint;
12376 /* Hooks to shared SVs and locks. */
12377 PL_sharehook = proto_perl->Isharehook;
12378 PL_lockhook = proto_perl->Ilockhook;
12379 PL_unlockhook = proto_perl->Iunlockhook;
12380 PL_threadhook = proto_perl->Ithreadhook;
12381 PL_destroyhook = proto_perl->Idestroyhook;
12383 #ifdef THREADS_HAVE_PIDS
12384 PL_ppid = proto_perl->Ippid;
12388 PL_last_swash_hv = NULL; /* reinits on demand */
12389 PL_last_swash_klen = 0;
12390 PL_last_swash_key[0]= '\0';
12391 PL_last_swash_tmps = (U8*)NULL;
12392 PL_last_swash_slen = 0;
12394 PL_glob_index = proto_perl->Iglob_index;
12395 PL_srand_called = proto_perl->Isrand_called;
12397 if (proto_perl->Ipsig_pend) {
12398 Newxz(PL_psig_pend, SIG_SIZE, int);
12401 PL_psig_pend = (int*)NULL;
12404 if (proto_perl->Ipsig_name) {
12405 Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
12406 sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
12408 PL_psig_ptr = PL_psig_name + SIG_SIZE;
12411 PL_psig_ptr = (SV**)NULL;
12412 PL_psig_name = (SV**)NULL;
12415 /* intrpvar.h stuff */
12417 if (flags & CLONEf_COPY_STACKS) {
12418 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
12419 PL_tmps_ix = proto_perl->Itmps_ix;
12420 PL_tmps_max = proto_perl->Itmps_max;
12421 PL_tmps_floor = proto_perl->Itmps_floor;
12422 Newx(PL_tmps_stack, PL_tmps_max, SV*);
12423 sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
12424 PL_tmps_ix+1, param);
12426 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
12427 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
12428 Newxz(PL_markstack, i, I32);
12429 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
12430 - proto_perl->Imarkstack);
12431 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
12432 - proto_perl->Imarkstack);
12433 Copy(proto_perl->Imarkstack, PL_markstack,
12434 PL_markstack_ptr - PL_markstack + 1, I32);
12436 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12437 * NOTE: unlike the others! */
12438 PL_scopestack_ix = proto_perl->Iscopestack_ix;
12439 PL_scopestack_max = proto_perl->Iscopestack_max;
12440 Newxz(PL_scopestack, PL_scopestack_max, I32);
12441 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
12444 Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
12445 Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
12447 /* NOTE: si_dup() looks at PL_markstack */
12448 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
12450 /* PL_curstack = PL_curstackinfo->si_stack; */
12451 PL_curstack = av_dup(proto_perl->Icurstack, param);
12452 PL_mainstack = av_dup(proto_perl->Imainstack, param);
12454 /* next PUSHs() etc. set *(PL_stack_sp+1) */
12455 PL_stack_base = AvARRAY(PL_curstack);
12456 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
12457 - proto_perl->Istack_base);
12458 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
12460 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
12461 * NOTE: unlike the others! */
12462 PL_savestack_ix = proto_perl->Isavestack_ix;
12463 PL_savestack_max = proto_perl->Isavestack_max;
12464 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
12465 PL_savestack = ss_dup(proto_perl, param);
12469 ENTER; /* perl_destruct() wants to LEAVE; */
12471 /* although we're not duplicating the tmps stack, we should still
12472 * add entries for any SVs on the tmps stack that got cloned by a
12473 * non-refcount means (eg a temp in @_); otherwise they will be
12476 for (i = 0; i<= proto_perl->Itmps_ix; i++) {
12477 SV * const nsv = MUTABLE_SV(ptr_table_fetch(PL_ptr_table,
12478 proto_perl->Itmps_stack[i]));
12479 if (nsv && !SvREFCNT(nsv)) {
12480 PUSH_EXTEND_MORTAL__SV_C(SvREFCNT_inc_simple(nsv));
12485 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
12486 PL_top_env = &PL_start_env;
12488 PL_op = proto_perl->Iop;
12491 PL_Xpv = (XPV*)NULL;
12492 my_perl->Ina = proto_perl->Ina;
12494 PL_statbuf = proto_perl->Istatbuf;
12495 PL_statcache = proto_perl->Istatcache;
12496 PL_statgv = gv_dup(proto_perl->Istatgv, param);
12497 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
12499 PL_timesbuf = proto_perl->Itimesbuf;
12502 PL_tainted = proto_perl->Itainted;
12503 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
12504 PL_rs = sv_dup_inc(proto_perl->Irs, param);
12505 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
12506 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
12507 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
12508 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
12509 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
12510 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
12512 PL_restartjmpenv = proto_perl->Irestartjmpenv;
12513 PL_restartop = proto_perl->Irestartop;
12514 PL_in_eval = proto_perl->Iin_eval;
12515 PL_delaymagic = proto_perl->Idelaymagic;
12516 PL_dirty = proto_perl->Idirty;
12517 PL_localizing = proto_perl->Ilocalizing;
12519 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
12520 PL_hv_fetch_ent_mh = NULL;
12521 PL_modcount = proto_perl->Imodcount;
12522 PL_lastgotoprobe = NULL;
12523 PL_dumpindent = proto_perl->Idumpindent;
12525 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
12526 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
12527 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
12528 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
12529 PL_efloatbuf = NULL; /* reinits on demand */
12530 PL_efloatsize = 0; /* reinits on demand */
12534 PL_screamfirst = NULL;
12535 PL_screamnext = NULL;
12536 PL_maxscream = -1; /* reinits on demand */
12537 PL_lastscream = NULL;
12540 PL_regdummy = proto_perl->Iregdummy;
12541 PL_colorset = 0; /* reinits PL_colors[] */
12542 /*PL_colors[6] = {0,0,0,0,0,0};*/
12546 /* Pluggable optimizer */
12547 PL_peepp = proto_perl->Ipeepp;
12548 /* op_free() hook */
12549 PL_opfreehook = proto_perl->Iopfreehook;
12551 PL_stashcache = newHV();
12553 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
12554 proto_perl->Iwatchaddr);
12555 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
12556 if (PL_debug && PL_watchaddr) {
12557 PerlIO_printf(Perl_debug_log,
12558 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
12559 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
12560 PTR2UV(PL_watchok));
12563 PL_registered_mros = hv_dup_inc(proto_perl->Iregistered_mros, param);
12565 /* Call the ->CLONE method, if it exists, for each of the stashes
12566 identified by sv_dup() above.
12568 while(av_len(param->stashes) != -1) {
12569 HV* const stash = MUTABLE_HV(av_shift(param->stashes));
12570 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12571 if (cloner && GvCV(cloner)) {
12576 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
12578 call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
12584 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12585 ptr_table_free(PL_ptr_table);
12586 PL_ptr_table = NULL;
12590 SvREFCNT_dec(param->stashes);
12592 /* orphaned? eg threads->new inside BEGIN or use */
12593 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
12594 SvREFCNT_inc_simple_void(PL_compcv);
12595 SAVEFREESV(PL_compcv);
12601 #endif /* USE_ITHREADS */
12604 =head1 Unicode Support
12606 =for apidoc sv_recode_to_utf8
12608 The encoding is assumed to be an Encode object, on entry the PV
12609 of the sv is assumed to be octets in that encoding, and the sv
12610 will be converted into Unicode (and UTF-8).
12612 If the sv already is UTF-8 (or if it is not POK), or if the encoding
12613 is not a reference, nothing is done to the sv. If the encoding is not
12614 an C<Encode::XS> Encoding object, bad things will happen.
12615 (See F<lib/encoding.pm> and L<Encode>).
12617 The PV of the sv is returned.
12622 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12626 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
12628 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12642 Passing sv_yes is wrong - it needs to be or'ed set of constants
12643 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12644 remove converted chars from source.
12646 Both will default the value - let them.
12648 XPUSHs(&PL_sv_yes);
12651 call_method("decode", G_SCALAR);
12655 s = SvPV_const(uni, len);
12656 if (s != SvPVX_const(sv)) {
12657 SvGROW(sv, len + 1);
12658 Move(s, SvPVX(sv), len + 1, char);
12659 SvCUR_set(sv, len);
12666 return SvPOKp(sv) ? SvPVX(sv) : NULL;
12670 =for apidoc sv_cat_decode
12672 The encoding is assumed to be an Encode object, the PV of the ssv is
12673 assumed to be octets in that encoding and decoding the input starts
12674 from the position which (PV + *offset) pointed to. The dsv will be
12675 concatenated the decoded UTF-8 string from ssv. Decoding will terminate
12676 when the string tstr appears in decoding output or the input ends on
12677 the PV of the ssv. The value which the offset points will be modified
12678 to the last input position on the ssv.
12680 Returns TRUE if the terminator was found, else returns FALSE.
12685 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12686 SV *ssv, int *offset, char *tstr, int tlen)
12691 PERL_ARGS_ASSERT_SV_CAT_DECODE;
12693 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12704 offsv = newSViv(*offset);
12706 mXPUSHp(tstr, tlen);
12708 call_method("cat_decode", G_SCALAR);
12710 ret = SvTRUE(TOPs);
12711 *offset = SvIV(offsv);
12717 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12722 /* ---------------------------------------------------------------------
12724 * support functions for report_uninit()
12727 /* the maxiumum size of array or hash where we will scan looking
12728 * for the undefined element that triggered the warning */
12730 #define FUV_MAX_SEARCH_SIZE 1000
12732 /* Look for an entry in the hash whose value has the same SV as val;
12733 * If so, return a mortal copy of the key. */
12736 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
12739 register HE **array;
12742 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
12744 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
12745 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
12748 array = HvARRAY(hv);
12750 for (i=HvMAX(hv); i>0; i--) {
12751 register HE *entry;
12752 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
12753 if (HeVAL(entry) != val)
12755 if ( HeVAL(entry) == &PL_sv_undef ||
12756 HeVAL(entry) == &PL_sv_placeholder)
12760 if (HeKLEN(entry) == HEf_SVKEY)
12761 return sv_mortalcopy(HeKEY_sv(entry));
12762 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
12768 /* Look for an entry in the array whose value has the same SV as val;
12769 * If so, return the index, otherwise return -1. */
12772 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
12776 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
12778 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
12779 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
12782 if (val != &PL_sv_undef) {
12783 SV ** const svp = AvARRAY(av);
12786 for (i=AvFILLp(av); i>=0; i--)
12793 /* S_varname(): return the name of a variable, optionally with a subscript.
12794 * If gv is non-zero, use the name of that global, along with gvtype (one
12795 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
12796 * targ. Depending on the value of the subscript_type flag, return:
12799 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
12800 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
12801 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
12802 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
12805 S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
12806 const SV *const keyname, I32 aindex, int subscript_type)
12809 SV * const name = sv_newmortal();
12812 buffer[0] = gvtype;
12815 /* as gv_fullname4(), but add literal '^' for $^FOO names */
12817 gv_fullname4(name, gv, buffer, 0);
12819 if ((unsigned int)SvPVX(name)[1] <= 26) {
12821 buffer[1] = SvPVX(name)[1] + 'A' - 1;
12823 /* Swap the 1 unprintable control character for the 2 byte pretty
12824 version - ie substr($name, 1, 1) = $buffer; */
12825 sv_insert(name, 1, 1, buffer, 2);
12829 CV * const cv = find_runcv(NULL);
12833 if (!cv || !CvPADLIST(cv))
12835 av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
12836 sv = *av_fetch(av, targ, FALSE);
12837 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
12840 if (subscript_type == FUV_SUBSCRIPT_HASH) {
12841 SV * const sv = newSV(0);
12842 *SvPVX(name) = '$';
12843 Perl_sv_catpvf(aTHX_ name, "{%s}",
12844 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
12847 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
12848 *SvPVX(name) = '$';
12849 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
12851 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
12852 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
12853 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
12861 =for apidoc find_uninit_var
12863 Find the name of the undefined variable (if any) that caused the operator o
12864 to issue a "Use of uninitialized value" warning.
12865 If match is true, only return a name if it's value matches uninit_sv.
12866 So roughly speaking, if a unary operator (such as OP_COS) generates a
12867 warning, then following the direct child of the op may yield an
12868 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
12869 other hand, with OP_ADD there are two branches to follow, so we only print
12870 the variable name if we get an exact match.
12872 The name is returned as a mortal SV.
12874 Assumes that PL_op is the op that originally triggered the error, and that
12875 PL_comppad/PL_curpad points to the currently executing pad.
12881 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
12887 const OP *o, *o2, *kid;
12889 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
12890 uninit_sv == &PL_sv_placeholder)))
12893 switch (obase->op_type) {
12900 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
12901 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
12904 int subscript_type = FUV_SUBSCRIPT_WITHIN;
12906 if (pad) { /* @lex, %lex */
12907 sv = PAD_SVl(obase->op_targ);
12911 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
12912 /* @global, %global */
12913 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
12916 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
12918 else /* @{expr}, %{expr} */
12919 return find_uninit_var(cUNOPx(obase)->op_first,
12923 /* attempt to find a match within the aggregate */
12925 keysv = find_hash_subscript((const HV*)sv, uninit_sv);
12927 subscript_type = FUV_SUBSCRIPT_HASH;
12930 index = find_array_subscript((const AV *)sv, uninit_sv);
12932 subscript_type = FUV_SUBSCRIPT_ARRAY;
12935 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
12938 return varname(gv, hash ? '%' : '@', obase->op_targ,
12939 keysv, index, subscript_type);
12943 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
12945 return varname(NULL, '$', obase->op_targ,
12946 NULL, 0, FUV_SUBSCRIPT_NONE);
12949 gv = cGVOPx_gv(obase);
12950 if (!gv || (match && GvSV(gv) != uninit_sv))
12952 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
12955 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
12958 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
12959 if (!av || SvRMAGICAL(av))
12961 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12962 if (!svp || *svp != uninit_sv)
12965 return varname(NULL, '$', obase->op_targ,
12966 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12969 gv = cGVOPx_gv(obase);
12974 AV *const av = GvAV(gv);
12975 if (!av || SvRMAGICAL(av))
12977 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12978 if (!svp || *svp != uninit_sv)
12981 return varname(gv, '$', 0,
12982 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12987 o = cUNOPx(obase)->op_first;
12988 if (!o || o->op_type != OP_NULL ||
12989 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
12991 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
12995 if (PL_op == obase)
12996 /* $a[uninit_expr] or $h{uninit_expr} */
12997 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
13000 o = cBINOPx(obase)->op_first;
13001 kid = cBINOPx(obase)->op_last;
13003 /* get the av or hv, and optionally the gv */
13005 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
13006 sv = PAD_SV(o->op_targ);
13008 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
13009 && cUNOPo->op_first->op_type == OP_GV)
13011 gv = cGVOPx_gv(cUNOPo->op_first);
13015 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
13020 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
13021 /* index is constant */
13025 if (obase->op_type == OP_HELEM) {
13026 HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
13027 if (!he || HeVAL(he) != uninit_sv)
13031 SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
13032 if (!svp || *svp != uninit_sv)
13036 if (obase->op_type == OP_HELEM)
13037 return varname(gv, '%', o->op_targ,
13038 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
13040 return varname(gv, '@', o->op_targ, NULL,
13041 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
13044 /* index is an expression;
13045 * attempt to find a match within the aggregate */
13046 if (obase->op_type == OP_HELEM) {
13047 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13049 return varname(gv, '%', o->op_targ,
13050 keysv, 0, FUV_SUBSCRIPT_HASH);
13054 = find_array_subscript((const AV *)sv, uninit_sv);
13056 return varname(gv, '@', o->op_targ,
13057 NULL, index, FUV_SUBSCRIPT_ARRAY);
13062 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
13064 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
13069 /* only examine RHS */
13070 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
13073 o = cUNOPx(obase)->op_first;
13074 if (o->op_type == OP_PUSHMARK)
13077 if (!o->op_sibling) {
13078 /* one-arg version of open is highly magical */
13080 if (o->op_type == OP_GV) { /* open FOO; */
13082 if (match && GvSV(gv) != uninit_sv)
13084 return varname(gv, '$', 0,
13085 NULL, 0, FUV_SUBSCRIPT_NONE);
13087 /* other possibilities not handled are:
13088 * open $x; or open my $x; should return '${*$x}'
13089 * open expr; should return '$'.expr ideally
13095 /* ops where $_ may be an implicit arg */
13099 if ( !(obase->op_flags & OPf_STACKED)) {
13100 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
13101 ? PAD_SVl(obase->op_targ)
13104 sv = sv_newmortal();
13105 sv_setpvs(sv, "$_");
13114 match = 1; /* print etc can return undef on defined args */
13115 /* skip filehandle as it can't produce 'undef' warning */
13116 o = cUNOPx(obase)->op_first;
13117 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
13118 o = o->op_sibling->op_sibling;
13122 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
13124 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
13126 /* the following ops are capable of returning PL_sv_undef even for
13127 * defined arg(s) */
13146 case OP_GETPEERNAME:
13194 case OP_SMARTMATCH:
13203 /* XXX tmp hack: these two may call an XS sub, and currently
13204 XS subs don't have a SUB entry on the context stack, so CV and
13205 pad determination goes wrong, and BAD things happen. So, just
13206 don't try to determine the value under those circumstances.
13207 Need a better fix at dome point. DAPM 11/2007 */
13213 GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
13214 if (gv && GvSV(gv) == uninit_sv)
13215 return newSVpvs_flags("$.", SVs_TEMP);
13220 /* def-ness of rval pos() is independent of the def-ness of its arg */
13221 if ( !(obase->op_flags & OPf_MOD))
13226 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
13227 return newSVpvs_flags("${$/}", SVs_TEMP);
13232 if (!(obase->op_flags & OPf_KIDS))
13234 o = cUNOPx(obase)->op_first;
13240 /* if all except one arg are constant, or have no side-effects,
13241 * or are optimized away, then it's unambiguous */
13243 for (kid=o; kid; kid = kid->op_sibling) {
13245 const OPCODE type = kid->op_type;
13246 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
13247 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
13248 || (type == OP_PUSHMARK)
13252 if (o2) { /* more than one found */
13259 return find_uninit_var(o2, uninit_sv, match);
13261 /* scan all args */
13263 sv = find_uninit_var(o, uninit_sv, 1);
13275 =for apidoc report_uninit
13277 Print appropriate "Use of uninitialized variable" warning
13283 Perl_report_uninit(pTHX_ const SV *uninit_sv)
13287 SV* varname = NULL;
13289 varname = find_uninit_var(PL_op, uninit_sv,0);
13291 sv_insert(varname, 0, 0, " ", 1);
13293 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13294 varname ? SvPV_nolen_const(varname) : "",
13295 " in ", OP_DESC(PL_op));
13298 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13304 * c-indentation-style: bsd
13305 * c-basic-offset: 4
13306 * indent-tabs-mode: t
13309 * ex: set ts=8 sts=4 sw=4 noet: