3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
28 /* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
32 #ifdef PERL_UTF8_CACHE_ASSERT
33 /* if adding more checks watch out for the following tests:
34 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
35 * lib/utf8.t lib/Unicode/Collate/t/index.t
38 # define ASSERT_UTF8_CACHE(cache) \
39 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
40 assert((cache)[2] <= (cache)[3]); \
41 assert((cache)[3] <= (cache)[1]);} \
44 # define ASSERT_UTF8_CACHE(cache) NOOP
47 #ifdef PERL_OLD_COPY_ON_WRITE
48 #define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
49 #define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
50 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
54 /* ============================================================================
56 =head1 Allocation and deallocation of SVs.
58 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
59 sv, av, hv...) contains type and reference count information, and for
60 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
61 contains fields specific to each type. Some types store all they need
62 in the head, so don't have a body.
64 In all but the most memory-paranoid configuations (ex: PURIFY), heads
65 and bodies are allocated out of arenas, which by default are
66 approximately 4K chunks of memory parcelled up into N heads or bodies.
67 Sv-bodies are allocated by their sv-type, guaranteeing size
68 consistency needed to allocate safely from arrays.
70 For SV-heads, the first slot in each arena is reserved, and holds a
71 link to the next arena, some flags, and a note of the number of slots.
72 Snaked through each arena chain is a linked list of free items; when
73 this becomes empty, an extra arena is allocated and divided up into N
74 items which are threaded into the free list.
76 SV-bodies are similar, but they use arena-sets by default, which
77 separate the link and info from the arena itself, and reclaim the 1st
78 slot in the arena. SV-bodies are further described later.
80 The following global variables are associated with arenas:
82 PL_sv_arenaroot pointer to list of SV arenas
83 PL_sv_root pointer to list of free SV structures
85 PL_body_arenas head of linked-list of body arenas
86 PL_body_roots[] array of pointers to list of free bodies of svtype
87 arrays are indexed by the svtype needed
89 A few special SV heads are not allocated from an arena, but are
90 instead directly created in the interpreter structure, eg PL_sv_undef.
91 The size of arenas can be changed from the default by setting
92 PERL_ARENA_SIZE appropriately at compile time.
94 The SV arena serves the secondary purpose of allowing still-live SVs
95 to be located and destroyed during final cleanup.
97 At the lowest level, the macros new_SV() and del_SV() grab and free
98 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
99 to return the SV to the free list with error checking.) new_SV() calls
100 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
101 SVs in the free list have their SvTYPE field set to all ones.
103 At the time of very final cleanup, sv_free_arenas() is called from
104 perl_destruct() to physically free all the arenas allocated since the
105 start of the interpreter.
107 The function visit() scans the SV arenas list, and calls a specified
108 function for each SV it finds which is still live - ie which has an SvTYPE
109 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
110 following functions (specified as [function that calls visit()] / [function
111 called by visit() for each SV]):
113 sv_report_used() / do_report_used()
114 dump all remaining SVs (debugging aid)
116 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
117 Attempt to free all objects pointed to by RVs,
118 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
119 try to do the same for all objects indirectly
120 referenced by typeglobs too. Called once from
121 perl_destruct(), prior to calling sv_clean_all()
124 sv_clean_all() / do_clean_all()
125 SvREFCNT_dec(sv) each remaining SV, possibly
126 triggering an sv_free(). It also sets the
127 SVf_BREAK flag on the SV to indicate that the
128 refcnt has been artificially lowered, and thus
129 stopping sv_free() from giving spurious warnings
130 about SVs which unexpectedly have a refcnt
131 of zero. called repeatedly from perl_destruct()
132 until there are no SVs left.
134 =head2 Arena allocator API Summary
136 Private API to rest of sv.c
140 new_XIV(), del_XIV(),
141 new_XNV(), del_XNV(),
146 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
150 ============================================================================ */
153 * "A time to plant, and a time to uproot what was planted..."
157 Perl_offer_nice_chunk(pTHX_ void *const chunk, const U32 chunk_size)
163 PERL_ARGS_ASSERT_OFFER_NICE_CHUNK;
165 new_chunk = (void *)(chunk);
166 new_chunk_size = (chunk_size);
167 if (new_chunk_size > PL_nice_chunk_size) {
168 Safefree(PL_nice_chunk);
169 PL_nice_chunk = (char *) new_chunk;
170 PL_nice_chunk_size = new_chunk_size;
176 #ifdef DEBUG_LEAKING_SCALARS
177 # define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
179 # define FREE_SV_DEBUG_FILE(sv)
183 # define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
184 /* Whilst I'd love to do this, it seems that things like to check on
186 # define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
188 # define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
189 PoisonNew(&SvREFCNT(sv), 1, U32)
191 # define SvARENA_CHAIN(sv) SvANY(sv)
192 # define POSION_SV_HEAD(sv)
195 /* Mark an SV head as unused, and add to free list.
197 * If SVf_BREAK is set, skip adding it to the free list, as this SV had
198 * its refcount artificially decremented during global destruction, so
199 * there may be dangling pointers to it. The last thing we want in that
200 * case is for it to be reused. */
202 #define plant_SV(p) \
204 const U32 old_flags = SvFLAGS(p); \
205 FREE_SV_DEBUG_FILE(p); \
207 SvFLAGS(p) = SVTYPEMASK; \
208 if (!(old_flags & SVf_BREAK)) { \
209 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
215 #define uproot_SV(p) \
218 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
223 /* make some more SVs by adding another arena */
232 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
233 PL_nice_chunk = NULL;
234 PL_nice_chunk_size = 0;
237 char *chunk; /* must use New here to match call to */
238 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
239 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
245 /* new_SV(): return a new, empty SV head */
247 #ifdef DEBUG_LEAKING_SCALARS
248 /* provide a real function for a debugger to play with */
257 sv = S_more_sv(aTHX);
261 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
262 sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
268 sv->sv_debug_inpad = 0;
269 sv->sv_debug_cloned = 0;
270 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
274 # define new_SV(p) (p)=S_new_SV(aTHX)
282 (p) = S_more_sv(aTHX); \
290 /* del_SV(): return an empty SV head to the free list */
303 S_del_sv(pTHX_ SV *p)
307 PERL_ARGS_ASSERT_DEL_SV;
312 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
313 const SV * const sv = sva + 1;
314 const SV * const svend = &sva[SvREFCNT(sva)];
315 if (p >= sv && p < svend) {
321 if (ckWARN_d(WARN_INTERNAL))
322 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
323 "Attempt to free non-arena SV: 0x%"UVxf
324 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
331 #else /* ! DEBUGGING */
333 #define del_SV(p) plant_SV(p)
335 #endif /* DEBUGGING */
339 =head1 SV Manipulation Functions
341 =for apidoc sv_add_arena
343 Given a chunk of memory, link it to the head of the list of arenas,
344 and split it into a list of free SVs.
350 Perl_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
353 SV* const sva = (SV*)ptr;
357 PERL_ARGS_ASSERT_SV_ADD_ARENA;
359 /* The first SV in an arena isn't an SV. */
360 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
361 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
362 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
364 PL_sv_arenaroot = sva;
365 PL_sv_root = sva + 1;
367 svend = &sva[SvREFCNT(sva) - 1];
370 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
374 /* Must always set typemask because it's always checked in on cleanup
375 when the arenas are walked looking for objects. */
376 SvFLAGS(sv) = SVTYPEMASK;
379 SvARENA_CHAIN(sv) = 0;
383 SvFLAGS(sv) = SVTYPEMASK;
386 /* visit(): call the named function for each non-free SV in the arenas
387 * whose flags field matches the flags/mask args. */
390 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
396 PERL_ARGS_ASSERT_VISIT;
398 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
399 register const SV * const svend = &sva[SvREFCNT(sva)];
401 for (sv = sva + 1; sv < svend; ++sv) {
402 if (SvTYPE(sv) != SVTYPEMASK
403 && (sv->sv_flags & mask) == flags
416 /* called by sv_report_used() for each live SV */
419 do_report_used(pTHX_ SV *const sv)
421 if (SvTYPE(sv) != SVTYPEMASK) {
422 PerlIO_printf(Perl_debug_log, "****\n");
429 =for apidoc sv_report_used
431 Dump the contents of all SVs not yet freed. (Debugging aid).
437 Perl_sv_report_used(pTHX)
440 visit(do_report_used, 0, 0);
446 /* called by sv_clean_objs() for each live SV */
449 do_clean_objs(pTHX_ SV *const ref)
454 SV * const target = SvRV(ref);
455 if (SvOBJECT(target)) {
456 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
457 if (SvWEAKREF(ref)) {
458 sv_del_backref(target, ref);
464 SvREFCNT_dec(target);
469 /* XXX Might want to check arrays, etc. */
472 /* called by sv_clean_objs() for each live SV */
474 #ifndef DISABLE_DESTRUCTOR_KLUDGE
476 do_clean_named_objs(pTHX_ SV *const sv)
479 assert(SvTYPE(sv) == SVt_PVGV);
480 assert(isGV_with_GP(sv));
483 #ifdef PERL_DONT_CREATE_GVSV
486 SvOBJECT(GvSV(sv))) ||
487 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
488 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
489 /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
490 (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
491 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
493 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
494 SvFLAGS(sv) |= SVf_BREAK;
502 =for apidoc sv_clean_objs
504 Attempt to destroy all objects not yet freed
510 Perl_sv_clean_objs(pTHX)
513 PL_in_clean_objs = TRUE;
514 visit(do_clean_objs, SVf_ROK, SVf_ROK);
515 #ifndef DISABLE_DESTRUCTOR_KLUDGE
516 /* some barnacles may yet remain, clinging to typeglobs */
517 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
519 PL_in_clean_objs = FALSE;
522 /* called by sv_clean_all() for each live SV */
525 do_clean_all(pTHX_ SV *const sv)
528 if (sv == (SV*) PL_fdpid || sv == (SV *)PL_strtab) {
529 /* don't clean pid table and strtab */
532 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
533 SvFLAGS(sv) |= SVf_BREAK;
538 =for apidoc sv_clean_all
540 Decrement the refcnt of each remaining SV, possibly triggering a
541 cleanup. This function may have to be called multiple times to free
542 SVs which are in complex self-referential hierarchies.
548 Perl_sv_clean_all(pTHX)
552 PL_in_clean_all = TRUE;
553 cleaned = visit(do_clean_all, 0,0);
554 PL_in_clean_all = FALSE;
559 ARENASETS: a meta-arena implementation which separates arena-info
560 into struct arena_set, which contains an array of struct
561 arena_descs, each holding info for a single arena. By separating
562 the meta-info from the arena, we recover the 1st slot, formerly
563 borrowed for list management. The arena_set is about the size of an
564 arena, avoiding the needless malloc overhead of a naive linked-list.
566 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
567 memory in the last arena-set (1/2 on average). In trade, we get
568 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
569 smaller types). The recovery of the wasted space allows use of
570 small arenas for large, rare body types, by changing array* fields
571 in body_details_by_type[] below.
574 char *arena; /* the raw storage, allocated aligned */
575 size_t size; /* its size ~4k typ */
576 U32 misc; /* type, and in future other things. */
581 /* Get the maximum number of elements in set[] such that struct arena_set
582 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
583 therefore likely to be 1 aligned memory page. */
585 #define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
586 - 2 * sizeof(int)) / sizeof (struct arena_desc))
589 struct arena_set* next;
590 unsigned int set_size; /* ie ARENAS_PER_SET */
591 unsigned int curr; /* index of next available arena-desc */
592 struct arena_desc set[ARENAS_PER_SET];
596 =for apidoc sv_free_arenas
598 Deallocate the memory used by all arenas. Note that all the individual SV
599 heads and bodies within the arenas must already have been freed.
604 Perl_sv_free_arenas(pTHX)
611 /* Free arenas here, but be careful about fake ones. (We assume
612 contiguity of the fake ones with the corresponding real ones.) */
614 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
615 svanext = (SV*) SvANY(sva);
616 while (svanext && SvFAKE(svanext))
617 svanext = (SV*) SvANY(svanext);
624 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
627 struct arena_set *current = aroot;
630 assert(aroot->set[i].arena);
631 Safefree(aroot->set[i].arena);
639 i = PERL_ARENA_ROOTS_SIZE;
641 PL_body_roots[i] = 0;
643 Safefree(PL_nice_chunk);
644 PL_nice_chunk = NULL;
645 PL_nice_chunk_size = 0;
651 Here are mid-level routines that manage the allocation of bodies out
652 of the various arenas. There are 5 kinds of arenas:
654 1. SV-head arenas, which are discussed and handled above
655 2. regular body arenas
656 3. arenas for reduced-size bodies
658 5. pte arenas (thread related)
660 Arena types 2 & 3 are chained by body-type off an array of
661 arena-root pointers, which is indexed by svtype. Some of the
662 larger/less used body types are malloced singly, since a large
663 unused block of them is wasteful. Also, several svtypes dont have
664 bodies; the data fits into the sv-head itself. The arena-root
665 pointer thus has a few unused root-pointers (which may be hijacked
666 later for arena types 4,5)
668 3 differs from 2 as an optimization; some body types have several
669 unused fields in the front of the structure (which are kept in-place
670 for consistency). These bodies can be allocated in smaller chunks,
671 because the leading fields arent accessed. Pointers to such bodies
672 are decremented to point at the unused 'ghost' memory, knowing that
673 the pointers are used with offsets to the real memory.
675 HE, HEK arenas are managed separately, with separate code, but may
676 be merge-able later..
678 PTE arenas are not sv-bodies, but they share these mid-level
679 mechanics, so are considered here. The new mid-level mechanics rely
680 on the sv_type of the body being allocated, so we just reserve one
681 of the unused body-slots for PTEs, then use it in those (2) PTE
682 contexts below (line ~10k)
685 /* get_arena(size): this creates custom-sized arenas
686 TBD: export properly for hv.c: S_more_he().
689 Perl_get_arena(pTHX_ const size_t arena_size, const U32 misc)
692 struct arena_desc* adesc;
693 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
696 /* shouldnt need this
697 if (!arena_size) arena_size = PERL_ARENA_SIZE;
700 /* may need new arena-set to hold new arena */
701 if (!aroot || aroot->curr >= aroot->set_size) {
702 struct arena_set *newroot;
703 Newxz(newroot, 1, struct arena_set);
704 newroot->set_size = ARENAS_PER_SET;
705 newroot->next = aroot;
707 PL_body_arenas = (void *) newroot;
708 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
711 /* ok, now have arena-set with at least 1 empty/available arena-desc */
712 curr = aroot->curr++;
713 adesc = &(aroot->set[curr]);
714 assert(!adesc->arena);
716 Newx(adesc->arena, arena_size, char);
717 adesc->size = arena_size;
719 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
720 curr, (void*)adesc->arena, (UV)arena_size));
726 /* return a thing to the free list */
728 #define del_body(thing, root) \
730 void ** const thing_copy = (void **)thing;\
731 *thing_copy = *root; \
732 *root = (void*)thing_copy; \
737 =head1 SV-Body Allocation
739 Allocation of SV-bodies is similar to SV-heads, differing as follows;
740 the allocation mechanism is used for many body types, so is somewhat
741 more complicated, it uses arena-sets, and has no need for still-live
744 At the outermost level, (new|del)_X*V macros return bodies of the
745 appropriate type. These macros call either (new|del)_body_type or
746 (new|del)_body_allocated macro pairs, depending on specifics of the
747 type. Most body types use the former pair, the latter pair is used to
748 allocate body types with "ghost fields".
750 "ghost fields" are fields that are unused in certain types, and
751 consequently dont need to actually exist. They are declared because
752 they're part of a "base type", which allows use of functions as
753 methods. The simplest examples are AVs and HVs, 2 aggregate types
754 which don't use the fields which support SCALAR semantics.
756 For these types, the arenas are carved up into *_allocated size
757 chunks, we thus avoid wasted memory for those unaccessed members.
758 When bodies are allocated, we adjust the pointer back in memory by the
759 size of the bit not allocated, so it's as if we allocated the full
760 structure. (But things will all go boom if you write to the part that
761 is "not there", because you'll be overwriting the last members of the
762 preceding structure in memory.)
764 We calculate the correction using the STRUCT_OFFSET macro. For
765 example, if xpv_allocated is the same structure as XPV then the two
766 OFFSETs sum to zero, and the pointer is unchanged. If the allocated
767 structure is smaller (no initial NV actually allocated) then the net
768 effect is to subtract the size of the NV from the pointer, to return a
769 new pointer as if an initial NV were actually allocated.
771 This is the same trick as was used for NV and IV bodies. Ironically it
772 doesn't need to be used for NV bodies any more, because NV is now at
773 the start of the structure. IV bodies don't need it either, because
774 they are no longer allocated.
776 In turn, the new_body_* allocators call S_new_body(), which invokes
777 new_body_inline macro, which takes a lock, and takes a body off the
778 linked list at PL_body_roots[sv_type], calling S_more_bodies() if
779 necessary to refresh an empty list. Then the lock is released, and
780 the body is returned.
782 S_more_bodies calls get_arena(), and carves it up into an array of N
783 bodies, which it strings into a linked list. It looks up arena-size
784 and body-size from the body_details table described below, thus
785 supporting the multiple body-types.
787 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
788 the (new|del)_X*V macros are mapped directly to malloc/free.
794 For each sv-type, struct body_details bodies_by_type[] carries
795 parameters which control these aspects of SV handling:
797 Arena_size determines whether arenas are used for this body type, and if
798 so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
799 zero, forcing individual mallocs and frees.
801 Body_size determines how big a body is, and therefore how many fit into
802 each arena. Offset carries the body-pointer adjustment needed for
803 *_allocated body types, and is used in *_allocated macros.
805 But its main purpose is to parameterize info needed in
806 Perl_sv_upgrade(). The info here dramatically simplifies the function
807 vs the implementation in 5.8.7, making it table-driven. All fields
808 are used for this, except for arena_size.
810 For the sv-types that have no bodies, arenas are not used, so those
811 PL_body_roots[sv_type] are unused, and can be overloaded. In
812 something of a special case, SVt_NULL is borrowed for HE arenas;
813 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
814 bodies_by_type[SVt_NULL] slot is not used, as the table is not
817 PTEs also use arenas, but are never seen in Perl_sv_upgrade. Nonetheless,
818 they get their own slot in bodies_by_type[PTE_SVSLOT =SVt_IV], so they can
819 just use the same allocation semantics. At first, PTEs were also
820 overloaded to a non-body sv-type, but this yielded hard-to-find malloc
821 bugs, so was simplified by claiming a new slot. This choice has no
822 consequence at this time.
826 struct body_details {
827 U8 body_size; /* Size to allocate */
828 U8 copy; /* Size of structure to copy (may be shorter) */
830 unsigned int type : 4; /* We have space for a sanity check. */
831 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
832 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
833 unsigned int arena : 1; /* Allocated from an arena */
834 size_t arena_size; /* Size of arena to allocate */
842 /* With -DPURFIY we allocate everything directly, and don't use arenas.
843 This seems a rather elegant way to simplify some of the code below. */
844 #define HASARENA FALSE
846 #define HASARENA TRUE
848 #define NOARENA FALSE
850 /* Size the arenas to exactly fit a given number of bodies. A count
851 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
852 simplifying the default. If count > 0, the arena is sized to fit
853 only that many bodies, allowing arenas to be used for large, rare
854 bodies (XPVFM, XPVIO) without undue waste. The arena size is
855 limited by PERL_ARENA_SIZE, so we can safely oversize the
858 #define FIT_ARENA0(body_size) \
859 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
860 #define FIT_ARENAn(count,body_size) \
861 ( count * body_size <= PERL_ARENA_SIZE) \
862 ? count * body_size \
863 : FIT_ARENA0 (body_size)
864 #define FIT_ARENA(count,body_size) \
866 ? FIT_ARENAn (count, body_size) \
867 : FIT_ARENA0 (body_size)
869 /* A macro to work out the offset needed to subtract from a pointer to (say)
876 to make its members accessible via a pointer to (say)
886 #define relative_STRUCT_OFFSET(longer, shorter, member) \
887 (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
889 /* Calculate the length to copy. Specifically work out the length less any
890 final padding the compiler needed to add. See the comment in sv_upgrade
891 for why copying the padding proved to be a bug. */
893 #define copy_length(type, last_member) \
894 STRUCT_OFFSET(type, last_member) \
895 + sizeof (((type*)SvANY((SV*)0))->last_member)
897 static const struct body_details bodies_by_type[] = {
898 { sizeof(HE), 0, 0, SVt_NULL,
899 FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
901 /* The bind placeholder pretends to be an RV for now.
902 Also it's marked as "can't upgrade" to stop anyone using it before it's
904 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
906 /* IVs are in the head, so the allocation size is 0.
907 However, the slot is overloaded for PTEs. */
908 { sizeof(struct ptr_tbl_ent), /* This is used for PTEs. */
909 sizeof(IV), /* This is used to copy out the IV body. */
910 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
911 NOARENA /* IVS don't need an arena */,
912 /* But PTEs need to know the size of their arena */
913 FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
916 /* 8 bytes on most ILP32 with IEEE doubles */
917 { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
918 FIT_ARENA(0, sizeof(NV)) },
920 /* 8 bytes on most ILP32 with IEEE doubles */
921 { sizeof(xpv_allocated),
922 copy_length(XPV, xpv_len)
923 - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
924 + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
925 SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
928 { sizeof(xpviv_allocated),
929 copy_length(XPVIV, xiv_u)
930 - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
931 + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
932 SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
935 { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
936 HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
939 { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
940 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
943 { sizeof(struct regexp_allocated), sizeof(struct regexp_allocated),
944 + relative_STRUCT_OFFSET(struct regexp_allocated, regexp, xpv_cur),
945 SVt_REGEXP, FALSE, NONV, HASARENA,
946 FIT_ARENA(0, sizeof(struct regexp_allocated))
950 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
951 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
954 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
955 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
957 { sizeof(xpvav_allocated),
958 copy_length(XPVAV, xmg_stash)
959 - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
960 + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
961 SVt_PVAV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
963 { sizeof(xpvhv_allocated),
964 copy_length(XPVHV, xmg_stash)
965 - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
966 + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
967 SVt_PVHV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
970 { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
971 + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
972 SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
974 { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
975 + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
976 SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
978 /* XPVIO is 84 bytes, fits 48x */
979 { sizeof(xpvio_allocated), sizeof(xpvio_allocated),
980 + relative_STRUCT_OFFSET(xpvio_allocated, XPVIO, xpv_cur),
981 SVt_PVIO, TRUE, NONV, HASARENA, FIT_ARENA(24, sizeof(xpvio_allocated)) },
984 #define new_body_type(sv_type) \
985 (void *)((char *)S_new_body(aTHX_ sv_type))
987 #define del_body_type(p, sv_type) \
988 del_body(p, &PL_body_roots[sv_type])
991 #define new_body_allocated(sv_type) \
992 (void *)((char *)S_new_body(aTHX_ sv_type) \
993 - bodies_by_type[sv_type].offset)
995 #define del_body_allocated(p, sv_type) \
996 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
999 #define my_safemalloc(s) (void*)safemalloc(s)
1000 #define my_safecalloc(s) (void*)safecalloc(s, 1)
1001 #define my_safefree(p) safefree((char*)p)
1005 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1006 #define del_XNV(p) my_safefree(p)
1008 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1009 #define del_XPVNV(p) my_safefree(p)
1011 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1012 #define del_XPVAV(p) my_safefree(p)
1014 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1015 #define del_XPVHV(p) my_safefree(p)
1017 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1018 #define del_XPVMG(p) my_safefree(p)
1020 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1021 #define del_XPVGV(p) my_safefree(p)
1025 #define new_XNV() new_body_type(SVt_NV)
1026 #define del_XNV(p) del_body_type(p, SVt_NV)
1028 #define new_XPVNV() new_body_type(SVt_PVNV)
1029 #define del_XPVNV(p) del_body_type(p, SVt_PVNV)
1031 #define new_XPVAV() new_body_allocated(SVt_PVAV)
1032 #define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
1034 #define new_XPVHV() new_body_allocated(SVt_PVHV)
1035 #define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
1037 #define new_XPVMG() new_body_type(SVt_PVMG)
1038 #define del_XPVMG(p) del_body_type(p, SVt_PVMG)
1040 #define new_XPVGV() new_body_type(SVt_PVGV)
1041 #define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1045 /* no arena for you! */
1047 #define new_NOARENA(details) \
1048 my_safemalloc((details)->body_size + (details)->offset)
1049 #define new_NOARENAZ(details) \
1050 my_safecalloc((details)->body_size + (details)->offset)
1053 S_more_bodies (pTHX_ const svtype sv_type)
1056 void ** const root = &PL_body_roots[sv_type];
1057 const struct body_details * const bdp = &bodies_by_type[sv_type];
1058 const size_t body_size = bdp->body_size;
1061 const size_t arena_size = Perl_malloc_good_size(bdp->arena_size);
1062 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1063 static bool done_sanity_check;
1065 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1066 * variables like done_sanity_check. */
1067 if (!done_sanity_check) {
1068 unsigned int i = SVt_LAST;
1070 done_sanity_check = TRUE;
1073 assert (bodies_by_type[i].type == i);
1077 assert(bdp->arena_size);
1079 start = (char*) Perl_get_arena(aTHX_ arena_size, sv_type);
1081 end = start + arena_size - 2 * body_size;
1083 /* computed count doesnt reflect the 1st slot reservation */
1084 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1085 DEBUG_m(PerlIO_printf(Perl_debug_log,
1086 "arena %p end %p arena-size %d (from %d) type %d "
1088 (void*)start, (void*)end, (int)arena_size,
1089 (int)bdp->arena_size, sv_type, (int)body_size,
1090 (int)arena_size / (int)body_size));
1092 DEBUG_m(PerlIO_printf(Perl_debug_log,
1093 "arena %p end %p arena-size %d type %d size %d ct %d\n",
1094 (void*)start, (void*)end,
1095 (int)bdp->arena_size, sv_type, (int)body_size,
1096 (int)bdp->arena_size / (int)body_size));
1098 *root = (void *)start;
1100 while (start <= end) {
1101 char * const next = start + body_size;
1102 *(void**) start = (void *)next;
1105 *(void **)start = 0;
1110 /* grab a new thing from the free list, allocating more if necessary.
1111 The inline version is used for speed in hot routines, and the
1112 function using it serves the rest (unless PURIFY).
1114 #define new_body_inline(xpv, sv_type) \
1116 void ** const r3wt = &PL_body_roots[sv_type]; \
1117 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1118 ? *((void **)(r3wt)) : more_bodies(sv_type)); \
1119 *(r3wt) = *(void**)(xpv); \
1125 S_new_body(pTHX_ const svtype sv_type)
1129 new_body_inline(xpv, sv_type);
1135 static const struct body_details fake_rv =
1136 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1139 =for apidoc sv_upgrade
1141 Upgrade an SV to a more complex form. Generally adds a new body type to the
1142 SV, then copies across as much information as possible from the old body.
1143 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1149 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1154 const svtype old_type = SvTYPE(sv);
1155 const struct body_details *new_type_details;
1156 const struct body_details *old_type_details
1157 = bodies_by_type + old_type;
1158 SV *referant = NULL;
1160 PERL_ARGS_ASSERT_SV_UPGRADE;
1162 if (new_type != SVt_PV && SvIsCOW(sv)) {
1163 sv_force_normal_flags(sv, 0);
1166 if (old_type == new_type)
1169 old_body = SvANY(sv);
1171 /* Copying structures onto other structures that have been neatly zeroed
1172 has a subtle gotcha. Consider XPVMG
1174 +------+------+------+------+------+-------+-------+
1175 | NV | CUR | LEN | IV | MAGIC | STASH |
1176 +------+------+------+------+------+-------+-------+
1177 0 4 8 12 16 20 24 28
1179 where NVs are aligned to 8 bytes, so that sizeof that structure is
1180 actually 32 bytes long, with 4 bytes of padding at the end:
1182 +------+------+------+------+------+-------+-------+------+
1183 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1184 +------+------+------+------+------+-------+-------+------+
1185 0 4 8 12 16 20 24 28 32
1187 so what happens if you allocate memory for this structure:
1189 +------+------+------+------+------+-------+-------+------+------+...
1190 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1191 +------+------+------+------+------+-------+-------+------+------+...
1192 0 4 8 12 16 20 24 28 32 36
1194 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1195 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1196 started out as zero once, but it's quite possible that it isn't. So now,
1197 rather than a nicely zeroed GP, you have it pointing somewhere random.
1200 (In fact, GP ends up pointing at a previous GP structure, because the
1201 principle cause of the padding in XPVMG getting garbage is a copy of
1202 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1203 this happens to be moot because XPVGV has been re-ordered, with GP
1204 no longer after STASH)
1206 So we are careful and work out the size of used parts of all the
1214 referant = SvRV(sv);
1215 old_type_details = &fake_rv;
1216 if (new_type == SVt_NV)
1217 new_type = SVt_PVNV;
1219 if (new_type < SVt_PVIV) {
1220 new_type = (new_type == SVt_NV)
1221 ? SVt_PVNV : SVt_PVIV;
1226 if (new_type < SVt_PVNV) {
1227 new_type = SVt_PVNV;
1231 assert(new_type > SVt_PV);
1232 assert(SVt_IV < SVt_PV);
1233 assert(SVt_NV < SVt_PV);
1240 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1241 there's no way that it can be safely upgraded, because perl.c
1242 expects to Safefree(SvANY(PL_mess_sv)) */
1243 assert(sv != PL_mess_sv);
1244 /* This flag bit is used to mean other things in other scalar types.
1245 Given that it only has meaning inside the pad, it shouldn't be set
1246 on anything that can get upgraded. */
1247 assert(!SvPAD_TYPED(sv));
1250 if (old_type_details->cant_upgrade)
1251 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1252 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1255 if (old_type > new_type)
1256 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1257 (int)old_type, (int)new_type);
1259 new_type_details = bodies_by_type + new_type;
1261 SvFLAGS(sv) &= ~SVTYPEMASK;
1262 SvFLAGS(sv) |= new_type;
1264 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1265 the return statements above will have triggered. */
1266 assert (new_type != SVt_NULL);
1269 assert(old_type == SVt_NULL);
1270 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1274 assert(old_type == SVt_NULL);
1275 SvANY(sv) = new_XNV();
1280 assert(new_type_details->body_size);
1283 assert(new_type_details->arena);
1284 assert(new_type_details->arena_size);
1285 /* This points to the start of the allocated area. */
1286 new_body_inline(new_body, new_type);
1287 Zero(new_body, new_type_details->body_size, char);
1288 new_body = ((char *)new_body) - new_type_details->offset;
1290 /* We always allocated the full length item with PURIFY. To do this
1291 we fake things so that arena is false for all 16 types.. */
1292 new_body = new_NOARENAZ(new_type_details);
1294 SvANY(sv) = new_body;
1295 if (new_type == SVt_PVAV) {
1299 if (old_type_details->body_size) {
1302 /* It will have been zeroed when the new body was allocated.
1303 Lets not write to it, in case it confuses a write-back
1309 #ifndef NODEFAULT_SHAREKEYS
1310 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1312 HvMAX(sv) = 7; /* (start with 8 buckets) */
1313 if (old_type_details->body_size) {
1316 /* It will have been zeroed when the new body was allocated.
1317 Lets not write to it, in case it confuses a write-back
1322 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1323 The target created by newSVrv also is, and it can have magic.
1324 However, it never has SvPVX set.
1326 if (old_type == SVt_IV) {
1328 } else if (old_type >= SVt_PV) {
1329 assert(SvPVX_const(sv) == 0);
1332 if (old_type >= SVt_PVMG) {
1333 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1334 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1336 sv->sv_u.svu_array = NULL; /* or svu_hash */
1342 /* XXX Is this still needed? Was it ever needed? Surely as there is
1343 no route from NV to PVIV, NOK can never be true */
1344 assert(!SvNOKp(sv));
1356 assert(new_type_details->body_size);
1357 /* We always allocated the full length item with PURIFY. To do this
1358 we fake things so that arena is false for all 16 types.. */
1359 if(new_type_details->arena) {
1360 /* This points to the start of the allocated area. */
1361 new_body_inline(new_body, new_type);
1362 Zero(new_body, new_type_details->body_size, char);
1363 new_body = ((char *)new_body) - new_type_details->offset;
1365 new_body = new_NOARENAZ(new_type_details);
1367 SvANY(sv) = new_body;
1369 if (old_type_details->copy) {
1370 /* There is now the potential for an upgrade from something without
1371 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1372 int offset = old_type_details->offset;
1373 int length = old_type_details->copy;
1375 if (new_type_details->offset > old_type_details->offset) {
1376 const int difference
1377 = new_type_details->offset - old_type_details->offset;
1378 offset += difference;
1379 length -= difference;
1381 assert (length >= 0);
1383 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1387 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1388 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1389 * correct 0.0 for us. Otherwise, if the old body didn't have an
1390 * NV slot, but the new one does, then we need to initialise the
1391 * freshly created NV slot with whatever the correct bit pattern is
1393 if (old_type_details->zero_nv && !new_type_details->zero_nv
1394 && !isGV_with_GP(sv))
1398 if (new_type == SVt_PVIO)
1399 IoPAGE_LEN(sv) = 60;
1400 if (old_type < SVt_PV) {
1401 /* referant will be NULL unless the old type was SVt_IV emulating
1403 sv->sv_u.svu_rv = referant;
1407 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1408 (unsigned long)new_type);
1411 if (old_type_details->arena) {
1412 /* If there was an old body, then we need to free it.
1413 Note that there is an assumption that all bodies of types that
1414 can be upgraded came from arenas. Only the more complex non-
1415 upgradable types are allowed to be directly malloc()ed. */
1417 my_safefree(old_body);
1419 del_body((void*)((char*)old_body + old_type_details->offset),
1420 &PL_body_roots[old_type]);
1426 =for apidoc sv_backoff
1428 Remove any string offset. You should normally use the C<SvOOK_off> macro
1435 Perl_sv_backoff(pTHX_ register SV *const sv)
1438 const char * const s = SvPVX_const(sv);
1440 PERL_ARGS_ASSERT_SV_BACKOFF;
1441 PERL_UNUSED_CONTEXT;
1444 assert(SvTYPE(sv) != SVt_PVHV);
1445 assert(SvTYPE(sv) != SVt_PVAV);
1447 SvOOK_offset(sv, delta);
1449 SvLEN_set(sv, SvLEN(sv) + delta);
1450 SvPV_set(sv, SvPVX(sv) - delta);
1451 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1452 SvFLAGS(sv) &= ~SVf_OOK;
1459 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1460 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1461 Use the C<SvGROW> wrapper instead.
1467 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1471 PERL_ARGS_ASSERT_SV_GROW;
1473 if (PL_madskills && newlen >= 0x100000) {
1474 PerlIO_printf(Perl_debug_log,
1475 "Allocation too large: %"UVxf"\n", (UV)newlen);
1477 #ifdef HAS_64K_LIMIT
1478 if (newlen >= 0x10000) {
1479 PerlIO_printf(Perl_debug_log,
1480 "Allocation too large: %"UVxf"\n", (UV)newlen);
1483 #endif /* HAS_64K_LIMIT */
1486 if (SvTYPE(sv) < SVt_PV) {
1487 sv_upgrade(sv, SVt_PV);
1488 s = SvPVX_mutable(sv);
1490 else if (SvOOK(sv)) { /* pv is offset? */
1492 s = SvPVX_mutable(sv);
1493 if (newlen > SvLEN(sv))
1494 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1495 #ifdef HAS_64K_LIMIT
1496 if (newlen >= 0x10000)
1501 s = SvPVX_mutable(sv);
1503 if (newlen > SvLEN(sv)) { /* need more room? */
1504 #ifndef Perl_safesysmalloc_size
1505 newlen = PERL_STRLEN_ROUNDUP(newlen);
1507 if (SvLEN(sv) && s) {
1508 s = (char*)saferealloc(s, newlen);
1511 s = (char*)safemalloc(newlen);
1512 if (SvPVX_const(sv) && SvCUR(sv)) {
1513 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1517 #ifdef Perl_safesysmalloc_size
1518 /* Do this here, do it once, do it right, and then we will never get
1519 called back into sv_grow() unless there really is some growing
1521 SvLEN_set(sv, Perl_safesysmalloc_size(s));
1523 SvLEN_set(sv, newlen);
1530 =for apidoc sv_setiv
1532 Copies an integer into the given SV, upgrading first if necessary.
1533 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1539 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1543 PERL_ARGS_ASSERT_SV_SETIV;
1545 SV_CHECK_THINKFIRST_COW_DROP(sv);
1546 switch (SvTYPE(sv)) {
1549 sv_upgrade(sv, SVt_IV);
1552 sv_upgrade(sv, SVt_PVIV);
1556 if (!isGV_with_GP(sv))
1563 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1567 (void)SvIOK_only(sv); /* validate number */
1573 =for apidoc sv_setiv_mg
1575 Like C<sv_setiv>, but also handles 'set' magic.
1581 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1583 PERL_ARGS_ASSERT_SV_SETIV_MG;
1590 =for apidoc sv_setuv
1592 Copies an unsigned integer into the given SV, upgrading first if necessary.
1593 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1599 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1601 PERL_ARGS_ASSERT_SV_SETUV;
1603 /* With these two if statements:
1604 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1607 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1609 If you wish to remove them, please benchmark to see what the effect is
1611 if (u <= (UV)IV_MAX) {
1612 sv_setiv(sv, (IV)u);
1621 =for apidoc sv_setuv_mg
1623 Like C<sv_setuv>, but also handles 'set' magic.
1629 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1631 PERL_ARGS_ASSERT_SV_SETUV_MG;
1638 =for apidoc sv_setnv
1640 Copies a double into the given SV, upgrading first if necessary.
1641 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1647 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1651 PERL_ARGS_ASSERT_SV_SETNV;
1653 SV_CHECK_THINKFIRST_COW_DROP(sv);
1654 switch (SvTYPE(sv)) {
1657 sv_upgrade(sv, SVt_NV);
1661 sv_upgrade(sv, SVt_PVNV);
1665 if (!isGV_with_GP(sv))
1672 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1677 (void)SvNOK_only(sv); /* validate number */
1682 =for apidoc sv_setnv_mg
1684 Like C<sv_setnv>, but also handles 'set' magic.
1690 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1692 PERL_ARGS_ASSERT_SV_SETNV_MG;
1698 /* Print an "isn't numeric" warning, using a cleaned-up,
1699 * printable version of the offending string
1703 S_not_a_number(pTHX_ SV *const sv)
1710 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1713 dsv = newSVpvs_flags("", SVs_TEMP);
1714 pv = sv_uni_display(dsv, sv, 10, 0);
1717 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1718 /* each *s can expand to 4 chars + "...\0",
1719 i.e. need room for 8 chars */
1721 const char *s = SvPVX_const(sv);
1722 const char * const end = s + SvCUR(sv);
1723 for ( ; s < end && d < limit; s++ ) {
1725 if (ch & 128 && !isPRINT_LC(ch)) {
1734 else if (ch == '\r') {
1738 else if (ch == '\f') {
1742 else if (ch == '\\') {
1746 else if (ch == '\0') {
1750 else if (isPRINT_LC(ch))
1767 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1768 "Argument \"%s\" isn't numeric in %s", pv,
1771 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1772 "Argument \"%s\" isn't numeric", pv);
1776 =for apidoc looks_like_number
1778 Test if the content of an SV looks like a number (or is a number).
1779 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1780 non-numeric warning), even if your atof() doesn't grok them.
1786 Perl_looks_like_number(pTHX_ SV *const sv)
1788 register const char *sbegin;
1791 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1794 sbegin = SvPVX_const(sv);
1797 else if (SvPOKp(sv))
1798 sbegin = SvPV_const(sv, len);
1800 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1801 return grok_number(sbegin, len, NULL);
1805 S_glob_2number(pTHX_ GV * const gv)
1807 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1808 SV *const buffer = sv_newmortal();
1810 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1812 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1815 gv_efullname3(buffer, gv, "*");
1816 SvFLAGS(gv) |= wasfake;
1818 /* We know that all GVs stringify to something that is not-a-number,
1819 so no need to test that. */
1820 if (ckWARN(WARN_NUMERIC))
1821 not_a_number(buffer);
1822 /* We just want something true to return, so that S_sv_2iuv_common
1823 can tail call us and return true. */
1828 S_glob_2pv(pTHX_ GV * const gv, STRLEN * const len)
1830 const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1831 SV *const buffer = sv_newmortal();
1833 PERL_ARGS_ASSERT_GLOB_2PV;
1835 /* FAKE globs can get coerced, so need to turn this off temporarily if it
1838 gv_efullname3(buffer, gv, "*");
1839 SvFLAGS(gv) |= wasfake;
1841 assert(SvPOK(buffer));
1843 *len = SvCUR(buffer);
1845 return SvPVX(buffer);
1848 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1849 until proven guilty, assume that things are not that bad... */
1854 As 64 bit platforms often have an NV that doesn't preserve all bits of
1855 an IV (an assumption perl has been based on to date) it becomes necessary
1856 to remove the assumption that the NV always carries enough precision to
1857 recreate the IV whenever needed, and that the NV is the canonical form.
1858 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1859 precision as a side effect of conversion (which would lead to insanity
1860 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1861 1) to distinguish between IV/UV/NV slots that have cached a valid
1862 conversion where precision was lost and IV/UV/NV slots that have a
1863 valid conversion which has lost no precision
1864 2) to ensure that if a numeric conversion to one form is requested that
1865 would lose precision, the precise conversion (or differently
1866 imprecise conversion) is also performed and cached, to prevent
1867 requests for different numeric formats on the same SV causing
1868 lossy conversion chains. (lossless conversion chains are perfectly
1873 SvIOKp is true if the IV slot contains a valid value
1874 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1875 SvNOKp is true if the NV slot contains a valid value
1876 SvNOK is true only if the NV value is accurate
1879 while converting from PV to NV, check to see if converting that NV to an
1880 IV(or UV) would lose accuracy over a direct conversion from PV to
1881 IV(or UV). If it would, cache both conversions, return NV, but mark
1882 SV as IOK NOKp (ie not NOK).
1884 While converting from PV to IV, check to see if converting that IV to an
1885 NV would lose accuracy over a direct conversion from PV to NV. If it
1886 would, cache both conversions, flag similarly.
1888 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1889 correctly because if IV & NV were set NV *always* overruled.
1890 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1891 changes - now IV and NV together means that the two are interchangeable:
1892 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1894 The benefit of this is that operations such as pp_add know that if
1895 SvIOK is true for both left and right operands, then integer addition
1896 can be used instead of floating point (for cases where the result won't
1897 overflow). Before, floating point was always used, which could lead to
1898 loss of precision compared with integer addition.
1900 * making IV and NV equal status should make maths accurate on 64 bit
1902 * may speed up maths somewhat if pp_add and friends start to use
1903 integers when possible instead of fp. (Hopefully the overhead in
1904 looking for SvIOK and checking for overflow will not outweigh the
1905 fp to integer speedup)
1906 * will slow down integer operations (callers of SvIV) on "inaccurate"
1907 values, as the change from SvIOK to SvIOKp will cause a call into
1908 sv_2iv each time rather than a macro access direct to the IV slot
1909 * should speed up number->string conversion on integers as IV is
1910 favoured when IV and NV are equally accurate
1912 ####################################################################
1913 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1914 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1915 On the other hand, SvUOK is true iff UV.
1916 ####################################################################
1918 Your mileage will vary depending your CPU's relative fp to integer
1922 #ifndef NV_PRESERVES_UV
1923 # define IS_NUMBER_UNDERFLOW_IV 1
1924 # define IS_NUMBER_UNDERFLOW_UV 2
1925 # define IS_NUMBER_IV_AND_UV 2
1926 # define IS_NUMBER_OVERFLOW_IV 4
1927 # define IS_NUMBER_OVERFLOW_UV 5
1929 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1931 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1933 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1941 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1943 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1944 if (SvNVX(sv) < (NV)IV_MIN) {
1945 (void)SvIOKp_on(sv);
1947 SvIV_set(sv, IV_MIN);
1948 return IS_NUMBER_UNDERFLOW_IV;
1950 if (SvNVX(sv) > (NV)UV_MAX) {
1951 (void)SvIOKp_on(sv);
1954 SvUV_set(sv, UV_MAX);
1955 return IS_NUMBER_OVERFLOW_UV;
1957 (void)SvIOKp_on(sv);
1959 /* Can't use strtol etc to convert this string. (See truth table in
1961 if (SvNVX(sv) <= (UV)IV_MAX) {
1962 SvIV_set(sv, I_V(SvNVX(sv)));
1963 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1964 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1966 /* Integer is imprecise. NOK, IOKp */
1968 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1971 SvUV_set(sv, U_V(SvNVX(sv)));
1972 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1973 if (SvUVX(sv) == UV_MAX) {
1974 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1975 possibly be preserved by NV. Hence, it must be overflow.
1977 return IS_NUMBER_OVERFLOW_UV;
1979 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1981 /* Integer is imprecise. NOK, IOKp */
1983 return IS_NUMBER_OVERFLOW_IV;
1985 #endif /* !NV_PRESERVES_UV*/
1988 S_sv_2iuv_common(pTHX_ SV *const sv)
1992 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1995 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1996 * without also getting a cached IV/UV from it at the same time
1997 * (ie PV->NV conversion should detect loss of accuracy and cache
1998 * IV or UV at same time to avoid this. */
1999 /* IV-over-UV optimisation - choose to cache IV if possible */
2001 if (SvTYPE(sv) == SVt_NV)
2002 sv_upgrade(sv, SVt_PVNV);
2004 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2005 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2006 certainly cast into the IV range at IV_MAX, whereas the correct
2007 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2009 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2010 if (Perl_isnan(SvNVX(sv))) {
2016 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2017 SvIV_set(sv, I_V(SvNVX(sv)));
2018 if (SvNVX(sv) == (NV) SvIVX(sv)
2019 #ifndef NV_PRESERVES_UV
2020 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2021 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2022 /* Don't flag it as "accurately an integer" if the number
2023 came from a (by definition imprecise) NV operation, and
2024 we're outside the range of NV integer precision */
2028 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2030 /* scalar has trailing garbage, eg "42a" */
2032 DEBUG_c(PerlIO_printf(Perl_debug_log,
2033 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2039 /* IV not precise. No need to convert from PV, as NV
2040 conversion would already have cached IV if it detected
2041 that PV->IV would be better than PV->NV->IV
2042 flags already correct - don't set public IOK. */
2043 DEBUG_c(PerlIO_printf(Perl_debug_log,
2044 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2049 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2050 but the cast (NV)IV_MIN rounds to a the value less (more
2051 negative) than IV_MIN which happens to be equal to SvNVX ??
2052 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2053 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2054 (NV)UVX == NVX are both true, but the values differ. :-(
2055 Hopefully for 2s complement IV_MIN is something like
2056 0x8000000000000000 which will be exact. NWC */
2059 SvUV_set(sv, U_V(SvNVX(sv)));
2061 (SvNVX(sv) == (NV) SvUVX(sv))
2062 #ifndef NV_PRESERVES_UV
2063 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2064 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2065 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2066 /* Don't flag it as "accurately an integer" if the number
2067 came from a (by definition imprecise) NV operation, and
2068 we're outside the range of NV integer precision */
2074 DEBUG_c(PerlIO_printf(Perl_debug_log,
2075 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2081 else if (SvPOKp(sv) && SvLEN(sv)) {
2083 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2084 /* We want to avoid a possible problem when we cache an IV/ a UV which
2085 may be later translated to an NV, and the resulting NV is not
2086 the same as the direct translation of the initial string
2087 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2088 be careful to ensure that the value with the .456 is around if the
2089 NV value is requested in the future).
2091 This means that if we cache such an IV/a UV, we need to cache the
2092 NV as well. Moreover, we trade speed for space, and do not
2093 cache the NV if we are sure it's not needed.
2096 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2097 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2098 == IS_NUMBER_IN_UV) {
2099 /* It's definitely an integer, only upgrade to PVIV */
2100 if (SvTYPE(sv) < SVt_PVIV)
2101 sv_upgrade(sv, SVt_PVIV);
2103 } else if (SvTYPE(sv) < SVt_PVNV)
2104 sv_upgrade(sv, SVt_PVNV);
2106 /* If NVs preserve UVs then we only use the UV value if we know that
2107 we aren't going to call atof() below. If NVs don't preserve UVs
2108 then the value returned may have more precision than atof() will
2109 return, even though value isn't perfectly accurate. */
2110 if ((numtype & (IS_NUMBER_IN_UV
2111 #ifdef NV_PRESERVES_UV
2114 )) == IS_NUMBER_IN_UV) {
2115 /* This won't turn off the public IOK flag if it was set above */
2116 (void)SvIOKp_on(sv);
2118 if (!(numtype & IS_NUMBER_NEG)) {
2120 if (value <= (UV)IV_MAX) {
2121 SvIV_set(sv, (IV)value);
2123 /* it didn't overflow, and it was positive. */
2124 SvUV_set(sv, value);
2128 /* 2s complement assumption */
2129 if (value <= (UV)IV_MIN) {
2130 SvIV_set(sv, -(IV)value);
2132 /* Too negative for an IV. This is a double upgrade, but
2133 I'm assuming it will be rare. */
2134 if (SvTYPE(sv) < SVt_PVNV)
2135 sv_upgrade(sv, SVt_PVNV);
2139 SvNV_set(sv, -(NV)value);
2140 SvIV_set(sv, IV_MIN);
2144 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2145 will be in the previous block to set the IV slot, and the next
2146 block to set the NV slot. So no else here. */
2148 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2149 != IS_NUMBER_IN_UV) {
2150 /* It wasn't an (integer that doesn't overflow the UV). */
2151 SvNV_set(sv, Atof(SvPVX_const(sv)));
2153 if (! numtype && ckWARN(WARN_NUMERIC))
2156 #if defined(USE_LONG_DOUBLE)
2157 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2158 PTR2UV(sv), SvNVX(sv)));
2160 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2161 PTR2UV(sv), SvNVX(sv)));
2164 #ifdef NV_PRESERVES_UV
2165 (void)SvIOKp_on(sv);
2167 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2168 SvIV_set(sv, I_V(SvNVX(sv)));
2169 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2172 NOOP; /* Integer is imprecise. NOK, IOKp */
2174 /* UV will not work better than IV */
2176 if (SvNVX(sv) > (NV)UV_MAX) {
2178 /* Integer is inaccurate. NOK, IOKp, is UV */
2179 SvUV_set(sv, UV_MAX);
2181 SvUV_set(sv, U_V(SvNVX(sv)));
2182 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2183 NV preservse UV so can do correct comparison. */
2184 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2187 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
2192 #else /* NV_PRESERVES_UV */
2193 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2194 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2195 /* The IV/UV slot will have been set from value returned by
2196 grok_number above. The NV slot has just been set using
2199 assert (SvIOKp(sv));
2201 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2202 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2203 /* Small enough to preserve all bits. */
2204 (void)SvIOKp_on(sv);
2206 SvIV_set(sv, I_V(SvNVX(sv)));
2207 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2209 /* Assumption: first non-preserved integer is < IV_MAX,
2210 this NV is in the preserved range, therefore: */
2211 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2213 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2217 0 0 already failed to read UV.
2218 0 1 already failed to read UV.
2219 1 0 you won't get here in this case. IV/UV
2220 slot set, public IOK, Atof() unneeded.
2221 1 1 already read UV.
2222 so there's no point in sv_2iuv_non_preserve() attempting
2223 to use atol, strtol, strtoul etc. */
2225 sv_2iuv_non_preserve (sv, numtype);
2227 sv_2iuv_non_preserve (sv);
2231 #endif /* NV_PRESERVES_UV */
2232 /* It might be more code efficient to go through the entire logic above
2233 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2234 gets complex and potentially buggy, so more programmer efficient
2235 to do it this way, by turning off the public flags: */
2237 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2241 if (isGV_with_GP(sv))
2242 return glob_2number((GV *)sv);
2244 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2245 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2248 if (SvTYPE(sv) < SVt_IV)
2249 /* Typically the caller expects that sv_any is not NULL now. */
2250 sv_upgrade(sv, SVt_IV);
2251 /* Return 0 from the caller. */
2258 =for apidoc sv_2iv_flags
2260 Return the integer value of an SV, doing any necessary string
2261 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2262 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2268 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2273 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2274 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2275 cache IVs just in case. In practice it seems that they never
2276 actually anywhere accessible by user Perl code, let alone get used
2277 in anything other than a string context. */
2278 if (flags & SV_GMAGIC)
2283 return I_V(SvNVX(sv));
2285 if (SvPOKp(sv) && SvLEN(sv)) {
2288 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2290 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2291 == IS_NUMBER_IN_UV) {
2292 /* It's definitely an integer */
2293 if (numtype & IS_NUMBER_NEG) {
2294 if (value < (UV)IV_MIN)
2297 if (value < (UV)IV_MAX)
2302 if (ckWARN(WARN_NUMERIC))
2305 return I_V(Atof(SvPVX_const(sv)));
2310 assert(SvTYPE(sv) >= SVt_PVMG);
2311 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2312 } else if (SvTHINKFIRST(sv)) {
2316 SV * const tmpstr=AMG_CALLun(sv,numer);
2317 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2318 return SvIV(tmpstr);
2321 return PTR2IV(SvRV(sv));
2324 sv_force_normal_flags(sv, 0);
2326 if (SvREADONLY(sv) && !SvOK(sv)) {
2327 if (ckWARN(WARN_UNINITIALIZED))
2333 if (S_sv_2iuv_common(aTHX_ sv))
2336 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2337 PTR2UV(sv),SvIVX(sv)));
2338 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2342 =for apidoc sv_2uv_flags
2344 Return the unsigned integer value of an SV, doing any necessary string
2345 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2346 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2352 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2357 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2358 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2359 cache IVs just in case. */
2360 if (flags & SV_GMAGIC)
2365 return U_V(SvNVX(sv));
2366 if (SvPOKp(sv) && SvLEN(sv)) {
2369 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2371 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2372 == IS_NUMBER_IN_UV) {
2373 /* It's definitely an integer */
2374 if (!(numtype & IS_NUMBER_NEG))
2378 if (ckWARN(WARN_NUMERIC))
2381 return U_V(Atof(SvPVX_const(sv)));
2386 assert(SvTYPE(sv) >= SVt_PVMG);
2387 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2388 } else if (SvTHINKFIRST(sv)) {
2392 SV *const tmpstr = AMG_CALLun(sv,numer);
2393 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2394 return SvUV(tmpstr);
2397 return PTR2UV(SvRV(sv));
2400 sv_force_normal_flags(sv, 0);
2402 if (SvREADONLY(sv) && !SvOK(sv)) {
2403 if (ckWARN(WARN_UNINITIALIZED))
2409 if (S_sv_2iuv_common(aTHX_ sv))
2413 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2414 PTR2UV(sv),SvUVX(sv)));
2415 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2421 Return the num value of an SV, doing any necessary string or integer
2422 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2429 Perl_sv_2nv(pTHX_ register SV *const sv)
2434 if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2435 /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2436 cache IVs just in case. */
2440 if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2441 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2442 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2444 return Atof(SvPVX_const(sv));
2448 return (NV)SvUVX(sv);
2450 return (NV)SvIVX(sv);
2455 assert(SvTYPE(sv) >= SVt_PVMG);
2456 /* This falls through to the report_uninit near the end of the
2458 } else if (SvTHINKFIRST(sv)) {
2462 SV *const tmpstr = AMG_CALLun(sv,numer);
2463 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2464 return SvNV(tmpstr);
2467 return PTR2NV(SvRV(sv));
2470 sv_force_normal_flags(sv, 0);
2472 if (SvREADONLY(sv) && !SvOK(sv)) {
2473 if (ckWARN(WARN_UNINITIALIZED))
2478 if (SvTYPE(sv) < SVt_NV) {
2479 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2480 sv_upgrade(sv, SVt_NV);
2481 #ifdef USE_LONG_DOUBLE
2483 STORE_NUMERIC_LOCAL_SET_STANDARD();
2484 PerlIO_printf(Perl_debug_log,
2485 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2486 PTR2UV(sv), SvNVX(sv));
2487 RESTORE_NUMERIC_LOCAL();
2491 STORE_NUMERIC_LOCAL_SET_STANDARD();
2492 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2493 PTR2UV(sv), SvNVX(sv));
2494 RESTORE_NUMERIC_LOCAL();
2498 else if (SvTYPE(sv) < SVt_PVNV)
2499 sv_upgrade(sv, SVt_PVNV);
2504 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2505 #ifdef NV_PRESERVES_UV
2511 /* Only set the public NV OK flag if this NV preserves the IV */
2512 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2514 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2515 : (SvIVX(sv) == I_V(SvNVX(sv))))
2521 else if (SvPOKp(sv) && SvLEN(sv)) {
2523 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2524 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2526 #ifdef NV_PRESERVES_UV
2527 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2528 == IS_NUMBER_IN_UV) {
2529 /* It's definitely an integer */
2530 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2532 SvNV_set(sv, Atof(SvPVX_const(sv)));
2538 SvNV_set(sv, Atof(SvPVX_const(sv)));
2539 /* Only set the public NV OK flag if this NV preserves the value in
2540 the PV at least as well as an IV/UV would.
2541 Not sure how to do this 100% reliably. */
2542 /* if that shift count is out of range then Configure's test is
2543 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2545 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2546 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2547 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2548 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2549 /* Can't use strtol etc to convert this string, so don't try.
2550 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2553 /* value has been set. It may not be precise. */
2554 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2555 /* 2s complement assumption for (UV)IV_MIN */
2556 SvNOK_on(sv); /* Integer is too negative. */
2561 if (numtype & IS_NUMBER_NEG) {
2562 SvIV_set(sv, -(IV)value);
2563 } else if (value <= (UV)IV_MAX) {
2564 SvIV_set(sv, (IV)value);
2566 SvUV_set(sv, value);
2570 if (numtype & IS_NUMBER_NOT_INT) {
2571 /* I believe that even if the original PV had decimals,
2572 they are lost beyond the limit of the FP precision.
2573 However, neither is canonical, so both only get p
2574 flags. NWC, 2000/11/25 */
2575 /* Both already have p flags, so do nothing */
2577 const NV nv = SvNVX(sv);
2578 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2579 if (SvIVX(sv) == I_V(nv)) {
2582 /* It had no "." so it must be integer. */
2586 /* between IV_MAX and NV(UV_MAX).
2587 Could be slightly > UV_MAX */
2589 if (numtype & IS_NUMBER_NOT_INT) {
2590 /* UV and NV both imprecise. */
2592 const UV nv_as_uv = U_V(nv);
2594 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2603 /* It might be more code efficient to go through the entire logic above
2604 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2605 gets complex and potentially buggy, so more programmer efficient
2606 to do it this way, by turning off the public flags: */
2608 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2609 #endif /* NV_PRESERVES_UV */
2612 if (isGV_with_GP(sv)) {
2613 glob_2number((GV *)sv);
2617 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2619 assert (SvTYPE(sv) >= SVt_NV);
2620 /* Typically the caller expects that sv_any is not NULL now. */
2621 /* XXX Ilya implies that this is a bug in callers that assume this
2622 and ideally should be fixed. */
2625 #if defined(USE_LONG_DOUBLE)
2627 STORE_NUMERIC_LOCAL_SET_STANDARD();
2628 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2629 PTR2UV(sv), SvNVX(sv));
2630 RESTORE_NUMERIC_LOCAL();
2634 STORE_NUMERIC_LOCAL_SET_STANDARD();
2635 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2636 PTR2UV(sv), SvNVX(sv));
2637 RESTORE_NUMERIC_LOCAL();
2646 Return an SV with the numeric value of the source SV, doing any necessary
2647 reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2648 access this function.
2654 Perl_sv_2num(pTHX_ register SV *const sv)
2656 PERL_ARGS_ASSERT_SV_2NUM;
2661 SV * const tmpsv = AMG_CALLun(sv,numer);
2662 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2663 return sv_2num(tmpsv);
2665 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2668 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2669 * UV as a string towards the end of buf, and return pointers to start and
2672 * We assume that buf is at least TYPE_CHARS(UV) long.
2676 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2678 char *ptr = buf + TYPE_CHARS(UV);
2679 char * const ebuf = ptr;
2682 PERL_ARGS_ASSERT_UIV_2BUF;
2694 *--ptr = '0' + (char)(uv % 10);
2703 =for apidoc sv_2pv_flags
2705 Returns a pointer to the string value of an SV, and sets *lp to its length.
2706 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2708 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2709 usually end up here too.
2715 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2725 if (SvGMAGICAL(sv)) {
2726 if (flags & SV_GMAGIC)
2731 if (flags & SV_MUTABLE_RETURN)
2732 return SvPVX_mutable(sv);
2733 if (flags & SV_CONST_RETURN)
2734 return (char *)SvPVX_const(sv);
2737 if (SvIOKp(sv) || SvNOKp(sv)) {
2738 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2743 ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2744 : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2746 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2753 #ifdef FIXNEGATIVEZERO
2754 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2760 SvUPGRADE(sv, SVt_PV);
2763 s = SvGROW_mutable(sv, len + 1);
2766 return (char*)memcpy(s, tbuf, len + 1);
2772 assert(SvTYPE(sv) >= SVt_PVMG);
2773 /* This falls through to the report_uninit near the end of the
2775 } else if (SvTHINKFIRST(sv)) {
2779 SV *const tmpstr = AMG_CALLun(sv,string);
2780 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2782 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2786 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2787 if (flags & SV_CONST_RETURN) {
2788 pv = (char *) SvPVX_const(tmpstr);
2790 pv = (flags & SV_MUTABLE_RETURN)
2791 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2794 *lp = SvCUR(tmpstr);
2796 pv = sv_2pv_flags(tmpstr, lp, flags);
2809 const SV *const referent = (SV*)SvRV(sv);
2813 retval = buffer = savepvn("NULLREF", len);
2814 } else if (SvTYPE(referent) == SVt_REGEXP) {
2815 const REGEXP * const re = (REGEXP *)referent;
2820 /* If the regex is UTF-8 we want the containing scalar to
2821 have an UTF-8 flag too */
2827 if ((seen_evals = RX_SEEN_EVALS(re)))
2828 PL_reginterp_cnt += seen_evals;
2831 *lp = RX_WRAPLEN(re);
2833 return RX_WRAPPED(re);
2835 const char *const typestr = sv_reftype(referent, 0);
2836 const STRLEN typelen = strlen(typestr);
2837 UV addr = PTR2UV(referent);
2838 const char *stashname = NULL;
2839 STRLEN stashnamelen = 0; /* hush, gcc */
2840 const char *buffer_end;
2842 if (SvOBJECT(referent)) {
2843 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2846 stashname = HEK_KEY(name);
2847 stashnamelen = HEK_LEN(name);
2849 if (HEK_UTF8(name)) {
2855 stashname = "__ANON__";
2858 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2859 + 2 * sizeof(UV) + 2 /* )\0 */;
2861 len = typelen + 3 /* (0x */
2862 + 2 * sizeof(UV) + 2 /* )\0 */;
2865 Newx(buffer, len, char);
2866 buffer_end = retval = buffer + len;
2868 /* Working backwards */
2872 *--retval = PL_hexdigit[addr & 15];
2873 } while (addr >>= 4);
2879 memcpy(retval, typestr, typelen);
2883 retval -= stashnamelen;
2884 memcpy(retval, stashname, stashnamelen);
2886 /* retval may not neccesarily have reached the start of the
2888 assert (retval >= buffer);
2890 len = buffer_end - retval - 1; /* -1 for that \0 */
2898 if (SvREADONLY(sv) && !SvOK(sv)) {
2901 if (flags & SV_UNDEF_RETURNS_NULL)
2903 if (ckWARN(WARN_UNINITIALIZED))
2908 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2909 /* I'm assuming that if both IV and NV are equally valid then
2910 converting the IV is going to be more efficient */
2911 const U32 isUIOK = SvIsUV(sv);
2912 char buf[TYPE_CHARS(UV)];
2916 if (SvTYPE(sv) < SVt_PVIV)
2917 sv_upgrade(sv, SVt_PVIV);
2918 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2920 /* inlined from sv_setpvn */
2921 s = SvGROW_mutable(sv, len + 1);
2922 Move(ptr, s, len, char);
2926 else if (SvNOKp(sv)) {
2927 const int olderrno = errno;
2928 if (SvTYPE(sv) < SVt_PVNV)
2929 sv_upgrade(sv, SVt_PVNV);
2930 /* The +20 is pure guesswork. Configure test needed. --jhi */
2931 s = SvGROW_mutable(sv, NV_DIG + 20);
2932 /* some Xenix systems wipe out errno here */
2934 if (SvNVX(sv) == 0.0)
2935 my_strlcpy(s, "0", SvLEN(sv));
2939 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2942 #ifdef FIXNEGATIVEZERO
2943 if (*s == '-' && s[1] == '0' && !s[2]) {
2955 if (isGV_with_GP(sv))
2956 return glob_2pv((GV *)sv, lp);
2960 if (flags & SV_UNDEF_RETURNS_NULL)
2962 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2964 if (SvTYPE(sv) < SVt_PV)
2965 /* Typically the caller expects that sv_any is not NULL now. */
2966 sv_upgrade(sv, SVt_PV);
2970 const STRLEN len = s - SvPVX_const(sv);
2976 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2977 PTR2UV(sv),SvPVX_const(sv)));
2978 if (flags & SV_CONST_RETURN)
2979 return (char *)SvPVX_const(sv);
2980 if (flags & SV_MUTABLE_RETURN)
2981 return SvPVX_mutable(sv);
2986 =for apidoc sv_copypv
2988 Copies a stringified representation of the source SV into the
2989 destination SV. Automatically performs any necessary mg_get and
2990 coercion of numeric values into strings. Guaranteed to preserve
2991 UTF8 flag even from overloaded objects. Similar in nature to
2992 sv_2pv[_flags] but operates directly on an SV instead of just the
2993 string. Mostly uses sv_2pv_flags to do its work, except when that
2994 would lose the UTF-8'ness of the PV.
3000 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3003 const char * const s = SvPV_const(ssv,len);
3005 PERL_ARGS_ASSERT_SV_COPYPV;
3007 sv_setpvn(dsv,s,len);
3015 =for apidoc sv_2pvbyte
3017 Return a pointer to the byte-encoded representation of the SV, and set *lp
3018 to its length. May cause the SV to be downgraded from UTF-8 as a
3021 Usually accessed via the C<SvPVbyte> macro.
3027 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3029 PERL_ARGS_ASSERT_SV_2PVBYTE;
3031 sv_utf8_downgrade(sv,0);
3032 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3036 =for apidoc sv_2pvutf8
3038 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3039 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3041 Usually accessed via the C<SvPVutf8> macro.
3047 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3049 PERL_ARGS_ASSERT_SV_2PVUTF8;
3051 sv_utf8_upgrade(sv);
3052 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3057 =for apidoc sv_2bool
3059 This function is only called on magical items, and is only used by
3060 sv_true() or its macro equivalent.
3066 Perl_sv_2bool(pTHX_ register SV *const sv)
3070 PERL_ARGS_ASSERT_SV_2BOOL;
3078 SV * const tmpsv = AMG_CALLun(sv,bool_);
3079 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3080 return (bool)SvTRUE(tmpsv);
3082 return SvRV(sv) != 0;
3085 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3087 (*sv->sv_u.svu_pv > '0' ||
3088 Xpvtmp->xpv_cur > 1 ||
3089 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3096 return SvIVX(sv) != 0;
3099 return SvNVX(sv) != 0.0;
3101 if (isGV_with_GP(sv))
3111 =for apidoc sv_utf8_upgrade
3113 Converts the PV of an SV to its UTF-8-encoded form.
3114 Forces the SV to string form if it is not already.
3115 Always sets the SvUTF8 flag to avoid future validity checks even
3116 if all the bytes have hibit clear.
3118 This is not as a general purpose byte encoding to Unicode interface:
3119 use the Encode extension for that.
3121 =for apidoc sv_utf8_upgrade_flags
3123 Converts the PV of an SV to its UTF-8-encoded form.
3124 Forces the SV to string form if it is not already.
3125 Always sets the SvUTF8 flag to avoid future validity checks even
3126 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3127 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3128 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3130 This is not as a general purpose byte encoding to Unicode interface:
3131 use the Encode extension for that.
3137 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *const sv, const I32 flags)
3141 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS;
3143 if (sv == &PL_sv_undef)
3147 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3148 (void) sv_2pv_flags(sv,&len, flags);
3152 (void) SvPV_force(sv,len);
3161 sv_force_normal_flags(sv, 0);
3164 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3165 sv_recode_to_utf8(sv, PL_encoding);
3166 else { /* Assume Latin-1/EBCDIC */
3167 /* This function could be much more efficient if we
3168 * had a FLAG in SVs to signal if there are any hibit
3169 * chars in the PV. Given that there isn't such a flag
3170 * make the loop as fast as possible. */
3171 const U8 * const s = (U8 *) SvPVX_const(sv);
3172 const U8 * const e = (U8 *) SvEND(sv);
3177 /* Check for hi bit */
3178 if (!NATIVE_IS_INVARIANT(ch)) {
3179 STRLEN len = SvCUR(sv);
3180 /* *Currently* bytes_to_utf8() adds a '\0' after every string
3181 it converts. This isn't documented. It's not clear if it's
3182 a bad thing to be doing, and should be changed to do exactly
3183 what the documentation says. If so, this code will have to
3185 As is, we mustn't rely on our incoming SV being well formed
3186 and having a trailing '\0', as certain code in pp_formline
3187 can send us partially built SVs. */
3188 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3190 SvPV_free(sv); /* No longer using what was there before. */
3191 SvPV_set(sv, (char*)recoded);
3193 SvLEN_set(sv, len + 1); /* No longer know the real size. */
3197 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3204 =for apidoc sv_utf8_downgrade
3206 Attempts to convert the PV of an SV from characters to bytes.
3207 If the PV contains a character beyond byte, this conversion will fail;
3208 in this case, either returns false or, if C<fail_ok> is not
3211 This is not as a general purpose Unicode to byte encoding interface:
3212 use the Encode extension for that.
3218 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3222 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3224 if (SvPOKp(sv) && SvUTF8(sv)) {
3230 sv_force_normal_flags(sv, 0);
3232 s = (U8 *) SvPV(sv, len);
3233 if (!utf8_to_bytes(s, &len)) {
3238 Perl_croak(aTHX_ "Wide character in %s",
3241 Perl_croak(aTHX_ "Wide character");
3252 =for apidoc sv_utf8_encode
3254 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3255 flag off so that it looks like octets again.
3261 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3263 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3266 sv_force_normal_flags(sv, 0);
3268 if (SvREADONLY(sv)) {
3269 Perl_croak(aTHX_ PL_no_modify);
3271 (void) sv_utf8_upgrade(sv);
3276 =for apidoc sv_utf8_decode
3278 If the PV of the SV is an octet sequence in UTF-8
3279 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3280 so that it looks like a character. If the PV contains only single-byte
3281 characters, the C<SvUTF8> flag stays being off.
3282 Scans PV for validity and returns false if the PV is invalid UTF-8.
3288 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3290 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3296 /* The octets may have got themselves encoded - get them back as
3299 if (!sv_utf8_downgrade(sv, TRUE))
3302 /* it is actually just a matter of turning the utf8 flag on, but
3303 * we want to make sure everything inside is valid utf8 first.
3305 c = (const U8 *) SvPVX_const(sv);
3306 if (!is_utf8_string(c, SvCUR(sv)+1))
3308 e = (const U8 *) SvEND(sv);
3311 if (!UTF8_IS_INVARIANT(ch)) {
3321 =for apidoc sv_setsv
3323 Copies the contents of the source SV C<ssv> into the destination SV
3324 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3325 function if the source SV needs to be reused. Does not handle 'set' magic.
3326 Loosely speaking, it performs a copy-by-value, obliterating any previous
3327 content of the destination.
3329 You probably want to use one of the assortment of wrappers, such as
3330 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3331 C<SvSetMagicSV_nosteal>.
3333 =for apidoc sv_setsv_flags
3335 Copies the contents of the source SV C<ssv> into the destination SV
3336 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3337 function if the source SV needs to be reused. Does not handle 'set' magic.
3338 Loosely speaking, it performs a copy-by-value, obliterating any previous
3339 content of the destination.
3340 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3341 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3342 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3343 and C<sv_setsv_nomg> are implemented in terms of this function.
3345 You probably want to use one of the assortment of wrappers, such as
3346 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3347 C<SvSetMagicSV_nosteal>.
3349 This is the primary function for copying scalars, and most other
3350 copy-ish functions and macros use this underneath.
3356 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3358 I32 mro_changes = 0; /* 1 = method, 2 = isa */
3360 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3362 if (dtype != SVt_PVGV) {
3363 const char * const name = GvNAME(sstr);
3364 const STRLEN len = GvNAMELEN(sstr);
3366 if (dtype >= SVt_PV) {
3372 SvUPGRADE(dstr, SVt_PVGV);
3373 (void)SvOK_off(dstr);
3374 /* FIXME - why are we doing this, then turning it off and on again
3376 isGV_with_GP_on(dstr);
3378 GvSTASH(dstr) = GvSTASH(sstr);
3380 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
3381 gv_name_set((GV *)dstr, name, len, GV_ADD);
3382 SvFAKE_on(dstr); /* can coerce to non-glob */
3385 #ifdef GV_UNIQUE_CHECK
3386 if (GvUNIQUE((GV*)dstr)) {
3387 Perl_croak(aTHX_ PL_no_modify);
3391 if(GvGP((GV*)sstr)) {
3392 /* If source has method cache entry, clear it */
3394 SvREFCNT_dec(GvCV(sstr));
3398 /* If source has a real method, then a method is
3400 else if(GvCV((GV*)sstr)) {
3405 /* If dest already had a real method, that's a change as well */
3406 if(!mro_changes && GvGP((GV*)dstr) && GvCVu((GV*)dstr)) {
3410 if(strEQ(GvNAME((GV*)dstr),"ISA"))
3414 isGV_with_GP_off(dstr);
3415 (void)SvOK_off(dstr);
3416 isGV_with_GP_on(dstr);
3417 GvINTRO_off(dstr); /* one-shot flag */
3418 GvGP(dstr) = gp_ref(GvGP(sstr));
3419 if (SvTAINTED(sstr))
3421 if (GvIMPORTED(dstr) != GVf_IMPORTED
3422 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3424 GvIMPORTED_on(dstr);
3427 if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3428 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3433 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3435 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3437 const int intro = GvINTRO(dstr);
3440 const U32 stype = SvTYPE(sref);
3442 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3444 #ifdef GV_UNIQUE_CHECK
3445 if (GvUNIQUE((GV*)dstr)) {
3446 Perl_croak(aTHX_ PL_no_modify);
3451 GvINTRO_off(dstr); /* one-shot flag */
3452 GvLINE(dstr) = CopLINE(PL_curcop);
3453 GvEGV(dstr) = (GV*)dstr;
3458 location = (SV **) &GvCV(dstr);
3459 import_flag = GVf_IMPORTED_CV;
3462 location = (SV **) &GvHV(dstr);
3463 import_flag = GVf_IMPORTED_HV;
3466 location = (SV **) &GvAV(dstr);
3467 import_flag = GVf_IMPORTED_AV;
3470 location = (SV **) &GvIOp(dstr);
3473 location = (SV **) &GvFORM(dstr);
3475 location = &GvSV(dstr);
3476 import_flag = GVf_IMPORTED_SV;
3479 if (stype == SVt_PVCV) {
3480 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (CV*)sref || GvCVGEN(dstr))) {*/
3481 if (GvCVGEN(dstr)) {
3482 SvREFCNT_dec(GvCV(dstr));
3484 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3487 SAVEGENERICSV(*location);
3491 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3492 CV* const cv = (CV*)*location;
3494 if (!GvCVGEN((GV*)dstr) &&
3495 (CvROOT(cv) || CvXSUB(cv)))
3497 /* Redefining a sub - warning is mandatory if
3498 it was a const and its value changed. */
3499 if (CvCONST(cv) && CvCONST((CV*)sref)
3500 && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
3502 /* They are 2 constant subroutines generated from
3503 the same constant. This probably means that
3504 they are really the "same" proxy subroutine
3505 instantiated in 2 places. Most likely this is
3506 when a constant is exported twice. Don't warn.
3509 else if (ckWARN(WARN_REDEFINE)
3511 && (!CvCONST((CV*)sref)
3512 || sv_cmp(cv_const_sv(cv),
3513 cv_const_sv((CV*)sref))))) {
3514 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3517 ? "Constant subroutine %s::%s redefined"
3518 : "Subroutine %s::%s redefined"),
3519 HvNAME_get(GvSTASH((GV*)dstr)),
3520 GvENAME((GV*)dstr));
3524 cv_ckproto_len(cv, (GV*)dstr,
3525 SvPOK(sref) ? SvPVX_const(sref) : NULL,
3526 SvPOK(sref) ? SvCUR(sref) : 0);
3528 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3529 GvASSUMECV_on(dstr);
3530 if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3533 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3534 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3535 GvFLAGS(dstr) |= import_flag;
3540 if (SvTAINTED(sstr))
3546 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3549 register U32 sflags;
3551 register svtype stype;
3553 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3558 if (SvIS_FREED(dstr)) {
3559 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3560 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3562 SV_CHECK_THINKFIRST_COW_DROP(dstr);
3564 sstr = &PL_sv_undef;
3565 if (SvIS_FREED(sstr)) {
3566 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3567 (void*)sstr, (void*)dstr);
3569 stype = SvTYPE(sstr);
3570 dtype = SvTYPE(dstr);
3572 (void)SvAMAGIC_off(dstr);
3575 /* need to nuke the magic */
3579 /* There's a lot of redundancy below but we're going for speed here */
3584 if (dtype != SVt_PVGV) {
3585 (void)SvOK_off(dstr);
3593 sv_upgrade(dstr, SVt_IV);
3597 sv_upgrade(dstr, SVt_PVIV);
3600 goto end_of_first_switch;
3602 (void)SvIOK_only(dstr);
3603 SvIV_set(dstr, SvIVX(sstr));
3606 /* SvTAINTED can only be true if the SV has taint magic, which in
3607 turn means that the SV type is PVMG (or greater). This is the
3608 case statement for SVt_IV, so this cannot be true (whatever gcov
3610 assert(!SvTAINTED(sstr));
3615 if (dtype < SVt_PV && dtype != SVt_IV)
3616 sv_upgrade(dstr, SVt_IV);
3624 sv_upgrade(dstr, SVt_NV);
3628 sv_upgrade(dstr, SVt_PVNV);
3631 goto end_of_first_switch;
3633 SvNV_set(dstr, SvNVX(sstr));
3634 (void)SvNOK_only(dstr);
3635 /* SvTAINTED can only be true if the SV has taint magic, which in
3636 turn means that the SV type is PVMG (or greater). This is the
3637 case statement for SVt_NV, so this cannot be true (whatever gcov
3639 assert(!SvTAINTED(sstr));
3645 #ifdef PERL_OLD_COPY_ON_WRITE
3646 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3647 if (dtype < SVt_PVIV)
3648 sv_upgrade(dstr, SVt_PVIV);
3656 sv_upgrade(dstr, SVt_PV);
3659 if (dtype < SVt_PVIV)
3660 sv_upgrade(dstr, SVt_PVIV);
3663 if (dtype < SVt_PVNV)
3664 sv_upgrade(dstr, SVt_PVNV);
3668 const char * const type = sv_reftype(sstr,0);
3670 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3672 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3676 /* case SVt_BIND: */
3679 if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
3680 glob_assign_glob(dstr, sstr, dtype);
3683 /* SvVALID means that this PVGV is playing at being an FBM. */
3687 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3689 if (SvTYPE(sstr) != stype) {
3690 stype = SvTYPE(sstr);
3691 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
3692 glob_assign_glob(dstr, sstr, dtype);
3697 if (stype == SVt_PVLV)
3698 SvUPGRADE(dstr, SVt_PVNV);
3700 SvUPGRADE(dstr, (svtype)stype);
3702 end_of_first_switch:
3704 /* dstr may have been upgraded. */
3705 dtype = SvTYPE(dstr);
3706 sflags = SvFLAGS(sstr);
3708 if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
3709 /* Assigning to a subroutine sets the prototype. */
3712 const char *const ptr = SvPV_const(sstr, len);
3714 SvGROW(dstr, len + 1);
3715 Copy(ptr, SvPVX(dstr), len + 1, char);
3716 SvCUR_set(dstr, len);
3718 SvFLAGS(dstr) |= sflags & SVf_UTF8;
3722 } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3723 const char * const type = sv_reftype(dstr,0);
3725 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_NAME(PL_op));
3727 Perl_croak(aTHX_ "Cannot copy to %s", type);
3728 } else if (sflags & SVf_ROK) {
3729 if (isGV_with_GP(dstr) && dtype == SVt_PVGV
3730 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
3733 if (GvIMPORTED(dstr) != GVf_IMPORTED
3734 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3736 GvIMPORTED_on(dstr);
3741 glob_assign_glob(dstr, sstr, dtype);
3745 if (dtype >= SVt_PV) {
3746 if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
3747 glob_assign_ref(dstr, sstr);
3750 if (SvPVX_const(dstr)) {
3756 (void)SvOK_off(dstr);
3757 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3758 SvFLAGS(dstr) |= sflags & SVf_ROK;
3759 assert(!(sflags & SVp_NOK));
3760 assert(!(sflags & SVp_IOK));
3761 assert(!(sflags & SVf_NOK));
3762 assert(!(sflags & SVf_IOK));
3764 else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
3765 if (!(sflags & SVf_OK)) {
3766 if (ckWARN(WARN_MISC))
3767 Perl_warner(aTHX_ packWARN(WARN_MISC),
3768 "Undefined value assigned to typeglob");
3771 GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3772 if (dstr != (SV*)gv) {
3775 GvGP(dstr) = gp_ref(GvGP(gv));
3779 else if (sflags & SVp_POK) {
3783 * Check to see if we can just swipe the string. If so, it's a
3784 * possible small lose on short strings, but a big win on long ones.
3785 * It might even be a win on short strings if SvPVX_const(dstr)
3786 * has to be allocated and SvPVX_const(sstr) has to be freed.
3787 * Likewise if we can set up COW rather than doing an actual copy, we
3788 * drop to the else clause, as the swipe code and the COW setup code
3789 * have much in common.
3792 /* Whichever path we take through the next code, we want this true,
3793 and doing it now facilitates the COW check. */
3794 (void)SvPOK_only(dstr);
3797 /* If we're already COW then this clause is not true, and if COW
3798 is allowed then we drop down to the else and make dest COW
3799 with us. If caller hasn't said that we're allowed to COW
3800 shared hash keys then we don't do the COW setup, even if the
3801 source scalar is a shared hash key scalar. */
3802 (((flags & SV_COW_SHARED_HASH_KEYS)
3803 ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
3804 : 1 /* If making a COW copy is forbidden then the behaviour we
3805 desire is as if the source SV isn't actually already
3806 COW, even if it is. So we act as if the source flags
3807 are not COW, rather than actually testing them. */
3809 #ifndef PERL_OLD_COPY_ON_WRITE
3810 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
3811 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
3812 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
3813 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
3814 but in turn, it's somewhat dead code, never expected to go
3815 live, but more kept as a placeholder on how to do it better
3816 in a newer implementation. */
3817 /* If we are COW and dstr is a suitable target then we drop down
3818 into the else and make dest a COW of us. */
3819 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3824 (sflags & SVs_TEMP) && /* slated for free anyway? */
3825 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3826 (!(flags & SV_NOSTEAL)) &&
3827 /* and we're allowed to steal temps */
3828 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3829 SvLEN(sstr) && /* and really is a string */
3830 /* and won't be needed again, potentially */
3831 !(PL_op && PL_op->op_type == OP_AASSIGN))
3832 #ifdef PERL_OLD_COPY_ON_WRITE
3833 && ((flags & SV_COW_SHARED_HASH_KEYS)
3834 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3835 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
3836 && SvTYPE(sstr) >= SVt_PVIV))
3840 /* Failed the swipe test, and it's not a shared hash key either.
3841 Have to copy the string. */
3842 STRLEN len = SvCUR(sstr);
3843 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3844 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
3845 SvCUR_set(dstr, len);
3846 *SvEND(dstr) = '\0';
3848 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
3850 /* Either it's a shared hash key, or it's suitable for
3851 copy-on-write or we can swipe the string. */
3853 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
3857 #ifdef PERL_OLD_COPY_ON_WRITE
3859 /* I believe I should acquire a global SV mutex if
3860 it's a COW sv (not a shared hash key) to stop
3861 it going un copy-on-write.
3862 If the source SV has gone un copy on write between up there
3863 and down here, then (assert() that) it is of the correct
3864 form to make it copy on write again */
3865 if ((sflags & (SVf_FAKE | SVf_READONLY))
3866 != (SVf_FAKE | SVf_READONLY)) {
3867 SvREADONLY_on(sstr);
3869 /* Make the source SV into a loop of 1.
3870 (about to become 2) */
3871 SV_COW_NEXT_SV_SET(sstr, sstr);
3875 /* Initial code is common. */
3876 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
3881 /* making another shared SV. */
3882 STRLEN cur = SvCUR(sstr);
3883 STRLEN len = SvLEN(sstr);
3884 #ifdef PERL_OLD_COPY_ON_WRITE
3886 assert (SvTYPE(dstr) >= SVt_PVIV);
3887 /* SvIsCOW_normal */
3888 /* splice us in between source and next-after-source. */
3889 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3890 SV_COW_NEXT_SV_SET(sstr, dstr);
3891 SvPV_set(dstr, SvPVX_mutable(sstr));
3895 /* SvIsCOW_shared_hash */
3896 DEBUG_C(PerlIO_printf(Perl_debug_log,
3897 "Copy on write: Sharing hash\n"));
3899 assert (SvTYPE(dstr) >= SVt_PV);
3901 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
3903 SvLEN_set(dstr, len);
3904 SvCUR_set(dstr, cur);
3905 SvREADONLY_on(dstr);
3907 /* Relesase a global SV mutex. */
3910 { /* Passes the swipe test. */
3911 SvPV_set(dstr, SvPVX_mutable(sstr));
3912 SvLEN_set(dstr, SvLEN(sstr));
3913 SvCUR_set(dstr, SvCUR(sstr));
3916 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3917 SvPV_set(sstr, NULL);
3923 if (sflags & SVp_NOK) {
3924 SvNV_set(dstr, SvNVX(sstr));
3926 if (sflags & SVp_IOK) {
3927 SvIV_set(dstr, SvIVX(sstr));
3928 /* Must do this otherwise some other overloaded use of 0x80000000
3929 gets confused. I guess SVpbm_VALID */
3930 if (sflags & SVf_IVisUV)
3933 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
3935 const MAGIC * const smg = SvVSTRING_mg(sstr);
3937 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3938 smg->mg_ptr, smg->mg_len);
3939 SvRMAGICAL_on(dstr);
3943 else if (sflags & (SVp_IOK|SVp_NOK)) {
3944 (void)SvOK_off(dstr);
3945 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
3946 if (sflags & SVp_IOK) {
3947 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3948 SvIV_set(dstr, SvIVX(sstr));
3950 if (sflags & SVp_NOK) {
3951 SvNV_set(dstr, SvNVX(sstr));
3955 if (isGV_with_GP(sstr)) {
3956 /* This stringification rule for globs is spread in 3 places.
3957 This feels bad. FIXME. */
3958 const U32 wasfake = sflags & SVf_FAKE;
3960 /* FAKE globs can get coerced, so need to turn this off
3961 temporarily if it is on. */
3963 gv_efullname3(dstr, (GV *)sstr, "*");
3964 SvFLAGS(sstr) |= wasfake;
3967 (void)SvOK_off(dstr);
3969 if (SvTAINTED(sstr))
3974 =for apidoc sv_setsv_mg
3976 Like C<sv_setsv>, but also handles 'set' magic.
3982 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
3984 PERL_ARGS_ASSERT_SV_SETSV_MG;
3986 sv_setsv(dstr,sstr);
3990 #ifdef PERL_OLD_COPY_ON_WRITE
3992 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3994 STRLEN cur = SvCUR(sstr);
3995 STRLEN len = SvLEN(sstr);
3996 register char *new_pv;
3998 PERL_ARGS_ASSERT_SV_SETSV_COW;
4001 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4002 (void*)sstr, (void*)dstr);
4009 if (SvTHINKFIRST(dstr))
4010 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4011 else if (SvPVX_const(dstr))
4012 Safefree(SvPVX_const(dstr));
4016 SvUPGRADE(dstr, SVt_PVIV);
4018 assert (SvPOK(sstr));
4019 assert (SvPOKp(sstr));
4020 assert (!SvIOK(sstr));
4021 assert (!SvIOKp(sstr));
4022 assert (!SvNOK(sstr));
4023 assert (!SvNOKp(sstr));
4025 if (SvIsCOW(sstr)) {
4027 if (SvLEN(sstr) == 0) {
4028 /* source is a COW shared hash key. */
4029 DEBUG_C(PerlIO_printf(Perl_debug_log,
4030 "Fast copy on write: Sharing hash\n"));
4031 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4034 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4036 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4037 SvUPGRADE(sstr, SVt_PVIV);
4038 SvREADONLY_on(sstr);
4040 DEBUG_C(PerlIO_printf(Perl_debug_log,
4041 "Fast copy on write: Converting sstr to COW\n"));
4042 SV_COW_NEXT_SV_SET(dstr, sstr);
4044 SV_COW_NEXT_SV_SET(sstr, dstr);
4045 new_pv = SvPVX_mutable(sstr);
4048 SvPV_set(dstr, new_pv);
4049 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4052 SvLEN_set(dstr, len);
4053 SvCUR_set(dstr, cur);
4062 =for apidoc sv_setpvn
4064 Copies a string into an SV. The C<len> parameter indicates the number of
4065 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4066 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4072 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4075 register char *dptr;
4077 PERL_ARGS_ASSERT_SV_SETPVN;
4079 SV_CHECK_THINKFIRST_COW_DROP(sv);
4085 /* len is STRLEN which is unsigned, need to copy to signed */
4088 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4090 SvUPGRADE(sv, SVt_PV);
4092 dptr = SvGROW(sv, len + 1);
4093 Move(ptr,dptr,len,char);
4096 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4101 =for apidoc sv_setpvn_mg
4103 Like C<sv_setpvn>, but also handles 'set' magic.
4109 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4111 PERL_ARGS_ASSERT_SV_SETPVN_MG;
4113 sv_setpvn(sv,ptr,len);
4118 =for apidoc sv_setpv
4120 Copies a string into an SV. The string must be null-terminated. Does not
4121 handle 'set' magic. See C<sv_setpv_mg>.
4127 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4130 register STRLEN len;
4132 PERL_ARGS_ASSERT_SV_SETPV;
4134 SV_CHECK_THINKFIRST_COW_DROP(sv);
4140 SvUPGRADE(sv, SVt_PV);
4142 SvGROW(sv, len + 1);
4143 Move(ptr,SvPVX(sv),len+1,char);
4145 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4150 =for apidoc sv_setpv_mg
4152 Like C<sv_setpv>, but also handles 'set' magic.
4158 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4160 PERL_ARGS_ASSERT_SV_SETPV_MG;
4167 =for apidoc sv_usepvn_flags
4169 Tells an SV to use C<ptr> to find its string value. Normally the
4170 string is stored inside the SV but sv_usepvn allows the SV to use an
4171 outside string. The C<ptr> should point to memory that was allocated
4172 by C<malloc>. The string length, C<len>, must be supplied. By default
4173 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4174 so that pointer should not be freed or used by the programmer after
4175 giving it to sv_usepvn, and neither should any pointers from "behind"
4176 that pointer (e.g. ptr + 1) be used.
4178 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4179 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4180 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4181 C<len>, and already meets the requirements for storing in C<SvPVX>)
4187 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4192 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4194 SV_CHECK_THINKFIRST_COW_DROP(sv);
4195 SvUPGRADE(sv, SVt_PV);
4198 if (flags & SV_SMAGIC)
4202 if (SvPVX_const(sv))
4206 if (flags & SV_HAS_TRAILING_NUL)
4207 assert(ptr[len] == '\0');
4210 allocate = (flags & SV_HAS_TRAILING_NUL)
4212 #ifdef Perl_safesysmalloc_size
4215 PERL_STRLEN_ROUNDUP(len + 1);
4217 if (flags & SV_HAS_TRAILING_NUL) {
4218 /* It's long enough - do nothing.
4219 Specfically Perl_newCONSTSUB is relying on this. */
4222 /* Force a move to shake out bugs in callers. */
4223 char *new_ptr = (char*)safemalloc(allocate);
4224 Copy(ptr, new_ptr, len, char);
4225 PoisonFree(ptr,len,char);
4229 ptr = (char*) saferealloc (ptr, allocate);
4232 #ifdef Perl_safesysmalloc_size
4233 SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4235 SvLEN_set(sv, allocate);
4239 if (!(flags & SV_HAS_TRAILING_NUL)) {
4242 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4244 if (flags & SV_SMAGIC)
4248 #ifdef PERL_OLD_COPY_ON_WRITE
4249 /* Need to do this *after* making the SV normal, as we need the buffer
4250 pointer to remain valid until after we've copied it. If we let go too early,
4251 another thread could invalidate it by unsharing last of the same hash key
4252 (which it can do by means other than releasing copy-on-write Svs)
4253 or by changing the other copy-on-write SVs in the loop. */
4255 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4257 PERL_ARGS_ASSERT_SV_RELEASE_COW;
4259 { /* this SV was SvIsCOW_normal(sv) */
4260 /* we need to find the SV pointing to us. */
4261 SV *current = SV_COW_NEXT_SV(after);
4263 if (current == sv) {
4264 /* The SV we point to points back to us (there were only two of us
4266 Hence other SV is no longer copy on write either. */
4268 SvREADONLY_off(after);
4270 /* We need to follow the pointers around the loop. */
4272 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4275 /* don't loop forever if the structure is bust, and we have
4276 a pointer into a closed loop. */
4277 assert (current != after);
4278 assert (SvPVX_const(current) == pvx);
4280 /* Make the SV before us point to the SV after us. */
4281 SV_COW_NEXT_SV_SET(current, after);
4287 =for apidoc sv_force_normal_flags
4289 Undo various types of fakery on an SV: if the PV is a shared string, make
4290 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4291 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4292 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4293 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4294 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4295 set to some other value.) In addition, the C<flags> parameter gets passed to
4296 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4297 with flags set to 0.
4303 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4307 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4309 #ifdef PERL_OLD_COPY_ON_WRITE
4310 if (SvREADONLY(sv)) {
4311 /* At this point I believe I should acquire a global SV mutex. */
4313 const char * const pvx = SvPVX_const(sv);
4314 const STRLEN len = SvLEN(sv);
4315 const STRLEN cur = SvCUR(sv);
4316 /* next COW sv in the loop. If len is 0 then this is a shared-hash
4317 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4318 we'll fail an assertion. */
4319 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4322 PerlIO_printf(Perl_debug_log,
4323 "Copy on write: Force normal %ld\n",
4329 /* This SV doesn't own the buffer, so need to Newx() a new one: */
4332 if (flags & SV_COW_DROP_PV) {
4333 /* OK, so we don't need to copy our buffer. */
4336 SvGROW(sv, cur + 1);
4337 Move(pvx,SvPVX(sv),cur,char);
4342 sv_release_COW(sv, pvx, next);
4344 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4350 else if (IN_PERL_RUNTIME)
4351 Perl_croak(aTHX_ PL_no_modify);
4352 /* At this point I believe that I can drop the global SV mutex. */
4355 if (SvREADONLY(sv)) {
4357 const char * const pvx = SvPVX_const(sv);
4358 const STRLEN len = SvCUR(sv);
4363 SvGROW(sv, len + 1);
4364 Move(pvx,SvPVX(sv),len,char);
4366 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4368 else if (IN_PERL_RUNTIME)
4369 Perl_croak(aTHX_ PL_no_modify);
4373 sv_unref_flags(sv, flags);
4374 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4381 Efficient removal of characters from the beginning of the string buffer.
4382 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4383 the string buffer. The C<ptr> becomes the first character of the adjusted
4384 string. Uses the "OOK hack".
4385 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4386 refer to the same chunk of data.
4392 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4398 const U8 *real_start;
4402 PERL_ARGS_ASSERT_SV_CHOP;
4404 if (!ptr || !SvPOKp(sv))
4406 delta = ptr - SvPVX_const(sv);
4408 /* Nothing to do. */
4411 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4412 nothing uses the value of ptr any more. */
4413 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4414 if (ptr <= SvPVX_const(sv))
4415 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4416 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4417 SV_CHECK_THINKFIRST(sv);
4418 if (delta > max_delta)
4419 Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4420 SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4421 SvPVX_const(sv) + max_delta);
4424 if (!SvLEN(sv)) { /* make copy of shared string */
4425 const char *pvx = SvPVX_const(sv);
4426 const STRLEN len = SvCUR(sv);
4427 SvGROW(sv, len + 1);
4428 Move(pvx,SvPVX(sv),len,char);
4431 SvFLAGS(sv) |= SVf_OOK;
4434 SvOOK_offset(sv, old_delta);
4436 SvLEN_set(sv, SvLEN(sv) - delta);
4437 SvCUR_set(sv, SvCUR(sv) - delta);
4438 SvPV_set(sv, SvPVX(sv) + delta);
4440 p = (U8 *)SvPVX_const(sv);
4445 real_start = p - delta;
4449 if (delta < 0x100) {
4453 p -= sizeof(STRLEN);
4454 Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4458 /* Fill the preceding buffer with sentinals to verify that no-one is
4460 while (p > real_start) {
4468 =for apidoc sv_catpvn
4470 Concatenates the string onto the end of the string which is in the SV. The
4471 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4472 status set, then the bytes appended should be valid UTF-8.
4473 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4475 =for apidoc sv_catpvn_flags
4477 Concatenates the string onto the end of the string which is in the SV. The
4478 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4479 status set, then the bytes appended should be valid UTF-8.
4480 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4481 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4482 in terms of this function.
4488 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4492 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4494 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4496 SvGROW(dsv, dlen + slen + 1);
4498 sstr = SvPVX_const(dsv);
4499 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4500 SvCUR_set(dsv, SvCUR(dsv) + slen);
4502 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4504 if (flags & SV_SMAGIC)
4509 =for apidoc sv_catsv
4511 Concatenates the string from SV C<ssv> onto the end of the string in
4512 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4513 not 'set' magic. See C<sv_catsv_mg>.
4515 =for apidoc sv_catsv_flags
4517 Concatenates the string from SV C<ssv> onto the end of the string in
4518 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4519 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4520 and C<sv_catsv_nomg> are implemented in terms of this function.
4525 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
4529 PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4533 const char *spv = SvPV_const(ssv, slen);
4535 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4536 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4537 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4538 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4539 dsv->sv_flags doesn't have that bit set.
4540 Andy Dougherty 12 Oct 2001
4542 const I32 sutf8 = DO_UTF8(ssv);
4545 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4547 dutf8 = DO_UTF8(dsv);
4549 if (dutf8 != sutf8) {
4551 /* Not modifying source SV, so taking a temporary copy. */
4552 SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
4554 sv_utf8_upgrade(csv);
4555 spv = SvPV_const(csv, slen);
4558 sv_utf8_upgrade_nomg(dsv);
4560 sv_catpvn_nomg(dsv, spv, slen);
4563 if (flags & SV_SMAGIC)
4568 =for apidoc sv_catpv
4570 Concatenates the string onto the end of the string which is in the SV.
4571 If the SV has the UTF-8 status set, then the bytes appended should be
4572 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4577 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
4580 register STRLEN len;
4584 PERL_ARGS_ASSERT_SV_CATPV;
4588 junk = SvPV_force(sv, tlen);
4590 SvGROW(sv, tlen + len + 1);
4592 ptr = SvPVX_const(sv);
4593 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4594 SvCUR_set(sv, SvCUR(sv) + len);
4595 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4600 =for apidoc sv_catpv_mg
4602 Like C<sv_catpv>, but also handles 'set' magic.
4608 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4610 PERL_ARGS_ASSERT_SV_CATPV_MG;
4619 Creates a new SV. A non-zero C<len> parameter indicates the number of
4620 bytes of preallocated string space the SV should have. An extra byte for a
4621 trailing NUL is also reserved. (SvPOK is not set for the SV even if string
4622 space is allocated.) The reference count for the new SV is set to 1.
4624 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4625 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4626 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4627 L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
4628 modules supporting older perls.
4634 Perl_newSV(pTHX_ const STRLEN len)
4641 sv_upgrade(sv, SVt_PV);
4642 SvGROW(sv, len + 1);
4647 =for apidoc sv_magicext
4649 Adds magic to an SV, upgrading it if necessary. Applies the
4650 supplied vtable and returns a pointer to the magic added.
4652 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4653 In particular, you can add magic to SvREADONLY SVs, and add more than
4654 one instance of the same 'how'.
4656 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4657 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4658 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4659 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4661 (This is now used as a subroutine by C<sv_magic>.)
4666 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
4667 const MGVTBL *const vtable, const char *const name, const I32 namlen)
4672 PERL_ARGS_ASSERT_SV_MAGICEXT;
4674 SvUPGRADE(sv, SVt_PVMG);
4675 Newxz(mg, 1, MAGIC);
4676 mg->mg_moremagic = SvMAGIC(sv);
4677 SvMAGIC_set(sv, mg);
4679 /* Sometimes a magic contains a reference loop, where the sv and
4680 object refer to each other. To prevent a reference loop that
4681 would prevent such objects being freed, we look for such loops
4682 and if we find one we avoid incrementing the object refcount.
4684 Note we cannot do this to avoid self-tie loops as intervening RV must
4685 have its REFCNT incremented to keep it in existence.
4688 if (!obj || obj == sv ||
4689 how == PERL_MAGIC_arylen ||
4690 how == PERL_MAGIC_symtab ||
4691 (SvTYPE(obj) == SVt_PVGV &&
4692 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4693 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4694 GvFORM(obj) == (CV*)sv)))
4699 mg->mg_obj = SvREFCNT_inc_simple(obj);
4700 mg->mg_flags |= MGf_REFCOUNTED;
4703 /* Normal self-ties simply pass a null object, and instead of
4704 using mg_obj directly, use the SvTIED_obj macro to produce a
4705 new RV as needed. For glob "self-ties", we are tieing the PVIO
4706 with an RV obj pointing to the glob containing the PVIO. In
4707 this case, to avoid a reference loop, we need to weaken the
4711 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4712 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4718 mg->mg_len = namlen;
4721 mg->mg_ptr = savepvn(name, namlen);
4722 else if (namlen == HEf_SVKEY)
4723 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV*)name);
4725 mg->mg_ptr = (char *) name;
4727 mg->mg_virtual = (MGVTBL *) vtable;
4731 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4736 =for apidoc sv_magic
4738 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4739 then adds a new magic item of type C<how> to the head of the magic list.
4741 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4742 handling of the C<name> and C<namlen> arguments.
4744 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4745 to add more than one instance of the same 'how'.
4751 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how,
4752 const char *const name, const I32 namlen)
4755 const MGVTBL *vtable;
4758 PERL_ARGS_ASSERT_SV_MAGIC;
4760 #ifdef PERL_OLD_COPY_ON_WRITE
4762 sv_force_normal_flags(sv, 0);
4764 if (SvREADONLY(sv)) {
4766 /* its okay to attach magic to shared strings; the subsequent
4767 * upgrade to PVMG will unshare the string */
4768 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4771 && how != PERL_MAGIC_regex_global
4772 && how != PERL_MAGIC_bm
4773 && how != PERL_MAGIC_fm
4774 && how != PERL_MAGIC_sv
4775 && how != PERL_MAGIC_backref
4778 Perl_croak(aTHX_ PL_no_modify);
4781 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4782 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4783 /* sv_magic() refuses to add a magic of the same 'how' as an
4786 if (how == PERL_MAGIC_taint) {
4788 /* Any scalar which already had taint magic on which someone
4789 (erroneously?) did SvIOK_on() or similar will now be
4790 incorrectly sporting public "OK" flags. */
4791 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4799 vtable = &PL_vtbl_sv;
4801 case PERL_MAGIC_overload:
4802 vtable = &PL_vtbl_amagic;
4804 case PERL_MAGIC_overload_elem:
4805 vtable = &PL_vtbl_amagicelem;
4807 case PERL_MAGIC_overload_table:
4808 vtable = &PL_vtbl_ovrld;
4811 vtable = &PL_vtbl_bm;
4813 case PERL_MAGIC_regdata:
4814 vtable = &PL_vtbl_regdata;
4816 case PERL_MAGIC_regdatum:
4817 vtable = &PL_vtbl_regdatum;
4819 case PERL_MAGIC_env:
4820 vtable = &PL_vtbl_env;
4823 vtable = &PL_vtbl_fm;
4825 case PERL_MAGIC_envelem:
4826 vtable = &PL_vtbl_envelem;
4828 case PERL_MAGIC_regex_global:
4829 vtable = &PL_vtbl_mglob;
4831 case PERL_MAGIC_isa:
4832 vtable = &PL_vtbl_isa;
4834 case PERL_MAGIC_isaelem:
4835 vtable = &PL_vtbl_isaelem;
4837 case PERL_MAGIC_nkeys:
4838 vtable = &PL_vtbl_nkeys;
4840 case PERL_MAGIC_dbfile:
4843 case PERL_MAGIC_dbline:
4844 vtable = &PL_vtbl_dbline;
4846 #ifdef USE_LOCALE_COLLATE
4847 case PERL_MAGIC_collxfrm:
4848 vtable = &PL_vtbl_collxfrm;
4850 #endif /* USE_LOCALE_COLLATE */
4851 case PERL_MAGIC_tied:
4852 vtable = &PL_vtbl_pack;
4854 case PERL_MAGIC_tiedelem:
4855 case PERL_MAGIC_tiedscalar:
4856 vtable = &PL_vtbl_packelem;
4859 vtable = &PL_vtbl_regexp;
4861 case PERL_MAGIC_hints:
4862 /* As this vtable is all NULL, we can reuse it. */
4863 case PERL_MAGIC_sig:
4864 vtable = &PL_vtbl_sig;
4866 case PERL_MAGIC_sigelem:
4867 vtable = &PL_vtbl_sigelem;
4869 case PERL_MAGIC_taint:
4870 vtable = &PL_vtbl_taint;
4872 case PERL_MAGIC_uvar:
4873 vtable = &PL_vtbl_uvar;
4875 case PERL_MAGIC_vec:
4876 vtable = &PL_vtbl_vec;
4878 case PERL_MAGIC_arylen_p:
4879 case PERL_MAGIC_rhash:
4880 case PERL_MAGIC_symtab:
4881 case PERL_MAGIC_vstring:
4884 case PERL_MAGIC_utf8:
4885 vtable = &PL_vtbl_utf8;
4887 case PERL_MAGIC_substr:
4888 vtable = &PL_vtbl_substr;
4890 case PERL_MAGIC_defelem:
4891 vtable = &PL_vtbl_defelem;
4893 case PERL_MAGIC_arylen:
4894 vtable = &PL_vtbl_arylen;
4896 case PERL_MAGIC_pos:
4897 vtable = &PL_vtbl_pos;
4899 case PERL_MAGIC_backref:
4900 vtable = &PL_vtbl_backref;
4902 case PERL_MAGIC_hintselem:
4903 vtable = &PL_vtbl_hintselem;
4905 case PERL_MAGIC_ext:
4906 /* Reserved for use by extensions not perl internals. */
4907 /* Useful for attaching extension internal data to perl vars. */
4908 /* Note that multiple extensions may clash if magical scalars */
4909 /* etc holding private data from one are passed to another. */
4913 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4916 /* Rest of work is done else where */
4917 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4920 case PERL_MAGIC_taint:
4923 case PERL_MAGIC_ext:
4924 case PERL_MAGIC_dbfile:
4931 =for apidoc sv_unmagic
4933 Removes all magic of type C<type> from an SV.
4939 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
4944 PERL_ARGS_ASSERT_SV_UNMAGIC;
4946 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4948 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
4949 for (mg = *mgp; mg; mg = *mgp) {
4950 if (mg->mg_type == type) {
4951 const MGVTBL* const vtbl = mg->mg_virtual;
4952 *mgp = mg->mg_moremagic;
4953 if (vtbl && vtbl->svt_free)
4954 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4955 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4957 Safefree(mg->mg_ptr);
4958 else if (mg->mg_len == HEf_SVKEY)
4959 SvREFCNT_dec((SV*)mg->mg_ptr);
4960 else if (mg->mg_type == PERL_MAGIC_utf8)
4961 Safefree(mg->mg_ptr);
4963 if (mg->mg_flags & MGf_REFCOUNTED)
4964 SvREFCNT_dec(mg->mg_obj);
4968 mgp = &mg->mg_moremagic;
4972 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4973 SvMAGIC_set(sv, NULL);
4980 =for apidoc sv_rvweaken
4982 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4983 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4984 push a back-reference to this RV onto the array of backreferences
4985 associated with that magic. If the RV is magical, set magic will be
4986 called after the RV is cleared.
4992 Perl_sv_rvweaken(pTHX_ SV *const sv)
4996 PERL_ARGS_ASSERT_SV_RVWEAKEN;
4998 if (!SvOK(sv)) /* let undefs pass */
5001 Perl_croak(aTHX_ "Can't weaken a nonreference");
5002 else if (SvWEAKREF(sv)) {
5003 if (ckWARN(WARN_MISC))
5004 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5008 Perl_sv_add_backref(aTHX_ tsv, sv);
5014 /* Give tsv backref magic if it hasn't already got it, then push a
5015 * back-reference to sv onto the array associated with the backref magic.
5018 /* A discussion about the backreferences array and its refcount:
5020 * The AV holding the backreferences is pointed to either as the mg_obj of
5021 * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5022 * structure, from the xhv_backreferences field. (A HV without hv_aux will
5023 * have the standard magic instead.) The array is created with a refcount
5024 * of 2. This means that if during global destruction the array gets
5025 * picked on first to have its refcount decremented by the random zapper,
5026 * it won't actually be freed, meaning it's still theere for when its
5027 * parent gets freed.
5028 * When the parent SV is freed, in the case of magic, the magic is freed,
5029 * Perl_magic_killbackrefs is called which decrements one refcount, then
5030 * mg_obj is freed which kills the second count.
5031 * In the vase of a HV being freed, one ref is removed by
5032 * Perl_hv_kill_backrefs, the other by Perl_sv_kill_backrefs, which it
5037 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5042 PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5044 if (SvTYPE(tsv) == SVt_PVHV) {
5045 AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
5049 /* There is no AV in the offical place - try a fixup. */
5050 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
5053 /* Aha. They've got it stowed in magic. Bring it back. */
5054 av = (AV*)mg->mg_obj;
5055 /* Stop mg_free decreasing the refernce count. */
5057 /* Stop mg_free even calling the destructor, given that
5058 there's no AV to free up. */
5060 sv_unmagic(tsv, PERL_MAGIC_backref);
5064 SvREFCNT_inc_simple_void(av); /* see discussion above */
5069 const MAGIC *const mg
5070 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5072 av = (AV*)mg->mg_obj;
5076 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
5077 /* av now has a refcnt of 2; see discussion above */
5080 if (AvFILLp(av) >= AvMAX(av)) {
5081 av_extend(av, AvFILLp(av)+1);
5083 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5086 /* delete a back-reference to ourselves from the backref magic associated
5087 * with the SV we point to.
5091 S_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5098 PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5100 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
5101 av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
5102 /* We mustn't attempt to "fix up" the hash here by moving the
5103 backreference array back to the hv_aux structure, as that is stored
5104 in the main HvARRAY(), and hfreentries assumes that no-one
5105 reallocates HvARRAY() while it is running. */
5108 const MAGIC *const mg
5109 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5111 av = (AV *)mg->mg_obj;
5115 Perl_croak(aTHX_ "panic: del_backref");
5117 assert(!SvIS_FREED(av));
5120 /* We shouldn't be in here more than once, but for paranoia reasons lets
5122 for (i = AvFILLp(av); i >= 0; i--) {
5124 const SSize_t fill = AvFILLp(av);
5126 /* We weren't the last entry.
5127 An unordered list has this property that you can take the
5128 last element off the end to fill the hole, and it's still
5129 an unordered list :-)
5134 AvFILLp(av) = fill - 1;
5140 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5142 SV **svp = AvARRAY(av);
5144 PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5145 PERL_UNUSED_ARG(sv);
5147 assert(!svp || !SvIS_FREED(av));
5149 SV *const *const last = svp + AvFILLp(av);
5151 while (svp <= last) {
5153 SV *const referrer = *svp;
5154 if (SvWEAKREF(referrer)) {
5155 /* XXX Should we check that it hasn't changed? */
5156 SvRV_set(referrer, 0);
5158 SvWEAKREF_off(referrer);
5159 SvSETMAGIC(referrer);
5160 } else if (SvTYPE(referrer) == SVt_PVGV ||
5161 SvTYPE(referrer) == SVt_PVLV) {
5162 /* You lookin' at me? */
5163 assert(GvSTASH(referrer));
5164 assert(GvSTASH(referrer) == (HV*)sv);
5165 GvSTASH(referrer) = 0;
5168 "panic: magic_killbackrefs (flags=%"UVxf")",
5169 (UV)SvFLAGS(referrer));
5177 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5182 =for apidoc sv_insert
5184 Inserts a string at the specified offset/length within the SV. Similar to
5185 the Perl substr() function. Handles get magic.
5187 =for apidoc sv_insert_flags
5189 Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5195 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5200 register char *midend;
5201 register char *bigend;
5205 PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5208 Perl_croak(aTHX_ "Can't modify non-existent substring");
5209 SvPV_force_flags(bigstr, curlen, flags);
5210 (void)SvPOK_only_UTF8(bigstr);
5211 if (offset + len > curlen) {
5212 SvGROW(bigstr, offset+len+1);
5213 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5214 SvCUR_set(bigstr, offset+len);
5218 i = littlelen - len;
5219 if (i > 0) { /* string might grow */
5220 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5221 mid = big + offset + len;
5222 midend = bigend = big + SvCUR(bigstr);
5225 while (midend > mid) /* shove everything down */
5226 *--bigend = *--midend;
5227 Move(little,big+offset,littlelen,char);
5228 SvCUR_set(bigstr, SvCUR(bigstr) + i);
5233 Move(little,SvPVX(bigstr)+offset,len,char);
5238 big = SvPVX(bigstr);
5241 bigend = big + SvCUR(bigstr);
5243 if (midend > bigend)
5244 Perl_croak(aTHX_ "panic: sv_insert");
5246 if (mid - big > bigend - midend) { /* faster to shorten from end */
5248 Move(little, mid, littlelen,char);
5251 i = bigend - midend;
5253 Move(midend, mid, i,char);
5257 SvCUR_set(bigstr, mid - big);
5259 else if ((i = mid - big)) { /* faster from front */
5260 midend -= littlelen;
5262 Move(big, midend - i, i, char);
5263 sv_chop(bigstr,midend-i);
5265 Move(little, mid, littlelen,char);
5267 else if (littlelen) {
5268 midend -= littlelen;
5269 sv_chop(bigstr,midend);
5270 Move(little,midend,littlelen,char);
5273 sv_chop(bigstr,midend);
5279 =for apidoc sv_replace
5281 Make the first argument a copy of the second, then delete the original.
5282 The target SV physically takes over ownership of the body of the source SV
5283 and inherits its flags; however, the target keeps any magic it owns,
5284 and any magic in the source is discarded.
5285 Note that this is a rather specialist SV copying operation; most of the
5286 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5292 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5295 const U32 refcnt = SvREFCNT(sv);
5297 PERL_ARGS_ASSERT_SV_REPLACE;
5299 SV_CHECK_THINKFIRST_COW_DROP(sv);
5300 if (SvREFCNT(nsv) != 1) {
5301 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
5302 UVuf " != 1)", (UV) SvREFCNT(nsv));
5304 if (SvMAGICAL(sv)) {
5308 sv_upgrade(nsv, SVt_PVMG);
5309 SvMAGIC_set(nsv, SvMAGIC(sv));
5310 SvFLAGS(nsv) |= SvMAGICAL(sv);
5312 SvMAGIC_set(sv, NULL);
5316 assert(!SvREFCNT(sv));
5317 #ifdef DEBUG_LEAKING_SCALARS
5318 sv->sv_flags = nsv->sv_flags;
5319 sv->sv_any = nsv->sv_any;
5320 sv->sv_refcnt = nsv->sv_refcnt;
5321 sv->sv_u = nsv->sv_u;
5323 StructCopy(nsv,sv,SV);
5325 if(SvTYPE(sv) == SVt_IV) {
5327 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5331 #ifdef PERL_OLD_COPY_ON_WRITE
5332 if (SvIsCOW_normal(nsv)) {
5333 /* We need to follow the pointers around the loop to make the
5334 previous SV point to sv, rather than nsv. */
5337 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5340 assert(SvPVX_const(current) == SvPVX_const(nsv));
5342 /* Make the SV before us point to the SV after us. */
5344 PerlIO_printf(Perl_debug_log, "previous is\n");
5346 PerlIO_printf(Perl_debug_log,
5347 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5348 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5350 SV_COW_NEXT_SV_SET(current, sv);
5353 SvREFCNT(sv) = refcnt;
5354 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5360 =for apidoc sv_clear
5362 Clear an SV: call any destructors, free up any memory used by the body,
5363 and free the body itself. The SV's head is I<not> freed, although
5364 its type is set to all 1's so that it won't inadvertently be assumed
5365 to be live during global destruction etc.
5366 This function should only be called when REFCNT is zero. Most of the time
5367 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5374 Perl_sv_clear(pTHX_ register SV *const sv)
5377 const U32 type = SvTYPE(sv);
5378 const struct body_details *const sv_type_details
5379 = bodies_by_type + type;
5382 PERL_ARGS_ASSERT_SV_CLEAR;
5383 assert(SvREFCNT(sv) == 0);
5384 assert(SvTYPE(sv) != SVTYPEMASK);
5386 if (type <= SVt_IV) {
5387 /* See the comment in sv.h about the collusion between this early
5388 return and the overloading of the NULL and IV slots in the size
5391 SV * const target = SvRV(sv);
5393 sv_del_backref(target, sv);
5395 SvREFCNT_dec(target);
5397 SvFLAGS(sv) &= SVf_BREAK;
5398 SvFLAGS(sv) |= SVTYPEMASK;
5403 if (PL_defstash && /* Still have a symbol table? */
5410 stash = SvSTASH(sv);
5411 destructor = StashHANDLER(stash,DESTROY);
5413 SV* const tmpref = newRV(sv);
5414 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5416 PUSHSTACKi(PERLSI_DESTROY);
5421 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5427 if(SvREFCNT(tmpref) < 2) {
5428 /* tmpref is not kept alive! */
5430 SvRV_set(tmpref, NULL);
5433 SvREFCNT_dec(tmpref);
5435 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5439 if (PL_in_clean_objs)
5440 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5442 /* DESTROY gave object new lease on life */
5448 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5449 SvOBJECT_off(sv); /* Curse the object. */
5450 if (type != SVt_PVIO)
5451 --PL_sv_objcount; /* XXX Might want something more general */
5454 if (type >= SVt_PVMG) {
5455 if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5456 SvREFCNT_dec(SvOURSTASH(sv));
5457 } else if (SvMAGIC(sv))
5459 if (type == SVt_PVMG && SvPAD_TYPED(sv))
5460 SvREFCNT_dec(SvSTASH(sv));
5463 /* case SVt_BIND: */
5466 IoIFP(sv) != PerlIO_stdin() &&
5467 IoIFP(sv) != PerlIO_stdout() &&
5468 IoIFP(sv) != PerlIO_stderr())
5470 io_close((IO*)sv, FALSE);
5472 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5473 PerlDir_close(IoDIRP(sv));
5474 IoDIRP(sv) = (DIR*)NULL;
5475 Safefree(IoTOP_NAME(sv));
5476 Safefree(IoFMT_NAME(sv));
5477 Safefree(IoBOTTOM_NAME(sv));
5480 /* FIXME for plugins */
5481 pregfree2((REGEXP*) sv);
5488 Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
5492 if (PL_comppad == (AV*)sv) {
5499 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5500 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5501 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5502 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5504 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5505 SvREFCNT_dec(LvTARG(sv));
5507 if (isGV_with_GP(sv)) {
5508 if(GvCVu((GV*)sv) && (stash = GvSTASH((GV*)sv)) && HvNAME_get(stash))
5509 mro_method_changed_in(stash);
5512 unshare_hek(GvNAME_HEK(sv));
5513 /* If we're in a stash, we don't own a reference to it. However it does
5514 have a back reference to us, which needs to be cleared. */
5515 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
5516 sv_del_backref((SV*)stash, sv);
5518 /* FIXME. There are probably more unreferenced pointers to SVs in the
5519 interpreter struct that we should check and tidy in a similar
5521 if ((GV*)sv == PL_last_in_gv)
5522 PL_last_in_gv = NULL;
5528 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5531 SvOOK_offset(sv, offset);
5532 SvPV_set(sv, SvPVX_mutable(sv) - offset);
5533 /* Don't even bother with turning off the OOK flag. */
5536 SV * const target = SvRV(sv);
5538 sv_del_backref(target, sv);
5540 SvREFCNT_dec(target);
5542 #ifdef PERL_OLD_COPY_ON_WRITE
5543 else if (SvPVX_const(sv)) {
5545 /* I believe I need to grab the global SV mutex here and
5546 then recheck the COW status. */
5548 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
5552 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5554 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5557 /* And drop it here. */
5559 } else if (SvLEN(sv)) {
5560 Safefree(SvPVX_const(sv));
5564 else if (SvPVX_const(sv) && SvLEN(sv))
5565 Safefree(SvPVX_mutable(sv));
5566 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5567 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5576 SvFLAGS(sv) &= SVf_BREAK;
5577 SvFLAGS(sv) |= SVTYPEMASK;
5579 if (sv_type_details->arena) {
5580 del_body(((char *)SvANY(sv) + sv_type_details->offset),
5581 &PL_body_roots[type]);
5583 else if (sv_type_details->body_size) {
5584 my_safefree(SvANY(sv));
5589 =for apidoc sv_newref
5591 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5598 Perl_sv_newref(pTHX_ SV *const sv)
5600 PERL_UNUSED_CONTEXT;
5609 Decrement an SV's reference count, and if it drops to zero, call
5610 C<sv_clear> to invoke destructors and free up any memory used by
5611 the body; finally, deallocate the SV's head itself.
5612 Normally called via a wrapper macro C<SvREFCNT_dec>.
5618 Perl_sv_free(pTHX_ SV *const sv)
5623 if (SvREFCNT(sv) == 0) {
5624 if (SvFLAGS(sv) & SVf_BREAK)
5625 /* this SV's refcnt has been artificially decremented to
5626 * trigger cleanup */
5628 if (PL_in_clean_all) /* All is fair */
5630 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5631 /* make sure SvREFCNT(sv)==0 happens very seldom */
5632 SvREFCNT(sv) = (~(U32)0)/2;
5635 if (ckWARN_d(WARN_INTERNAL)) {
5636 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5637 Perl_dump_sv_child(aTHX_ sv);
5639 #ifdef DEBUG_LEAKING_SCALARS
5642 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5643 if (PL_warnhook == PERL_WARNHOOK_FATAL
5644 || ckDEAD(packWARN(WARN_INTERNAL))) {
5645 /* Don't let Perl_warner cause us to escape our fate: */
5649 /* This may not return: */
5650 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5651 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5652 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5655 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5660 if (--(SvREFCNT(sv)) > 0)
5662 Perl_sv_free2(aTHX_ sv);
5666 Perl_sv_free2(pTHX_ SV *const sv)
5670 PERL_ARGS_ASSERT_SV_FREE2;
5674 if (ckWARN_d(WARN_DEBUGGING))
5675 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5676 "Attempt to free temp prematurely: SV 0x%"UVxf
5677 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5681 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5682 /* make sure SvREFCNT(sv)==0 happens very seldom */
5683 SvREFCNT(sv) = (~(U32)0)/2;
5694 Returns the length of the string in the SV. Handles magic and type
5695 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5701 Perl_sv_len(pTHX_ register SV *const sv)
5709 len = mg_length(sv);
5711 (void)SvPV_const(sv, len);
5716 =for apidoc sv_len_utf8
5718 Returns the number of characters in the string in an SV, counting wide
5719 UTF-8 bytes as a single character. Handles magic and type coercion.
5725 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
5726 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
5727 * (Note that the mg_len is not the length of the mg_ptr field.
5728 * This allows the cache to store the character length of the string without
5729 * needing to malloc() extra storage to attach to the mg_ptr.)
5734 Perl_sv_len_utf8(pTHX_ register SV *const sv)
5740 return mg_length(sv);
5744 const U8 *s = (U8*)SvPV_const(sv, len);
5748 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
5750 if (mg && mg->mg_len != -1) {
5752 if (PL_utf8cache < 0) {
5753 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
5755 /* Need to turn the assertions off otherwise we may
5756 recurse infinitely while printing error messages.
5758 SAVEI8(PL_utf8cache);
5760 Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
5761 " real %"UVuf" for %"SVf,
5762 (UV) ulen, (UV) real, SVfARG(sv));
5767 ulen = Perl_utf8_length(aTHX_ s, s + len);
5768 if (!SvREADONLY(sv)) {
5770 mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
5771 &PL_vtbl_utf8, 0, 0);
5779 return Perl_utf8_length(aTHX_ s, s + len);
5783 /* Walk forwards to find the byte corresponding to the passed in UTF-8
5786 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
5789 const U8 *s = start;
5791 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
5793 while (s < send && uoffset--)
5796 /* This is the existing behaviour. Possibly it should be a croak, as
5797 it's actually a bounds error */
5803 /* Given the length of the string in both bytes and UTF-8 characters, decide
5804 whether to walk forwards or backwards to find the byte corresponding to
5805 the passed in UTF-8 offset. */
5807 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
5808 const STRLEN uoffset, const STRLEN uend)
5810 STRLEN backw = uend - uoffset;
5812 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
5814 if (uoffset < 2 * backw) {
5815 /* The assumption is that going forwards is twice the speed of going
5816 forward (that's where the 2 * backw comes from).
5817 (The real figure of course depends on the UTF-8 data.) */
5818 return sv_pos_u2b_forwards(start, send, uoffset);
5823 while (UTF8_IS_CONTINUATION(*send))
5826 return send - start;
5829 /* For the string representation of the given scalar, find the byte
5830 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0
5831 give another position in the string, *before* the sought offset, which
5832 (which is always true, as 0, 0 is a valid pair of positions), which should
5833 help reduce the amount of linear searching.
5834 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
5835 will be used to reduce the amount of linear searching. The cache will be
5836 created if necessary, and the found value offered to it for update. */
5838 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
5839 const U8 *const send, const STRLEN uoffset,
5840 STRLEN uoffset0, STRLEN boffset0)
5842 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */
5845 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
5847 assert (uoffset >= uoffset0);
5849 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5850 && (*mgp || (*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
5851 if ((*mgp)->mg_ptr) {
5852 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
5853 if (cache[0] == uoffset) {
5854 /* An exact match. */
5857 if (cache[2] == uoffset) {
5858 /* An exact match. */
5862 if (cache[0] < uoffset) {
5863 /* The cache already knows part of the way. */
5864 if (cache[0] > uoffset0) {
5865 /* The cache knows more than the passed in pair */
5866 uoffset0 = cache[0];
5867 boffset0 = cache[1];
5869 if ((*mgp)->mg_len != -1) {
5870 /* And we know the end too. */
5872 + sv_pos_u2b_midway(start + boffset0, send,
5874 (*mgp)->mg_len - uoffset0);
5877 + sv_pos_u2b_forwards(start + boffset0,
5878 send, uoffset - uoffset0);
5881 else if (cache[2] < uoffset) {
5882 /* We're between the two cache entries. */
5883 if (cache[2] > uoffset0) {
5884 /* and the cache knows more than the passed in pair */
5885 uoffset0 = cache[2];
5886 boffset0 = cache[3];
5890 + sv_pos_u2b_midway(start + boffset0,
5893 cache[0] - uoffset0);
5896 + sv_pos_u2b_midway(start + boffset0,
5899 cache[2] - uoffset0);
5903 else if ((*mgp)->mg_len != -1) {
5904 /* If we can take advantage of a passed in offset, do so. */
5905 /* In fact, offset0 is either 0, or less than offset, so don't
5906 need to worry about the other possibility. */
5908 + sv_pos_u2b_midway(start + boffset0, send,
5910 (*mgp)->mg_len - uoffset0);
5915 if (!found || PL_utf8cache < 0) {
5916 const STRLEN real_boffset
5917 = boffset0 + sv_pos_u2b_forwards(start + boffset0,
5918 send, uoffset - uoffset0);
5920 if (found && PL_utf8cache < 0) {
5921 if (real_boffset != boffset) {
5922 /* Need to turn the assertions off otherwise we may recurse
5923 infinitely while printing error messages. */
5924 SAVEI8(PL_utf8cache);
5926 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
5927 " real %"UVuf" for %"SVf,
5928 (UV) boffset, (UV) real_boffset, SVfARG(sv));
5931 boffset = real_boffset;
5935 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
5941 =for apidoc sv_pos_u2b
5943 Converts the value pointed to by offsetp from a count of UTF-8 chars from
5944 the start of the string, to a count of the equivalent number of bytes; if
5945 lenp is non-zero, it does the same to lenp, but this time starting from
5946 the offset, rather than from the start of the string. Handles magic and
5953 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5954 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5955 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update().
5960 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
5965 PERL_ARGS_ASSERT_SV_POS_U2B;
5970 start = (U8*)SvPV_const(sv, len);
5972 STRLEN uoffset = (STRLEN) *offsetp;
5973 const U8 * const send = start + len;
5975 const STRLEN boffset = sv_pos_u2b_cached(sv, &mg, start, send,
5978 *offsetp = (I32) boffset;
5981 /* Convert the relative offset to absolute. */
5982 const STRLEN uoffset2 = uoffset + (STRLEN) *lenp;
5983 const STRLEN boffset2
5984 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
5985 uoffset, boffset) - boffset;
5999 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6000 byte length pairing. The (byte) length of the total SV is passed in too,
6001 as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6002 may not have updated SvCUR, so we can't rely on reading it directly.
6004 The proffered utf8/byte length pairing isn't used if the cache already has
6005 two pairs, and swapping either for the proffered pair would increase the
6006 RMS of the intervals between known byte offsets.
6008 The cache itself consists of 4 STRLEN values
6009 0: larger UTF-8 offset
6010 1: corresponding byte offset
6011 2: smaller UTF-8 offset
6012 3: corresponding byte offset
6014 Unused cache pairs have the value 0, 0.
6015 Keeping the cache "backwards" means that the invariant of
6016 cache[0] >= cache[2] is maintained even with empty slots, which means that
6017 the code that uses it doesn't need to worry if only 1 entry has actually
6018 been set to non-zero. It also makes the "position beyond the end of the
6019 cache" logic much simpler, as the first slot is always the one to start
6023 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6024 const STRLEN utf8, const STRLEN blen)
6028 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6034 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6036 (*mgp)->mg_len = -1;
6040 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6041 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6042 (*mgp)->mg_ptr = (char *) cache;
6046 if (PL_utf8cache < 0) {
6047 const U8 *start = (const U8 *) SvPVX_const(sv);
6048 const STRLEN realutf8 = utf8_length(start, start + byte);
6050 if (realutf8 != utf8) {
6051 /* Need to turn the assertions off otherwise we may recurse
6052 infinitely while printing error messages. */
6053 SAVEI8(PL_utf8cache);
6055 Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
6056 " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
6060 /* Cache is held with the later position first, to simplify the code
6061 that deals with unbounded ends. */
6063 ASSERT_UTF8_CACHE(cache);
6064 if (cache[1] == 0) {
6065 /* Cache is totally empty */
6068 } else if (cache[3] == 0) {
6069 if (byte > cache[1]) {
6070 /* New one is larger, so goes first. */
6071 cache[2] = cache[0];
6072 cache[3] = cache[1];
6080 #define THREEWAY_SQUARE(a,b,c,d) \
6081 ((float)((d) - (c))) * ((float)((d) - (c))) \
6082 + ((float)((c) - (b))) * ((float)((c) - (b))) \
6083 + ((float)((b) - (a))) * ((float)((b) - (a)))
6085 /* Cache has 2 slots in use, and we know three potential pairs.
6086 Keep the two that give the lowest RMS distance. Do the
6087 calcualation in bytes simply because we always know the byte
6088 length. squareroot has the same ordering as the positive value,
6089 so don't bother with the actual square root. */
6090 const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6091 if (byte > cache[1]) {
6092 /* New position is after the existing pair of pairs. */
6093 const float keep_earlier
6094 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6095 const float keep_later
6096 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6098 if (keep_later < keep_earlier) {
6099 if (keep_later < existing) {
6100 cache[2] = cache[0];
6101 cache[3] = cache[1];
6107 if (keep_earlier < existing) {
6113 else if (byte > cache[3]) {
6114 /* New position is between the existing pair of pairs. */
6115 const float keep_earlier
6116 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6117 const float keep_later
6118 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6120 if (keep_later < keep_earlier) {
6121 if (keep_later < existing) {
6127 if (keep_earlier < existing) {
6134 /* New position is before the existing pair of pairs. */
6135 const float keep_earlier
6136 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6137 const float keep_later
6138 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6140 if (keep_later < keep_earlier) {
6141 if (keep_later < existing) {
6147 if (keep_earlier < existing) {
6148 cache[0] = cache[2];
6149 cache[1] = cache[3];
6156 ASSERT_UTF8_CACHE(cache);
6159 /* We already know all of the way, now we may be able to walk back. The same
6160 assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6161 backward is half the speed of walking forward. */
6163 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6164 const U8 *end, STRLEN endu)
6166 const STRLEN forw = target - s;
6167 STRLEN backw = end - target;
6169 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6171 if (forw < 2 * backw) {
6172 return utf8_length(s, target);
6175 while (end > target) {
6177 while (UTF8_IS_CONTINUATION(*end)) {
6186 =for apidoc sv_pos_b2u
6188 Converts the value pointed to by offsetp from a count of bytes from the
6189 start of the string, to a count of the equivalent number of UTF-8 chars.
6190 Handles magic and type coercion.
6196 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6197 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
6202 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
6205 const STRLEN byte = *offsetp;
6206 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */
6212 PERL_ARGS_ASSERT_SV_POS_B2U;
6217 s = (const U8*)SvPV_const(sv, blen);
6220 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6224 if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
6225 && (mg = mg_find(sv, PERL_MAGIC_utf8))) {
6227 STRLEN * const cache = (STRLEN *) mg->mg_ptr;
6228 if (cache[1] == byte) {
6229 /* An exact match. */
6230 *offsetp = cache[0];
6233 if (cache[3] == byte) {
6234 /* An exact match. */
6235 *offsetp = cache[2];
6239 if (cache[1] < byte) {
6240 /* We already know part of the way. */
6241 if (mg->mg_len != -1) {
6242 /* Actually, we know the end too. */
6244 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
6245 s + blen, mg->mg_len - cache[0]);
6247 len = cache[0] + utf8_length(s + cache[1], send);
6250 else if (cache[3] < byte) {
6251 /* We're between the two cached pairs, so we do the calculation
6252 offset by the byte/utf-8 positions for the earlier pair,
6253 then add the utf-8 characters from the string start to
6255 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6256 s + cache[1], cache[0] - cache[2])
6260 else { /* cache[3] > byte */
6261 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6265 ASSERT_UTF8_CACHE(cache);
6267 } else if (mg->mg_len != -1) {
6268 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
6272 if (!found || PL_utf8cache < 0) {
6273 const STRLEN real_len = utf8_length(s, send);
6275 if (found && PL_utf8cache < 0) {
6276 if (len != real_len) {
6277 /* Need to turn the assertions off otherwise we may recurse
6278 infinitely while printing error messages. */
6279 SAVEI8(PL_utf8cache);
6281 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
6282 " real %"UVuf" for %"SVf,
6283 (UV) len, (UV) real_len, SVfARG(sv));
6291 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
6297 Returns a boolean indicating whether the strings in the two SVs are
6298 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6299 coerce its args to strings if necessary.
6305 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
6314 SV* svrecode = NULL;
6321 /* if pv1 and pv2 are the same, second SvPV_const call may
6322 * invalidate pv1, so we may need to make a copy */
6323 if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6324 pv1 = SvPV_const(sv1, cur1);
6325 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
6327 pv1 = SvPV_const(sv1, cur1);
6335 pv2 = SvPV_const(sv2, cur2);
6337 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6338 /* Differing utf8ness.
6339 * Do not UTF8size the comparands as a side-effect. */
6342 svrecode = newSVpvn(pv2, cur2);
6343 sv_recode_to_utf8(svrecode, PL_encoding);
6344 pv2 = SvPV_const(svrecode, cur2);
6347 svrecode = newSVpvn(pv1, cur1);
6348 sv_recode_to_utf8(svrecode, PL_encoding);
6349 pv1 = SvPV_const(svrecode, cur1);
6351 /* Now both are in UTF-8. */
6353 SvREFCNT_dec(svrecode);
6358 bool is_utf8 = TRUE;
6361 /* sv1 is the UTF-8 one,
6362 * if is equal it must be downgrade-able */
6363 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
6369 /* sv2 is the UTF-8 one,
6370 * if is equal it must be downgrade-able */
6371 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
6377 /* Downgrade not possible - cannot be eq */
6385 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6387 SvREFCNT_dec(svrecode);
6397 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6398 string in C<sv1> is less than, equal to, or greater than the string in
6399 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6400 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
6406 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
6410 const char *pv1, *pv2;
6413 SV *svrecode = NULL;
6420 pv1 = SvPV_const(sv1, cur1);
6427 pv2 = SvPV_const(sv2, cur2);
6429 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6430 /* Differing utf8ness.
6431 * Do not UTF8size the comparands as a side-effect. */
6434 svrecode = newSVpvn(pv2, cur2);
6435 sv_recode_to_utf8(svrecode, PL_encoding);
6436 pv2 = SvPV_const(svrecode, cur2);
6439 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6444 svrecode = newSVpvn(pv1, cur1);
6445 sv_recode_to_utf8(svrecode, PL_encoding);
6446 pv1 = SvPV_const(svrecode, cur1);
6449 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6455 cmp = cur2 ? -1 : 0;
6459 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6462 cmp = retval < 0 ? -1 : 1;
6463 } else if (cur1 == cur2) {
6466 cmp = cur1 < cur2 ? -1 : 1;
6470 SvREFCNT_dec(svrecode);
6478 =for apidoc sv_cmp_locale
6480 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6481 'use bytes' aware, handles get magic, and will coerce its args to strings
6482 if necessary. See also C<sv_cmp>.
6488 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
6491 #ifdef USE_LOCALE_COLLATE
6497 if (PL_collation_standard)
6501 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6503 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6505 if (!pv1 || !len1) {
6516 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6519 return retval < 0 ? -1 : 1;
6522 * When the result of collation is equality, that doesn't mean
6523 * that there are no differences -- some locales exclude some
6524 * characters from consideration. So to avoid false equalities,
6525 * we use the raw string as a tiebreaker.
6531 #endif /* USE_LOCALE_COLLATE */
6533 return sv_cmp(sv1, sv2);
6537 #ifdef USE_LOCALE_COLLATE
6540 =for apidoc sv_collxfrm
6542 Add Collate Transform magic to an SV if it doesn't already have it.
6544 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6545 scalar data of the variable, but transformed to such a format that a normal
6546 memory comparison can be used to compare the data according to the locale
6553 Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
6558 PERL_ARGS_ASSERT_SV_COLLXFRM;
6560 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6561 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6567 Safefree(mg->mg_ptr);
6568 s = SvPV_const(sv, len);
6569 if ((xf = mem_collxfrm(s, len, &xlen))) {
6571 #ifdef PERL_OLD_COPY_ON_WRITE
6573 sv_force_normal_flags(sv, 0);
6575 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6589 if (mg && mg->mg_ptr) {
6591 return mg->mg_ptr + sizeof(PL_collation_ix);
6599 #endif /* USE_LOCALE_COLLATE */
6604 Get a line from the filehandle and store it into the SV, optionally
6605 appending to the currently-stored string.
6611 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
6616 register STDCHAR rslast;
6617 register STDCHAR *bp;
6622 PERL_ARGS_ASSERT_SV_GETS;
6624 if (SvTHINKFIRST(sv))
6625 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6626 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6628 However, perlbench says it's slower, because the existing swipe code
6629 is faster than copy on write.
6630 Swings and roundabouts. */
6631 SvUPGRADE(sv, SVt_PV);
6636 if (PerlIO_isutf8(fp)) {
6638 sv_utf8_upgrade_nomg(sv);
6639 sv_pos_u2b(sv,&append,0);
6641 } else if (SvUTF8(sv)) {
6642 SV * const tsv = newSV(0);
6643 sv_gets(tsv, fp, 0);
6644 sv_utf8_upgrade_nomg(tsv);
6645 SvCUR_set(sv,append);
6648 goto return_string_or_null;
6653 if (PerlIO_isutf8(fp))
6656 if (IN_PERL_COMPILETIME) {
6657 /* we always read code in line mode */
6661 else if (RsSNARF(PL_rs)) {
6662 /* If it is a regular disk file use size from stat() as estimate
6663 of amount we are going to read -- may result in mallocing
6664 more memory than we really need if the layers below reduce
6665 the size we read (e.g. CRLF or a gzip layer).
6668 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
6669 const Off_t offset = PerlIO_tell(fp);
6670 if (offset != (Off_t) -1 && st.st_size + append > offset) {
6671 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6677 else if (RsRECORD(PL_rs)) {
6685 /* Grab the size of the record we're getting */
6686 recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
6687 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6690 /* VMS wants read instead of fread, because fread doesn't respect */
6691 /* RMS record boundaries. This is not necessarily a good thing to be */
6692 /* doing, but we've got no other real choice - except avoid stdio
6693 as implementation - perhaps write a :vms layer ?
6695 fd = PerlIO_fileno(fp);
6696 if (fd == -1) { /* in-memory file from PerlIO::Scalar */
6697 bytesread = PerlIO_read(fp, buffer, recsize);
6700 bytesread = PerlLIO_read(fd, buffer, recsize);
6703 bytesread = PerlIO_read(fp, buffer, recsize);
6707 SvCUR_set(sv, bytesread += append);
6708 buffer[bytesread] = '\0';
6709 goto return_string_or_null;
6711 else if (RsPARA(PL_rs)) {
6717 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6718 if (PerlIO_isutf8(fp)) {
6719 rsptr = SvPVutf8(PL_rs, rslen);
6722 if (SvUTF8(PL_rs)) {
6723 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6724 Perl_croak(aTHX_ "Wide character in $/");
6727 rsptr = SvPV_const(PL_rs, rslen);
6731 rslast = rslen ? rsptr[rslen - 1] : '\0';
6733 if (rspara) { /* have to do this both before and after */
6734 do { /* to make sure file boundaries work right */
6737 i = PerlIO_getc(fp);
6741 PerlIO_ungetc(fp,i);
6747 /* See if we know enough about I/O mechanism to cheat it ! */
6749 /* This used to be #ifdef test - it is made run-time test for ease
6750 of abstracting out stdio interface. One call should be cheap
6751 enough here - and may even be a macro allowing compile
6755 if (PerlIO_fast_gets(fp)) {
6758 * We're going to steal some values from the stdio struct
6759 * and put EVERYTHING in the innermost loop into registers.
6761 register STDCHAR *ptr;
6765 #if defined(VMS) && defined(PERLIO_IS_STDIO)
6766 /* An ungetc()d char is handled separately from the regular
6767 * buffer, so we getc() it back out and stuff it in the buffer.
6769 i = PerlIO_getc(fp);
6770 if (i == EOF) return 0;
6771 *(--((*fp)->_ptr)) = (unsigned char) i;
6775 /* Here is some breathtakingly efficient cheating */
6777 cnt = PerlIO_get_cnt(fp); /* get count into register */
6778 /* make sure we have the room */
6779 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6780 /* Not room for all of it
6781 if we are looking for a separator and room for some
6783 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6784 /* just process what we have room for */
6785 shortbuffered = cnt - SvLEN(sv) + append + 1;
6786 cnt -= shortbuffered;
6790 /* remember that cnt can be negative */
6791 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6796 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
6797 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6798 DEBUG_P(PerlIO_printf(Perl_debug_log,
6799 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6800 DEBUG_P(PerlIO_printf(Perl_debug_log,
6801 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6802 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6803 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6808 while (cnt > 0) { /* this | eat */
6810 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6811 goto thats_all_folks; /* screams | sed :-) */
6815 Copy(ptr, bp, cnt, char); /* this | eat */
6816 bp += cnt; /* screams | dust */
6817 ptr += cnt; /* louder | sed :-) */
6822 if (shortbuffered) { /* oh well, must extend */
6823 cnt = shortbuffered;
6825 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6827 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6828 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6832 DEBUG_P(PerlIO_printf(Perl_debug_log,
6833 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6834 PTR2UV(ptr),(long)cnt));
6835 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6837 DEBUG_P(PerlIO_printf(Perl_debug_log,
6838 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6839 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6840 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6842 /* This used to call 'filbuf' in stdio form, but as that behaves like
6843 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6844 another abstraction. */
6845 i = PerlIO_getc(fp); /* get more characters */
6847 DEBUG_P(PerlIO_printf(Perl_debug_log,
6848 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6849 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6850 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6852 cnt = PerlIO_get_cnt(fp);
6853 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
6854 DEBUG_P(PerlIO_printf(Perl_debug_log,
6855 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6857 if (i == EOF) /* all done for ever? */
6858 goto thats_really_all_folks;
6860 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6862 SvGROW(sv, bpx + cnt + 2);
6863 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6865 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
6867 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
6868 goto thats_all_folks;
6872 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6873 memNE((char*)bp - rslen, rsptr, rslen))
6874 goto screamer; /* go back to the fray */
6875 thats_really_all_folks:
6877 cnt += shortbuffered;
6878 DEBUG_P(PerlIO_printf(Perl_debug_log,
6879 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6880 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
6881 DEBUG_P(PerlIO_printf(Perl_debug_log,
6882 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6883 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6884 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6886 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
6887 DEBUG_P(PerlIO_printf(Perl_debug_log,
6888 "Screamer: done, len=%ld, string=|%.*s|\n",
6889 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6893 /*The big, slow, and stupid way. */
6894 #ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
6895 STDCHAR *buf = NULL;
6896 Newx(buf, 8192, STDCHAR);
6904 register const STDCHAR * const bpe = buf + sizeof(buf);
6906 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6907 ; /* keep reading */
6911 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6912 /* Accomodate broken VAXC compiler, which applies U8 cast to
6913 * both args of ?: operator, causing EOF to change into 255
6916 i = (U8)buf[cnt - 1];
6922 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6924 sv_catpvn(sv, (char *) buf, cnt);
6926 sv_setpvn(sv, (char *) buf, cnt);
6928 if (i != EOF && /* joy */
6930 SvCUR(sv) < rslen ||
6931 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6935 * If we're reading from a TTY and we get a short read,
6936 * indicating that the user hit his EOF character, we need
6937 * to notice it now, because if we try to read from the TTY
6938 * again, the EOF condition will disappear.
6940 * The comparison of cnt to sizeof(buf) is an optimization
6941 * that prevents unnecessary calls to feof().
6945 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
6949 #ifdef USE_HEAP_INSTEAD_OF_STACK
6954 if (rspara) { /* have to do this both before and after */
6955 while (i != EOF) { /* to make sure file boundaries work right */
6956 i = PerlIO_getc(fp);
6958 PerlIO_ungetc(fp,i);
6964 return_string_or_null:
6965 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
6971 Auto-increment of the value in the SV, doing string to numeric conversion
6972 if necessary. Handles 'get' magic.
6978 Perl_sv_inc(pTHX_ register SV *const sv)
6987 if (SvTHINKFIRST(sv)) {
6989 sv_force_normal_flags(sv, 0);
6990 if (SvREADONLY(sv)) {
6991 if (IN_PERL_RUNTIME)
6992 Perl_croak(aTHX_ PL_no_modify);
6996 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6998 i = PTR2IV(SvRV(sv));
7003 flags = SvFLAGS(sv);
7004 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7005 /* It's (privately or publicly) a float, but not tested as an
7006 integer, so test it to see. */
7008 flags = SvFLAGS(sv);
7010 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7011 /* It's publicly an integer, or privately an integer-not-float */
7012 #ifdef PERL_PRESERVE_IVUV
7016 if (SvUVX(sv) == UV_MAX)
7017 sv_setnv(sv, UV_MAX_P1);
7019 (void)SvIOK_only_UV(sv);
7020 SvUV_set(sv, SvUVX(sv) + 1);
7022 if (SvIVX(sv) == IV_MAX)
7023 sv_setuv(sv, (UV)IV_MAX + 1);
7025 (void)SvIOK_only(sv);
7026 SvIV_set(sv, SvIVX(sv) + 1);
7031 if (flags & SVp_NOK) {
7032 const NV was = SvNVX(sv);
7033 if (NV_OVERFLOWS_INTEGERS_AT &&
7034 was >= NV_OVERFLOWS_INTEGERS_AT && ckWARN(WARN_IMPRECISION)) {
7035 Perl_warner(aTHX_ packWARN(WARN_IMPRECISION),
7036 "Lost precision when incrementing %" NVff " by 1",
7039 (void)SvNOK_only(sv);
7040 SvNV_set(sv, was + 1.0);
7044 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7045 if ((flags & SVTYPEMASK) < SVt_PVIV)
7046 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7047 (void)SvIOK_only(sv);
7052 while (isALPHA(*d)) d++;
7053 while (isDIGIT(*d)) d++;
7055 #ifdef PERL_PRESERVE_IVUV
7056 /* Got to punt this as an integer if needs be, but we don't issue
7057 warnings. Probably ought to make the sv_iv_please() that does
7058 the conversion if possible, and silently. */
7059 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7060 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7061 /* Need to try really hard to see if it's an integer.
7062 9.22337203685478e+18 is an integer.
7063 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7064 so $a="9.22337203685478e+18"; $a+0; $a++
7065 needs to be the same as $a="9.22337203685478e+18"; $a++
7072 /* sv_2iv *should* have made this an NV */
7073 if (flags & SVp_NOK) {
7074 (void)SvNOK_only(sv);
7075 SvNV_set(sv, SvNVX(sv) + 1.0);
7078 /* I don't think we can get here. Maybe I should assert this
7079 And if we do get here I suspect that sv_setnv will croak. NWC
7081 #if defined(USE_LONG_DOUBLE)
7082 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",
7083 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7085 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7086 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7089 #endif /* PERL_PRESERVE_IVUV */
7090 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7094 while (d >= SvPVX_const(sv)) {
7102 /* MKS: The original code here died if letters weren't consecutive.
7103 * at least it didn't have to worry about non-C locales. The
7104 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7105 * arranged in order (although not consecutively) and that only
7106 * [A-Za-z] are accepted by isALPHA in the C locale.
7108 if (*d != 'z' && *d != 'Z') {
7109 do { ++*d; } while (!isALPHA(*d));
7112 *(d--) -= 'z' - 'a';
7117 *(d--) -= 'z' - 'a' + 1;
7121 /* oh,oh, the number grew */
7122 SvGROW(sv, SvCUR(sv) + 2);
7123 SvCUR_set(sv, SvCUR(sv) + 1);
7124 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
7135 Auto-decrement of the value in the SV, doing string to numeric conversion
7136 if necessary. Handles 'get' magic.
7142 Perl_sv_dec(pTHX_ register SV *const sv)
7150 if (SvTHINKFIRST(sv)) {
7152 sv_force_normal_flags(sv, 0);
7153 if (SvREADONLY(sv)) {
7154 if (IN_PERL_RUNTIME)
7155 Perl_croak(aTHX_ PL_no_modify);
7159 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7161 i = PTR2IV(SvRV(sv));
7166 /* Unlike sv_inc we don't have to worry about string-never-numbers
7167 and keeping them magic. But we mustn't warn on punting */
7168 flags = SvFLAGS(sv);
7169 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7170 /* It's publicly an integer, or privately an integer-not-float */
7171 #ifdef PERL_PRESERVE_IVUV
7175 if (SvUVX(sv) == 0) {
7176 (void)SvIOK_only(sv);
7180 (void)SvIOK_only_UV(sv);
7181 SvUV_set(sv, SvUVX(sv) - 1);
7184 if (SvIVX(sv) == IV_MIN) {
7185 sv_setnv(sv, (NV)IV_MIN);
7189 (void)SvIOK_only(sv);
7190 SvIV_set(sv, SvIVX(sv) - 1);
7195 if (flags & SVp_NOK) {
7198 const NV was = SvNVX(sv);
7199 if (NV_OVERFLOWS_INTEGERS_AT &&
7200 was <= -NV_OVERFLOWS_INTEGERS_AT && ckWARN(WARN_IMPRECISION)) {
7201 Perl_warner(aTHX_ packWARN(WARN_IMPRECISION),
7202 "Lost precision when decrementing %" NVff " by 1",
7205 (void)SvNOK_only(sv);
7206 SvNV_set(sv, was - 1.0);
7210 if (!(flags & SVp_POK)) {
7211 if ((flags & SVTYPEMASK) < SVt_PVIV)
7212 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7214 (void)SvIOK_only(sv);
7217 #ifdef PERL_PRESERVE_IVUV
7219 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7220 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7221 /* Need to try really hard to see if it's an integer.
7222 9.22337203685478e+18 is an integer.
7223 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7224 so $a="9.22337203685478e+18"; $a+0; $a--
7225 needs to be the same as $a="9.22337203685478e+18"; $a--
7232 /* sv_2iv *should* have made this an NV */
7233 if (flags & SVp_NOK) {
7234 (void)SvNOK_only(sv);
7235 SvNV_set(sv, SvNVX(sv) - 1.0);
7238 /* I don't think we can get here. Maybe I should assert this
7239 And if we do get here I suspect that sv_setnv will croak. NWC
7241 #if defined(USE_LONG_DOUBLE)
7242 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",
7243 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7245 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7246 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7250 #endif /* PERL_PRESERVE_IVUV */
7251 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
7255 =for apidoc sv_mortalcopy
7257 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
7258 The new SV is marked as mortal. It will be destroyed "soon", either by an
7259 explicit call to FREETMPS, or by an implicit call at places such as
7260 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
7265 /* Make a string that will exist for the duration of the expression
7266 * evaluation. Actually, it may have to last longer than that, but
7267 * hopefully we won't free it until it has been assigned to a
7268 * permanent location. */
7271 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
7277 sv_setsv(sv,oldstr);
7279 PL_tmps_stack[++PL_tmps_ix] = sv;
7285 =for apidoc sv_newmortal
7287 Creates a new null SV which is mortal. The reference count of the SV is
7288 set to 1. It will be destroyed "soon", either by an explicit call to
7289 FREETMPS, or by an implicit call at places such as statement boundaries.
7290 See also C<sv_mortalcopy> and C<sv_2mortal>.
7296 Perl_sv_newmortal(pTHX)
7302 SvFLAGS(sv) = SVs_TEMP;
7304 PL_tmps_stack[++PL_tmps_ix] = sv;
7310 =for apidoc newSVpvn_flags
7312 Creates a new SV and copies a string into it. The reference count for the
7313 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7314 string. You are responsible for ensuring that the source string is at least
7315 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7316 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
7317 If C<SVs_TEMP> is set, then C<sv2mortal()> is called on the result before
7318 returning. If C<SVf_UTF8> is set, then it will be set on the new SV.
7319 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
7321 #define newSVpvn_utf8(s, len, u) \
7322 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7328 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
7333 /* All the flags we don't support must be zero.
7334 And we're new code so I'm going to assert this from the start. */
7335 assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
7337 sv_setpvn(sv,s,len);
7338 SvFLAGS(sv) |= (flags & SVf_UTF8);
7339 return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
7343 =for apidoc sv_2mortal
7345 Marks an existing SV as mortal. The SV will be destroyed "soon", either
7346 by an explicit call to FREETMPS, or by an implicit call at places such as
7347 statement boundaries. SvTEMP() is turned on which means that the SV's
7348 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7349 and C<sv_mortalcopy>.
7355 Perl_sv_2mortal(pTHX_ register SV *const sv)
7360 if (SvREADONLY(sv) && SvIMMORTAL(sv))
7363 PL_tmps_stack[++PL_tmps_ix] = sv;
7371 Creates a new SV and copies a string into it. The reference count for the
7372 SV is set to 1. If C<len> is zero, Perl will compute the length using
7373 strlen(). For efficiency, consider using C<newSVpvn> instead.
7379 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
7385 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
7390 =for apidoc newSVpvn
7392 Creates a new SV and copies a string into it. The reference count for the
7393 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7394 string. You are responsible for ensuring that the source string is at least
7395 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7401 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
7407 sv_setpvn(sv,s,len);
7412 =for apidoc newSVhek
7414 Creates a new SV from the hash key structure. It will generate scalars that
7415 point to the shared string table where possible. Returns a new (undefined)
7416 SV if the hek is NULL.
7422 Perl_newSVhek(pTHX_ const HEK *const hek)
7432 if (HEK_LEN(hek) == HEf_SVKEY) {
7433 return newSVsv(*(SV**)HEK_KEY(hek));
7435 const int flags = HEK_FLAGS(hek);
7436 if (flags & HVhek_WASUTF8) {
7438 Andreas would like keys he put in as utf8 to come back as utf8
7440 STRLEN utf8_len = HEK_LEN(hek);
7441 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7442 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
7445 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7447 } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
7448 /* We don't have a pointer to the hv, so we have to replicate the
7449 flag into every HEK. This hv is using custom a hasing
7450 algorithm. Hence we can't return a shared string scalar, as
7451 that would contain the (wrong) hash value, and might get passed
7452 into an hv routine with a regular hash.
7453 Similarly, a hash that isn't using shared hash keys has to have
7454 the flag in every key so that we know not to try to call
7455 share_hek_kek on it. */
7457 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
7462 /* This will be overwhelminly the most common case. */
7464 /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7465 more efficient than sharepvn(). */
7469 sv_upgrade(sv, SVt_PV);
7470 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7471 SvCUR_set(sv, HEK_LEN(hek));
7484 =for apidoc newSVpvn_share
7486 Creates a new SV with its SvPVX_const pointing to a shared string in the string
7487 table. If the string does not already exist in the table, it is created
7488 first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7489 value is used; otherwise the hash is computed. The string's hash can be later
7490 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7491 that as the string table is used for shared hash keys these strings will have
7492 SvPVX_const == HeKEY and hash lookup will avoid string compare.
7498 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7502 bool is_utf8 = FALSE;
7503 const char *const orig_src = src;
7506 STRLEN tmplen = -len;
7508 /* See the note in hv.c:hv_fetch() --jhi */
7509 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7513 PERL_HASH(hash, src, len);
7515 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
7516 changes here, update it there too. */
7517 sv_upgrade(sv, SVt_PV);
7518 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7526 if (src != orig_src)
7532 #if defined(PERL_IMPLICIT_CONTEXT)
7534 /* pTHX_ magic can't cope with varargs, so this is a no-context
7535 * version of the main function, (which may itself be aliased to us).
7536 * Don't access this version directly.
7540 Perl_newSVpvf_nocontext(const char *const pat, ...)
7546 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
7548 va_start(args, pat);
7549 sv = vnewSVpvf(pat, &args);
7556 =for apidoc newSVpvf
7558 Creates a new SV and initializes it with the string formatted like
7565 Perl_newSVpvf(pTHX_ const char *const pat, ...)
7570 PERL_ARGS_ASSERT_NEWSVPVF;
7572 va_start(args, pat);
7573 sv = vnewSVpvf(pat, &args);
7578 /* backend for newSVpvf() and newSVpvf_nocontext() */
7581 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
7586 PERL_ARGS_ASSERT_VNEWSVPVF;
7589 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
7596 Creates a new SV and copies a floating point value into it.
7597 The reference count for the SV is set to 1.
7603 Perl_newSVnv(pTHX_ const NV n)
7616 Creates a new SV and copies an integer into it. The reference count for the
7623 Perl_newSViv(pTHX_ const IV i)
7636 Creates a new SV and copies an unsigned integer into it.
7637 The reference count for the SV is set to 1.
7643 Perl_newSVuv(pTHX_ const UV u)
7654 =for apidoc newSV_type
7656 Creates a new SV, of the type specified. The reference count for the new SV
7663 Perl_newSV_type(pTHX_ const svtype type)
7668 sv_upgrade(sv, type);
7673 =for apidoc newRV_noinc
7675 Creates an RV wrapper for an SV. The reference count for the original
7676 SV is B<not> incremented.
7682 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
7685 register SV *sv = newSV_type(SVt_IV);
7687 PERL_ARGS_ASSERT_NEWRV_NOINC;
7690 SvRV_set(sv, tmpRef);
7695 /* newRV_inc is the official function name to use now.
7696 * newRV_inc is in fact #defined to newRV in sv.h
7700 Perl_newRV(pTHX_ SV *const sv)
7704 PERL_ARGS_ASSERT_NEWRV;
7706 return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
7712 Creates a new SV which is an exact duplicate of the original SV.
7719 Perl_newSVsv(pTHX_ register SV *const old)
7726 if (SvTYPE(old) == SVTYPEMASK) {
7727 if (ckWARN_d(WARN_INTERNAL))
7728 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7732 /* SV_GMAGIC is the default for sv_setv()
7733 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7734 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7735 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7740 =for apidoc sv_reset
7742 Underlying implementation for the C<reset> Perl function.
7743 Note that the perl-level function is vaguely deprecated.
7749 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
7752 char todo[PERL_UCHAR_MAX+1];
7754 PERL_ARGS_ASSERT_SV_RESET;
7759 if (!*s) { /* reset ?? searches */
7760 MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
7762 const U32 count = mg->mg_len / sizeof(PMOP**);
7763 PMOP **pmp = (PMOP**) mg->mg_ptr;
7764 PMOP *const *const end = pmp + count;
7768 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
7770 (*pmp)->op_pmflags &= ~PMf_USED;
7778 /* reset variables */
7780 if (!HvARRAY(stash))
7783 Zero(todo, 256, char);
7786 I32 i = (unsigned char)*s;
7790 max = (unsigned char)*s++;
7791 for ( ; i <= max; i++) {
7794 for (i = 0; i <= (I32) HvMAX(stash); i++) {
7796 for (entry = HvARRAY(stash)[i];
7798 entry = HeNEXT(entry))
7803 if (!todo[(U8)*HeKEY(entry)])
7805 gv = (GV*)HeVAL(entry);
7808 if (SvTHINKFIRST(sv)) {
7809 if (!SvREADONLY(sv) && SvROK(sv))
7811 /* XXX Is this continue a bug? Why should THINKFIRST
7812 exempt us from resetting arrays and hashes? */
7816 if (SvTYPE(sv) >= SVt_PV) {
7818 if (SvPVX_const(sv) != NULL)
7826 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7828 Perl_die(aTHX_ "Can't reset %%ENV on this system");
7831 # if defined(USE_ENVIRON_ARRAY)
7834 # endif /* USE_ENVIRON_ARRAY */
7845 Using various gambits, try to get an IO from an SV: the IO slot if its a
7846 GV; or the recursive result if we're an RV; or the IO slot of the symbol
7847 named after the PV if we're a string.
7853 Perl_sv_2io(pTHX_ SV *const sv)
7858 PERL_ARGS_ASSERT_SV_2IO;
7860 switch (SvTYPE(sv)) {
7865 if (isGV_with_GP(sv)) {
7869 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7875 Perl_croak(aTHX_ PL_no_usym, "filehandle");
7877 return sv_2io(SvRV(sv));
7878 gv = gv_fetchsv(sv, 0, SVt_PVIO);
7884 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
7893 Using various gambits, try to get a CV from an SV; in addition, try if
7894 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7895 The flags in C<lref> are passed to sv_fetchsv.
7901 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
7907 PERL_ARGS_ASSERT_SV_2CV;
7914 switch (SvTYPE(sv)) {
7925 if (isGV_with_GP(sv)) {
7935 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
7937 tryAMAGICunDEREF(to_cv);
7940 if (SvTYPE(sv) == SVt_PVCV) {
7946 else if(isGV_with_GP(sv))
7949 Perl_croak(aTHX_ "Not a subroutine reference");
7951 else if (isGV_with_GP(sv)) {
7956 gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
7962 /* Some flags to gv_fetchsv mean don't really create the GV */
7963 if (!isGV_with_GP(gv)) {
7969 if (lref && !GvCVu(gv)) {
7973 gv_efullname3(tmpsv, gv, NULL);
7974 /* XXX this is probably not what they think they're getting.
7975 * It has the same effect as "sub name;", i.e. just a forward
7977 newSUB(start_subparse(FALSE, 0),
7978 newSVOP(OP_CONST, 0, tmpsv),
7982 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7983 SVfARG(SvOK(sv) ? sv : &PL_sv_no));
7992 Returns true if the SV has a true value by Perl's rules.
7993 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7994 instead use an in-line version.
8000 Perl_sv_true(pTHX_ register SV *const sv)
8005 register const XPV* const tXpv = (XPV*)SvANY(sv);
8007 (tXpv->xpv_cur > 1 ||
8008 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8015 return SvIVX(sv) != 0;
8018 return SvNVX(sv) != 0.0;
8020 return sv_2bool(sv);
8026 =for apidoc sv_pvn_force
8028 Get a sensible string out of the SV somehow.
8029 A private implementation of the C<SvPV_force> macro for compilers which
8030 can't cope with complex macro expressions. Always use the macro instead.
8032 =for apidoc sv_pvn_force_flags
8034 Get a sensible string out of the SV somehow.
8035 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8036 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8037 implemented in terms of this function.
8038 You normally want to use the various wrapper macros instead: see
8039 C<SvPV_force> and C<SvPV_force_nomg>
8045 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8049 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8051 if (SvTHINKFIRST(sv) && !SvROK(sv))
8052 sv_force_normal_flags(sv, 0);
8062 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
8063 const char * const ref = sv_reftype(sv,0);
8065 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
8066 ref, OP_NAME(PL_op));
8068 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
8070 if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8071 || isGV_with_GP(sv))
8072 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8074 s = sv_2pv_flags(sv, &len, flags);
8078 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
8081 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
8082 SvGROW(sv, len + 1);
8083 Move(s,SvPVX(sv),len,char);
8085 SvPVX(sv)[len] = '\0';
8088 SvPOK_on(sv); /* validate pointer */
8090 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8091 PTR2UV(sv),SvPVX_const(sv)));
8094 return SvPVX_mutable(sv);
8098 =for apidoc sv_pvbyten_force
8100 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
8106 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
8108 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8110 sv_pvn_force(sv,lp);
8111 sv_utf8_downgrade(sv,0);
8117 =for apidoc sv_pvutf8n_force
8119 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
8125 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
8127 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8129 sv_pvn_force(sv,lp);
8130 sv_utf8_upgrade(sv);
8136 =for apidoc sv_reftype
8138 Returns a string describing what the SV is a reference to.
8144 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
8146 PERL_ARGS_ASSERT_SV_REFTYPE;
8148 /* The fact that I don't need to downcast to char * everywhere, only in ?:
8149 inside return suggests a const propagation bug in g++. */
8150 if (ob && SvOBJECT(sv)) {
8151 char * const name = HvNAME_get(SvSTASH(sv));
8152 return name ? name : (char *) "__ANON__";
8155 switch (SvTYPE(sv)) {
8170 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
8171 /* tied lvalues should appear to be
8172 * scalars for backwards compatitbility */
8173 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
8174 ? "SCALAR" : "LVALUE");
8175 case SVt_PVAV: return "ARRAY";
8176 case SVt_PVHV: return "HASH";
8177 case SVt_PVCV: return "CODE";
8178 case SVt_PVGV: return (char *) (isGV_with_GP(sv)
8179 ? "GLOB" : "SCALAR");
8180 case SVt_PVFM: return "FORMAT";
8181 case SVt_PVIO: return "IO";
8182 case SVt_BIND: return "BIND";
8183 case SVt_REGEXP: return "REGEXP";
8184 default: return "UNKNOWN";
8190 =for apidoc sv_isobject
8192 Returns a boolean indicating whether the SV is an RV pointing to a blessed
8193 object. If the SV is not an RV, or if the object is not blessed, then this
8200 Perl_sv_isobject(pTHX_ SV *sv)
8216 Returns a boolean indicating whether the SV is blessed into the specified
8217 class. This does not check for subtypes; use C<sv_derived_from> to verify
8218 an inheritance relationship.
8224 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
8228 PERL_ARGS_ASSERT_SV_ISA;
8238 hvname = HvNAME_get(SvSTASH(sv));
8242 return strEQ(hvname, name);
8248 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
8249 it will be upgraded to one. If C<classname> is non-null then the new SV will
8250 be blessed in the specified package. The new SV is returned and its
8251 reference count is 1.
8257 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
8262 PERL_ARGS_ASSERT_NEWSVRV;
8266 SV_CHECK_THINKFIRST_COW_DROP(rv);
8267 (void)SvAMAGIC_off(rv);
8269 if (SvTYPE(rv) >= SVt_PVMG) {
8270 const U32 refcnt = SvREFCNT(rv);
8274 SvREFCNT(rv) = refcnt;
8276 sv_upgrade(rv, SVt_IV);
8277 } else if (SvROK(rv)) {
8278 SvREFCNT_dec(SvRV(rv));
8280 prepare_SV_for_RV(rv);
8288 HV* const stash = gv_stashpv(classname, GV_ADD);
8289 (void)sv_bless(rv, stash);
8295 =for apidoc sv_setref_pv
8297 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
8298 argument will be upgraded to an RV. That RV will be modified to point to
8299 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8300 into the SV. The C<classname> argument indicates the package for the
8301 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8302 will have a reference count of 1, and the RV will be returned.
8304 Do not use with other Perl types such as HV, AV, SV, CV, because those
8305 objects will become corrupted by the pointer copy process.
8307 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8313 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
8317 PERL_ARGS_ASSERT_SV_SETREF_PV;
8320 sv_setsv(rv, &PL_sv_undef);
8324 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
8329 =for apidoc sv_setref_iv
8331 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
8332 argument will be upgraded to an RV. That RV will be modified to point to
8333 the new SV. The C<classname> argument indicates the package for the
8334 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8335 will have a reference count of 1, and the RV will be returned.
8341 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
8343 PERL_ARGS_ASSERT_SV_SETREF_IV;
8345 sv_setiv(newSVrv(rv,classname), iv);
8350 =for apidoc sv_setref_uv
8352 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
8353 argument will be upgraded to an RV. That RV will be modified to point to
8354 the new SV. The C<classname> argument indicates the package for the
8355 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8356 will have a reference count of 1, and the RV will be returned.
8362 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
8364 PERL_ARGS_ASSERT_SV_SETREF_UV;
8366 sv_setuv(newSVrv(rv,classname), uv);
8371 =for apidoc sv_setref_nv
8373 Copies a double into a new SV, optionally blessing the SV. The C<rv>
8374 argument will be upgraded to an RV. That RV will be modified to point to
8375 the new SV. The C<classname> argument indicates the package for the
8376 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
8377 will have a reference count of 1, and the RV will be returned.
8383 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
8385 PERL_ARGS_ASSERT_SV_SETREF_NV;
8387 sv_setnv(newSVrv(rv,classname), nv);
8392 =for apidoc sv_setref_pvn
8394 Copies a string into a new SV, optionally blessing the SV. The length of the
8395 string must be specified with C<n>. The C<rv> argument will be upgraded to
8396 an RV. That RV will be modified to point to the new SV. The C<classname>
8397 argument indicates the package for the blessing. Set C<classname> to
8398 C<NULL> to avoid the blessing. The new SV will have a reference count
8399 of 1, and the RV will be returned.
8401 Note that C<sv_setref_pv> copies the pointer while this copies the string.
8407 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
8408 const char *const pv, const STRLEN n)
8410 PERL_ARGS_ASSERT_SV_SETREF_PVN;
8412 sv_setpvn(newSVrv(rv,classname), pv, n);
8417 =for apidoc sv_bless
8419 Blesses an SV into a specified package. The SV must be an RV. The package
8420 must be designated by its stash (see C<gv_stashpv()>). The reference count
8421 of the SV is unaffected.
8427 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
8432 PERL_ARGS_ASSERT_SV_BLESS;
8435 Perl_croak(aTHX_ "Can't bless non-reference value");
8437 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8438 if (SvIsCOW(tmpRef))
8439 sv_force_normal_flags(tmpRef, 0);
8440 if (SvREADONLY(tmpRef))
8441 Perl_croak(aTHX_ PL_no_modify);
8442 if (SvOBJECT(tmpRef)) {
8443 if (SvTYPE(tmpRef) != SVt_PVIO)
8445 SvREFCNT_dec(SvSTASH(tmpRef));
8448 SvOBJECT_on(tmpRef);
8449 if (SvTYPE(tmpRef) != SVt_PVIO)
8451 SvUPGRADE(tmpRef, SVt_PVMG);
8452 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc_simple(stash));
8457 (void)SvAMAGIC_off(sv);
8459 if(SvSMAGICAL(tmpRef))
8460 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8468 /* Downgrades a PVGV to a PVMG.
8472 S_sv_unglob(pTHX_ SV *const sv)
8477 SV * const temp = sv_newmortal();
8479 PERL_ARGS_ASSERT_SV_UNGLOB;
8481 assert(SvTYPE(sv) == SVt_PVGV);
8483 gv_efullname3(temp, (GV *) sv, "*");
8486 if(GvCVu((GV*)sv) && (stash = GvSTASH((GV*)sv)) && HvNAME_get(stash))
8487 mro_method_changed_in(stash);
8491 sv_del_backref((SV*)GvSTASH(sv), sv);
8495 if (GvNAME_HEK(sv)) {
8496 unshare_hek(GvNAME_HEK(sv));
8498 isGV_with_GP_off(sv);
8500 /* need to keep SvANY(sv) in the right arena */
8501 xpvmg = new_XPVMG();
8502 StructCopy(SvANY(sv), xpvmg, XPVMG);
8503 del_XPVGV(SvANY(sv));
8506 SvFLAGS(sv) &= ~SVTYPEMASK;
8507 SvFLAGS(sv) |= SVt_PVMG;
8509 /* Intentionally not calling any local SET magic, as this isn't so much a
8510 set operation as merely an internal storage change. */
8511 sv_setsv_flags(sv, temp, 0);
8515 =for apidoc sv_unref_flags
8517 Unsets the RV status of the SV, and decrements the reference count of
8518 whatever was being referenced by the RV. This can almost be thought of
8519 as a reversal of C<newSVrv>. The C<cflags> argument can contain
8520 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8521 (otherwise the decrementing is conditional on the reference count being
8522 different from one or the reference being a readonly SV).
8529 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
8531 SV* const target = SvRV(ref);
8533 PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
8535 if (SvWEAKREF(ref)) {
8536 sv_del_backref(target, ref);
8538 SvRV_set(ref, NULL);
8541 SvRV_set(ref, NULL);
8543 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
8544 assigned to as BEGIN {$a = \"Foo"} will fail. */
8545 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8546 SvREFCNT_dec(target);
8547 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8548 sv_2mortal(target); /* Schedule for freeing later */
8552 =for apidoc sv_untaint
8554 Untaint an SV. Use C<SvTAINTED_off> instead.
8559 Perl_sv_untaint(pTHX_ SV *const sv)
8561 PERL_ARGS_ASSERT_SV_UNTAINT;
8563 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8564 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8571 =for apidoc sv_tainted
8573 Test an SV for taintedness. Use C<SvTAINTED> instead.
8578 Perl_sv_tainted(pTHX_ SV *const sv)
8580 PERL_ARGS_ASSERT_SV_TAINTED;
8582 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8583 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8584 if (mg && (mg->mg_len & 1) )
8591 =for apidoc sv_setpviv
8593 Copies an integer into the given SV, also updating its string value.
8594 Does not handle 'set' magic. See C<sv_setpviv_mg>.
8600 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
8602 char buf[TYPE_CHARS(UV)];
8604 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8606 PERL_ARGS_ASSERT_SV_SETPVIV;
8608 sv_setpvn(sv, ptr, ebuf - ptr);
8612 =for apidoc sv_setpviv_mg
8614 Like C<sv_setpviv>, but also handles 'set' magic.
8620 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
8622 PERL_ARGS_ASSERT_SV_SETPVIV_MG;
8628 #if defined(PERL_IMPLICIT_CONTEXT)
8630 /* pTHX_ magic can't cope with varargs, so this is a no-context
8631 * version of the main function, (which may itself be aliased to us).
8632 * Don't access this version directly.
8636 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
8641 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
8643 va_start(args, pat);
8644 sv_vsetpvf(sv, pat, &args);
8648 /* pTHX_ magic can't cope with varargs, so this is a no-context
8649 * version of the main function, (which may itself be aliased to us).
8650 * Don't access this version directly.
8654 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
8659 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
8661 va_start(args, pat);
8662 sv_vsetpvf_mg(sv, pat, &args);
8668 =for apidoc sv_setpvf
8670 Works like C<sv_catpvf> but copies the text into the SV instead of
8671 appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
8677 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
8681 PERL_ARGS_ASSERT_SV_SETPVF;
8683 va_start(args, pat);
8684 sv_vsetpvf(sv, pat, &args);
8689 =for apidoc sv_vsetpvf
8691 Works like C<sv_vcatpvf> but copies the text into the SV instead of
8692 appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8694 Usually used via its frontend C<sv_setpvf>.
8700 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
8702 PERL_ARGS_ASSERT_SV_VSETPVF;
8704 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8708 =for apidoc sv_setpvf_mg
8710 Like C<sv_setpvf>, but also handles 'set' magic.
8716 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
8720 PERL_ARGS_ASSERT_SV_SETPVF_MG;
8722 va_start(args, pat);
8723 sv_vsetpvf_mg(sv, pat, &args);
8728 =for apidoc sv_vsetpvf_mg
8730 Like C<sv_vsetpvf>, but also handles 'set' magic.
8732 Usually used via its frontend C<sv_setpvf_mg>.
8738 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
8740 PERL_ARGS_ASSERT_SV_VSETPVF_MG;
8742 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8746 #if defined(PERL_IMPLICIT_CONTEXT)
8748 /* pTHX_ magic can't cope with varargs, so this is a no-context
8749 * version of the main function, (which may itself be aliased to us).
8750 * Don't access this version directly.
8754 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
8759 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
8761 va_start(args, pat);
8762 sv_vcatpvf(sv, pat, &args);
8766 /* pTHX_ magic can't cope with varargs, so this is a no-context
8767 * version of the main function, (which may itself be aliased to us).
8768 * Don't access this version directly.
8772 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
8777 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
8779 va_start(args, pat);
8780 sv_vcatpvf_mg(sv, pat, &args);
8786 =for apidoc sv_catpvf
8788 Processes its arguments like C<sprintf> and appends the formatted
8789 output to an SV. If the appended data contains "wide" characters
8790 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8791 and characters >255 formatted with %c), the original SV might get
8792 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
8793 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8794 valid UTF-8; if the original SV was bytes, the pattern should be too.
8799 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
8803 PERL_ARGS_ASSERT_SV_CATPVF;
8805 va_start(args, pat);
8806 sv_vcatpvf(sv, pat, &args);
8811 =for apidoc sv_vcatpvf
8813 Processes its arguments like C<vsprintf> and appends the formatted output
8814 to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8816 Usually used via its frontend C<sv_catpvf>.
8822 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
8824 PERL_ARGS_ASSERT_SV_VCATPVF;
8826 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8830 =for apidoc sv_catpvf_mg
8832 Like C<sv_catpvf>, but also handles 'set' magic.
8838 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
8842 PERL_ARGS_ASSERT_SV_CATPVF_MG;
8844 va_start(args, pat);
8845 sv_vcatpvf_mg(sv, pat, &args);
8850 =for apidoc sv_vcatpvf_mg
8852 Like C<sv_vcatpvf>, but also handles 'set' magic.
8854 Usually used via its frontend C<sv_catpvf_mg>.
8860 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
8862 PERL_ARGS_ASSERT_SV_VCATPVF_MG;
8864 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8869 =for apidoc sv_vsetpvfn
8871 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
8874 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
8880 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
8881 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
8883 PERL_ARGS_ASSERT_SV_VSETPVFN;
8885 sv_setpvn(sv, "", 0);
8886 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8890 S_expect_number(pTHX_ char **const pattern)
8895 PERL_ARGS_ASSERT_EXPECT_NUMBER;
8897 switch (**pattern) {
8898 case '1': case '2': case '3':
8899 case '4': case '5': case '6':
8900 case '7': case '8': case '9':
8901 var = *(*pattern)++ - '0';
8902 while (isDIGIT(**pattern)) {
8903 const I32 tmp = var * 10 + (*(*pattern)++ - '0');
8905 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
8913 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
8915 const int neg = nv < 0;
8918 PERL_ARGS_ASSERT_F0CONVERT;
8926 if (uv & 1 && uv == nv)
8927 uv--; /* Round to even */
8929 const unsigned dig = uv % 10;
8942 =for apidoc sv_vcatpvfn
8944 Processes its arguments like C<vsprintf> and appends the formatted output
8945 to an SV. Uses an array of SVs if the C style variable argument list is
8946 missing (NULL). When running with taint checks enabled, indicates via
8947 C<maybe_tainted> if results are untrustworthy (often due to the use of
8950 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
8956 #define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
8957 vecstr = (U8*)SvPV_const(vecsv,veclen);\
8958 vec_utf8 = DO_UTF8(vecsv);
8960 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8963 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
8964 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
8972 static const char nullstr[] = "(null)";
8974 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8975 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
8977 /* Times 4: a decimal digit takes more than 3 binary digits.
8978 * NV_DIG: mantissa takes than many decimal digits.
8979 * Plus 32: Playing safe. */
8980 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8981 /* large enough for "%#.#f" --chip */
8982 /* what about long double NVs? --jhi */
8984 PERL_ARGS_ASSERT_SV_VCATPVFN;
8985 PERL_UNUSED_ARG(maybe_tainted);
8987 /* no matter what, this is a string now */
8988 (void)SvPV_force(sv, origlen);
8990 /* special-case "", "%s", and "%-p" (SVf - see below) */
8993 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
8995 const char * const s = va_arg(*args, char*);
8996 sv_catpv(sv, s ? s : nullstr);
8998 else if (svix < svmax) {
8999 sv_catsv(sv, *svargs);
9003 if (args && patlen == 3 && pat[0] == '%' &&
9004 pat[1] == '-' && pat[2] == 'p') {
9005 argsv = (SV*)va_arg(*args, void*);
9006 sv_catsv(sv, argsv);
9010 #ifndef USE_LONG_DOUBLE
9011 /* special-case "%.<number>[gf]" */
9012 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
9013 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9014 unsigned digits = 0;
9018 while (*pp >= '0' && *pp <= '9')
9019 digits = 10 * digits + (*pp++ - '0');
9020 if (pp - pat == (int)patlen - 1) {
9028 /* Add check for digits != 0 because it seems that some
9029 gconverts are buggy in this case, and we don't yet have
9030 a Configure test for this. */
9031 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9032 /* 0, point, slack */
9033 Gconvert(nv, (int)digits, 0, ebuf);
9035 if (*ebuf) /* May return an empty string for digits==0 */
9038 } else if (!digits) {
9041 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9042 sv_catpvn(sv, p, l);
9048 #endif /* !USE_LONG_DOUBLE */
9050 if (!args && svix < svmax && DO_UTF8(*svargs))
9053 patend = (char*)pat + patlen;
9054 for (p = (char*)pat; p < patend; p = q) {
9057 bool vectorize = FALSE;
9058 bool vectorarg = FALSE;
9059 bool vec_utf8 = FALSE;
9065 bool has_precis = FALSE;
9067 const I32 osvix = svix;
9068 bool is_utf8 = FALSE; /* is this item utf8? */
9069 #ifdef HAS_LDBL_SPRINTF_BUG
9070 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9071 with sfio - Allen <allens@cpan.org> */
9072 bool fix_ldbl_sprintf_bug = FALSE;
9076 U8 utf8buf[UTF8_MAXBYTES+1];
9077 STRLEN esignlen = 0;
9079 const char *eptr = NULL;
9082 const U8 *vecstr = NULL;
9089 /* we need a long double target in case HAS_LONG_DOUBLE but
9092 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9100 const char *dotstr = ".";
9101 STRLEN dotstrlen = 1;
9102 I32 efix = 0; /* explicit format parameter index */
9103 I32 ewix = 0; /* explicit width index */
9104 I32 epix = 0; /* explicit precision index */
9105 I32 evix = 0; /* explicit vector index */
9106 bool asterisk = FALSE;
9108 /* echo everything up to the next format specification */
9109 for (q = p; q < patend && *q != '%'; ++q) ;
9111 if (has_utf8 && !pat_utf8)
9112 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9114 sv_catpvn(sv, p, q - p);
9121 We allow format specification elements in this order:
9122 \d+\$ explicit format parameter index
9124 v|\*(\d+\$)?v vector with optional (optionally specified) arg
9125 0 flag (as above): repeated to allow "v02"
9126 \d+|\*(\d+\$)? width using optional (optionally specified) arg
9127 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9129 [%bcdefginopsuxDFOUX] format (mandatory)
9134 As of perl5.9.3, printf format checking is on by default.
9135 Internally, perl uses %p formats to provide an escape to
9136 some extended formatting. This block deals with those
9137 extensions: if it does not match, (char*)q is reset and
9138 the normal format processing code is used.
9140 Currently defined extensions are:
9141 %p include pointer address (standard)
9142 %-p (SVf) include an SV (previously %_)
9143 %-<num>p include an SV with precision <num>
9144 %<num>p reserved for future extensions
9146 Robin Barker 2005-07-14
9148 %1p (VDf) removed. RMB 2007-10-19
9155 n = expect_number(&q);
9162 argsv = (SV*)va_arg(*args, void*);
9163 eptr = SvPV_const(argsv, elen);
9169 if (ckWARN_d(WARN_INTERNAL))
9170 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9171 "internal %%<num>p might conflict with future printf extensions");
9177 if ( (width = expect_number(&q)) ) {
9192 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9221 if ( (ewix = expect_number(&q)) )
9230 if ((vectorarg = asterisk)) {
9243 width = expect_number(&q);
9249 vecsv = va_arg(*args, SV*);
9251 vecsv = (evix > 0 && evix <= svmax)
9252 ? svargs[evix-1] : &PL_sv_undef;
9254 vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
9256 dotstr = SvPV_const(vecsv, dotstrlen);
9257 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
9258 bad with tied or overloaded values that return UTF8. */
9261 else if (has_utf8) {
9262 vecsv = sv_mortalcopy(vecsv);
9263 sv_utf8_upgrade(vecsv);
9264 dotstr = SvPV_const(vecsv, dotstrlen);
9271 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
9272 vecsv = svargs[efix ? efix-1 : svix++];
9273 vecstr = (U8*)SvPV_const(vecsv,veclen);
9274 vec_utf8 = DO_UTF8(vecsv);
9276 /* if this is a version object, we need to convert
9277 * back into v-string notation and then let the
9278 * vectorize happen normally
9280 if (sv_derived_from(vecsv, "version")) {
9281 char *version = savesvpv(vecsv);
9282 if ( hv_exists((HV*)SvRV(vecsv), "alpha", 5 ) ) {
9283 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9284 "vector argument not supported with alpha versions");
9287 vecsv = sv_newmortal();
9288 scan_vstring(version, version + veclen, vecsv);
9289 vecstr = (U8*)SvPV_const(vecsv, veclen);
9290 vec_utf8 = DO_UTF8(vecsv);
9302 i = va_arg(*args, int);
9304 i = (ewix ? ewix <= svmax : svix < svmax) ?
9305 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9307 width = (i < 0) ? -i : i;
9317 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
9319 /* XXX: todo, support specified precision parameter */
9323 i = va_arg(*args, int);
9325 i = (ewix ? ewix <= svmax : svix < svmax)
9326 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9328 has_precis = !(i < 0);
9333 precis = precis * 10 + (*q++ - '0');
9342 case 'I': /* Ix, I32x, and I64x */
9344 if (q[1] == '6' && q[2] == '4') {
9350 if (q[1] == '3' && q[2] == '2') {
9360 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9371 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9372 if (*(q + 1) == 'l') { /* lld, llf */
9398 if (!vectorize && !args) {
9400 const I32 i = efix-1;
9401 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
9403 argsv = (svix >= 0 && svix < svmax)
9404 ? svargs[svix++] : &PL_sv_undef;
9415 uv = (args) ? va_arg(*args, int) : SvIV(argsv);
9417 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
9419 eptr = (char*)utf8buf;
9420 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
9434 eptr = va_arg(*args, char*);
9436 #ifdef MACOS_TRADITIONAL
9437 /* On MacOS, %#s format is used for Pascal strings */
9442 elen = strlen(eptr);
9444 eptr = (char *)nullstr;
9445 elen = sizeof nullstr - 1;
9449 eptr = SvPV_const(argsv, elen);
9450 if (DO_UTF8(argsv)) {
9451 I32 old_precis = precis;
9452 if (has_precis && precis < elen) {
9454 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
9457 if (width) { /* fudge width (can't fudge elen) */
9458 if (has_precis && precis < elen)
9459 width += precis - old_precis;
9461 width += elen - sv_len_utf8(argsv);
9468 if (has_precis && elen > precis)
9475 if (alt || vectorize)
9477 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
9498 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9507 esignbuf[esignlen++] = plus;
9511 case 'h': iv = (short)va_arg(*args, int); break;
9512 case 'l': iv = va_arg(*args, long); break;
9513 case 'V': iv = va_arg(*args, IV); break;
9514 default: iv = va_arg(*args, int); break;
9516 case 'q': iv = va_arg(*args, Quad_t); break;
9521 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
9523 case 'h': iv = (short)tiv; break;
9524 case 'l': iv = (long)tiv; break;
9526 default: iv = tiv; break;
9528 case 'q': iv = (Quad_t)tiv; break;
9532 if ( !vectorize ) /* we already set uv above */
9537 esignbuf[esignlen++] = plus;
9541 esignbuf[esignlen++] = '-';
9585 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9596 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
9597 case 'l': uv = va_arg(*args, unsigned long); break;
9598 case 'V': uv = va_arg(*args, UV); break;
9599 default: uv = va_arg(*args, unsigned); break;
9601 case 'q': uv = va_arg(*args, Uquad_t); break;
9606 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
9608 case 'h': uv = (unsigned short)tuv; break;
9609 case 'l': uv = (unsigned long)tuv; break;
9611 default: uv = tuv; break;
9613 case 'q': uv = (Uquad_t)tuv; break;
9620 char *ptr = ebuf + sizeof ebuf;
9621 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
9627 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
9633 esignbuf[esignlen++] = '0';
9634 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9642 if (alt && *ptr != '0')
9651 esignbuf[esignlen++] = '0';
9652 esignbuf[esignlen++] = c;
9655 default: /* it had better be ten or less */
9659 } while (uv /= base);
9662 elen = (ebuf + sizeof ebuf) - ptr;
9666 zeros = precis - elen;
9667 else if (precis == 0 && elen == 1 && *eptr == '0'
9668 && !(base == 8 && alt)) /* "%#.0o" prints "0" */
9671 /* a precision nullifies the 0 flag. */
9678 /* FLOATING POINT */
9681 c = 'f'; /* maybe %F isn't supported here */
9689 /* This is evil, but floating point is even more evil */
9691 /* for SV-style calling, we can only get NV
9692 for C-style calling, we assume %f is double;
9693 for simplicity we allow any of %Lf, %llf, %qf for long double
9697 #if defined(USE_LONG_DOUBLE)
9701 /* [perl #20339] - we should accept and ignore %lf rather than die */
9705 #if defined(USE_LONG_DOUBLE)
9706 intsize = args ? 0 : 'q';
9710 #if defined(HAS_LONG_DOUBLE)
9719 /* now we need (long double) if intsize == 'q', else (double) */
9721 #if LONG_DOUBLESIZE > DOUBLESIZE
9723 va_arg(*args, long double) :
9724 va_arg(*args, double)
9726 va_arg(*args, double)
9731 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
9732 else. frexp() has some unspecified behaviour for those three */
9733 if (c != 'e' && c != 'E' && (nv * 0) == 0) {
9735 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9736 will cast our (long double) to (double) */
9737 (void)Perl_frexp(nv, &i);
9738 if (i == PERL_INT_MIN)
9739 Perl_die(aTHX_ "panic: frexp");
9741 need = BIT_DIGITS(i);
9743 need += has_precis ? precis : 6; /* known default */
9748 #ifdef HAS_LDBL_SPRINTF_BUG
9749 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9750 with sfio - Allen <allens@cpan.org> */
9753 # define MY_DBL_MAX DBL_MAX
9754 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9755 # if DOUBLESIZE >= 8
9756 # define MY_DBL_MAX 1.7976931348623157E+308L
9758 # define MY_DBL_MAX 3.40282347E+38L
9762 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9763 # define MY_DBL_MAX_BUG 1L
9765 # define MY_DBL_MAX_BUG MY_DBL_MAX
9769 # define MY_DBL_MIN DBL_MIN
9770 # else /* XXX guessing! -Allen */
9771 # if DOUBLESIZE >= 8
9772 # define MY_DBL_MIN 2.2250738585072014E-308L
9774 # define MY_DBL_MIN 1.17549435E-38L
9778 if ((intsize == 'q') && (c == 'f') &&
9779 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9781 /* it's going to be short enough that
9782 * long double precision is not needed */
9784 if ((nv <= 0L) && (nv >= -0L))
9785 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9787 /* would use Perl_fp_class as a double-check but not
9788 * functional on IRIX - see perl.h comments */
9790 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9791 /* It's within the range that a double can represent */
9792 #if defined(DBL_MAX) && !defined(DBL_MIN)
9793 if ((nv >= ((long double)1/DBL_MAX)) ||
9794 (nv <= (-(long double)1/DBL_MAX)))
9796 fix_ldbl_sprintf_bug = TRUE;
9799 if (fix_ldbl_sprintf_bug == TRUE) {
9809 # undef MY_DBL_MAX_BUG
9812 #endif /* HAS_LDBL_SPRINTF_BUG */
9814 need += 20; /* fudge factor */
9815 if (PL_efloatsize < need) {
9816 Safefree(PL_efloatbuf);
9817 PL_efloatsize = need + 20; /* more fudge */
9818 Newx(PL_efloatbuf, PL_efloatsize, char);
9819 PL_efloatbuf[0] = '\0';
9822 if ( !(width || left || plus || alt) && fill != '0'
9823 && has_precis && intsize != 'q' ) { /* Shortcuts */
9824 /* See earlier comment about buggy Gconvert when digits,
9826 if ( c == 'g' && precis) {
9827 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9828 /* May return an empty string for digits==0 */
9829 if (*PL_efloatbuf) {
9830 elen = strlen(PL_efloatbuf);
9831 goto float_converted;
9833 } else if ( c == 'f' && !precis) {
9834 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9839 char *ptr = ebuf + sizeof ebuf;
9842 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9843 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9844 if (intsize == 'q') {
9845 /* Copy the one or more characters in a long double
9846 * format before the 'base' ([efgEFG]) character to
9847 * the format string. */
9848 static char const prifldbl[] = PERL_PRIfldbl;
9849 char const *p = prifldbl + sizeof(prifldbl) - 3;
9850 while (p >= prifldbl) { *--ptr = *p--; }
9855 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9860 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9872 /* No taint. Otherwise we are in the strange situation
9873 * where printf() taints but print($float) doesn't.
9875 #if defined(HAS_LONG_DOUBLE)
9876 elen = ((intsize == 'q')
9877 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
9878 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9880 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9884 eptr = PL_efloatbuf;
9892 i = SvCUR(sv) - origlen;
9895 case 'h': *(va_arg(*args, short*)) = i; break;
9896 default: *(va_arg(*args, int*)) = i; break;
9897 case 'l': *(va_arg(*args, long*)) = i; break;
9898 case 'V': *(va_arg(*args, IV*)) = i; break;
9900 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9905 sv_setuv_mg(argsv, (UV)i);
9906 continue; /* not "break" */
9913 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
9914 && ckWARN(WARN_PRINTF))
9916 SV * const msg = sv_newmortal();
9917 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9918 (PL_op->op_type == OP_PRTF) ? "" : "s");
9921 Perl_sv_catpvf(aTHX_ msg,
9922 "\"%%%c\"", c & 0xFF);
9924 Perl_sv_catpvf(aTHX_ msg,
9925 "\"%%\\%03"UVof"\"",
9928 sv_catpvs(msg, "end of string");
9929 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
9932 /* output mangled stuff ... */
9938 /* ... right here, because formatting flags should not apply */
9939 SvGROW(sv, SvCUR(sv) + elen + 1);
9941 Copy(eptr, p, elen, char);
9944 SvCUR_set(sv, p - SvPVX_const(sv));
9946 continue; /* not "break" */
9949 if (is_utf8 != has_utf8) {
9952 sv_utf8_upgrade(sv);
9955 const STRLEN old_elen = elen;
9956 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
9957 sv_utf8_upgrade(nsv);
9958 eptr = SvPVX_const(nsv);
9961 if (width) { /* fudge width (can't fudge elen) */
9962 width += elen - old_elen;
9968 have = esignlen + zeros + elen;
9970 Perl_croak_nocontext(PL_memory_wrap);
9972 need = (have > width ? have : width);
9975 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
9976 Perl_croak_nocontext(PL_memory_wrap);
9977 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9979 if (esignlen && fill == '0') {
9981 for (i = 0; i < (int)esignlen; i++)
9985 memset(p, fill, gap);
9988 if (esignlen && fill != '0') {
9990 for (i = 0; i < (int)esignlen; i++)
9995 for (i = zeros; i; i--)
9999 Copy(eptr, p, elen, char);
10003 memset(p, ' ', gap);
10008 Copy(dotstr, p, dotstrlen, char);
10012 vectorize = FALSE; /* done iterating over vecstr */
10019 SvCUR_set(sv, p - SvPVX_const(sv));
10027 /* =========================================================================
10029 =head1 Cloning an interpreter
10031 All the macros and functions in this section are for the private use of
10032 the main function, perl_clone().
10034 The foo_dup() functions make an exact copy of an existing foo thingy.
10035 During the course of a cloning, a hash table is used to map old addresses
10036 to new addresses. The table is created and manipulated with the
10037 ptr_table_* functions.
10041 ============================================================================*/
10044 #if defined(USE_ITHREADS)
10046 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
10047 #ifndef GpREFCNT_inc
10048 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10052 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
10053 that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
10054 If this changes, please unmerge ss_dup. */
10055 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
10056 #define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup(s,t))
10057 #define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
10058 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10059 #define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
10060 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10061 #define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
10062 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10063 #define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
10064 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
10065 #define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
10066 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10067 #define SAVEPV(p) ((p) ? savepv(p) : NULL)
10068 #define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
10070 /* clone a parser */
10073 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
10077 PERL_ARGS_ASSERT_PARSER_DUP;
10082 /* look for it in the table first */
10083 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10087 /* create anew and remember what it is */
10088 Newxz(parser, 1, yy_parser);
10089 ptr_table_store(PL_ptr_table, proto, parser);
10091 parser->yyerrstatus = 0;
10092 parser->yychar = YYEMPTY; /* Cause a token to be read. */
10094 /* XXX these not yet duped */
10095 parser->old_parser = NULL;
10096 parser->stack = NULL;
10098 parser->stack_size = 0;
10099 /* XXX parser->stack->state = 0; */
10101 /* XXX eventually, just Copy() most of the parser struct ? */
10103 parser->lex_brackets = proto->lex_brackets;
10104 parser->lex_casemods = proto->lex_casemods;
10105 parser->lex_brackstack = savepvn(proto->lex_brackstack,
10106 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10107 parser->lex_casestack = savepvn(proto->lex_casestack,
10108 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10109 parser->lex_defer = proto->lex_defer;
10110 parser->lex_dojoin = proto->lex_dojoin;
10111 parser->lex_expect = proto->lex_expect;
10112 parser->lex_formbrack = proto->lex_formbrack;
10113 parser->lex_inpat = proto->lex_inpat;
10114 parser->lex_inwhat = proto->lex_inwhat;
10115 parser->lex_op = proto->lex_op;
10116 parser->lex_repl = sv_dup_inc(proto->lex_repl, param);
10117 parser->lex_starts = proto->lex_starts;
10118 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param);
10119 parser->multi_close = proto->multi_close;
10120 parser->multi_open = proto->multi_open;
10121 parser->multi_start = proto->multi_start;
10122 parser->multi_end = proto->multi_end;
10123 parser->pending_ident = proto->pending_ident;
10124 parser->preambled = proto->preambled;
10125 parser->sublex_info = proto->sublex_info; /* XXX not quite right */
10126 parser->linestr = sv_dup_inc(proto->linestr, param);
10127 parser->expect = proto->expect;
10128 parser->copline = proto->copline;
10129 parser->last_lop_op = proto->last_lop_op;
10130 parser->lex_state = proto->lex_state;
10131 parser->rsfp = fp_dup(proto->rsfp, '<', param);
10132 /* rsfp_filters entries have fake IoDIRP() */
10133 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
10134 parser->in_my = proto->in_my;
10135 parser->in_my_stash = hv_dup(proto->in_my_stash, param);
10136 parser->error_count = proto->error_count;
10139 parser->linestr = sv_dup_inc(proto->linestr, param);
10142 char * const ols = SvPVX(proto->linestr);
10143 char * const ls = SvPVX(parser->linestr);
10145 parser->bufptr = ls + (proto->bufptr >= ols ?
10146 proto->bufptr - ols : 0);
10147 parser->oldbufptr = ls + (proto->oldbufptr >= ols ?
10148 proto->oldbufptr - ols : 0);
10149 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10150 proto->oldoldbufptr - ols : 0);
10151 parser->linestart = ls + (proto->linestart >= ols ?
10152 proto->linestart - ols : 0);
10153 parser->last_uni = ls + (proto->last_uni >= ols ?
10154 proto->last_uni - ols : 0);
10155 parser->last_lop = ls + (proto->last_lop >= ols ?
10156 proto->last_lop - ols : 0);
10158 parser->bufend = ls + SvCUR(parser->linestr);
10161 Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10165 parser->endwhite = proto->endwhite;
10166 parser->faketokens = proto->faketokens;
10167 parser->lasttoke = proto->lasttoke;
10168 parser->nextwhite = proto->nextwhite;
10169 parser->realtokenstart = proto->realtokenstart;
10170 parser->skipwhite = proto->skipwhite;
10171 parser->thisclose = proto->thisclose;
10172 parser->thismad = proto->thismad;
10173 parser->thisopen = proto->thisopen;
10174 parser->thisstuff = proto->thisstuff;
10175 parser->thistoken = proto->thistoken;
10176 parser->thiswhite = proto->thiswhite;
10178 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10179 parser->curforce = proto->curforce;
10181 Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10182 Copy(proto->nexttype, parser->nexttype, 5, I32);
10183 parser->nexttoke = proto->nexttoke;
10189 /* duplicate a file handle */
10192 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
10196 PERL_ARGS_ASSERT_FP_DUP;
10197 PERL_UNUSED_ARG(type);
10200 return (PerlIO*)NULL;
10202 /* look for it in the table first */
10203 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10207 /* create anew and remember what it is */
10208 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
10209 ptr_table_store(PL_ptr_table, fp, ret);
10213 /* duplicate a directory handle */
10216 Perl_dirp_dup(pTHX_ DIR *const dp)
10218 PERL_UNUSED_CONTEXT;
10225 /* duplicate a typeglob */
10228 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
10232 PERL_ARGS_ASSERT_GP_DUP;
10236 /* look for it in the table first */
10237 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10241 /* create anew and remember what it is */
10243 ptr_table_store(PL_ptr_table, gp, ret);
10246 ret->gp_refcnt = 0; /* must be before any other dups! */
10247 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
10248 ret->gp_io = io_dup_inc(gp->gp_io, param);
10249 ret->gp_form = cv_dup_inc(gp->gp_form, param);
10250 ret->gp_av = av_dup_inc(gp->gp_av, param);
10251 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
10252 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10253 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
10254 ret->gp_cvgen = gp->gp_cvgen;
10255 ret->gp_line = gp->gp_line;
10256 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param);
10260 /* duplicate a chain of magic */
10263 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
10265 MAGIC *mgprev = (MAGIC*)NULL;
10268 PERL_ARGS_ASSERT_MG_DUP;
10271 return (MAGIC*)NULL;
10272 /* look for it in the table first */
10273 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
10277 for (; mg; mg = mg->mg_moremagic) {
10279 Newxz(nmg, 1, MAGIC);
10281 mgprev->mg_moremagic = nmg;
10284 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
10285 nmg->mg_private = mg->mg_private;
10286 nmg->mg_type = mg->mg_type;
10287 nmg->mg_flags = mg->mg_flags;
10288 /* FIXME for plugins
10289 if (mg->mg_type == PERL_MAGIC_qr) {
10290 nmg->mg_obj = (SV*)CALLREGDUPE((REGEXP*)mg->mg_obj, param);
10294 if(mg->mg_type == PERL_MAGIC_backref) {
10295 /* The backref AV has its reference count deliberately bumped by
10297 nmg->mg_obj = SvREFCNT_inc(av_dup_inc((AV*) mg->mg_obj, param));
10300 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
10301 ? sv_dup_inc(mg->mg_obj, param)
10302 : sv_dup(mg->mg_obj, param);
10304 nmg->mg_len = mg->mg_len;
10305 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
10306 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
10307 if (mg->mg_len > 0) {
10308 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
10309 if (mg->mg_type == PERL_MAGIC_overload_table &&
10310 AMT_AMAGIC((AMT*)mg->mg_ptr))
10312 const AMT * const amtp = (AMT*)mg->mg_ptr;
10313 AMT * const namtp = (AMT*)nmg->mg_ptr;
10315 for (i = 1; i < NofAMmeth; i++) {
10316 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
10320 else if (mg->mg_len == HEf_SVKEY)
10321 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
10323 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
10324 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10331 #endif /* USE_ITHREADS */
10333 /* create a new pointer-mapping table */
10336 Perl_ptr_table_new(pTHX)
10339 PERL_UNUSED_CONTEXT;
10341 Newxz(tbl, 1, PTR_TBL_t);
10342 tbl->tbl_max = 511;
10343 tbl->tbl_items = 0;
10344 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
10348 #define PTR_TABLE_HASH(ptr) \
10349 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
10352 we use the PTE_SVSLOT 'reservation' made above, both here (in the
10353 following define) and at call to new_body_inline made below in
10354 Perl_ptr_table_store()
10357 #define del_pte(p) del_body_type(p, PTE_SVSLOT)
10359 /* map an existing pointer using a table */
10361 STATIC PTR_TBL_ENT_t *
10362 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
10364 PTR_TBL_ENT_t *tblent;
10365 const UV hash = PTR_TABLE_HASH(sv);
10367 PERL_ARGS_ASSERT_PTR_TABLE_FIND;
10369 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10370 for (; tblent; tblent = tblent->next) {
10371 if (tblent->oldval == sv)
10378 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
10380 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
10382 PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
10383 PERL_UNUSED_CONTEXT;
10385 return tblent ? tblent->newval : NULL;
10388 /* add a new entry to a pointer-mapping table */
10391 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
10393 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
10395 PERL_ARGS_ASSERT_PTR_TABLE_STORE;
10396 PERL_UNUSED_CONTEXT;
10399 tblent->newval = newsv;
10401 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
10403 new_body_inline(tblent, PTE_SVSLOT);
10405 tblent->oldval = oldsv;
10406 tblent->newval = newsv;
10407 tblent->next = tbl->tbl_ary[entry];
10408 tbl->tbl_ary[entry] = tblent;
10410 if (tblent->next && tbl->tbl_items > tbl->tbl_max)
10411 ptr_table_split(tbl);
10415 /* double the hash bucket size of an existing ptr table */
10418 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
10420 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
10421 const UV oldsize = tbl->tbl_max + 1;
10422 UV newsize = oldsize * 2;
10425 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
10426 PERL_UNUSED_CONTEXT;
10428 Renew(ary, newsize, PTR_TBL_ENT_t*);
10429 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10430 tbl->tbl_max = --newsize;
10431 tbl->tbl_ary = ary;
10432 for (i=0; i < oldsize; i++, ary++) {
10433 PTR_TBL_ENT_t **curentp, **entp, *ent;
10436 curentp = ary + oldsize;
10437 for (entp = ary, ent = *ary; ent; ent = *entp) {
10438 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
10440 ent->next = *curentp;
10450 /* remove all the entries from a ptr table */
10453 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
10455 if (tbl && tbl->tbl_items) {
10456 register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
10457 UV riter = tbl->tbl_max;
10460 PTR_TBL_ENT_t *entry = array[riter];
10463 PTR_TBL_ENT_t * const oentry = entry;
10464 entry = entry->next;
10469 tbl->tbl_items = 0;
10473 /* clear and free a ptr table */
10476 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
10481 ptr_table_clear(tbl);
10482 Safefree(tbl->tbl_ary);
10486 #if defined(USE_ITHREADS)
10489 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
10491 PERL_ARGS_ASSERT_RVPV_DUP;
10494 SvRV_set(dstr, SvWEAKREF(sstr)
10495 ? sv_dup(SvRV(sstr), param)
10496 : sv_dup_inc(SvRV(sstr), param));
10499 else if (SvPVX_const(sstr)) {
10500 /* Has something there */
10502 /* Normal PV - clone whole allocated space */
10503 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
10504 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10505 /* Not that normal - actually sstr is copy on write.
10506 But we are a true, independant SV, so: */
10507 SvREADONLY_off(dstr);
10512 /* Special case - not normally malloced for some reason */
10513 if (isGV_with_GP(sstr)) {
10514 /* Don't need to do anything here. */
10516 else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
10517 /* A "shared" PV - clone it as "shared" PV */
10519 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
10523 /* Some other special case - random pointer */
10524 SvPV_set(dstr, SvPVX(sstr));
10529 /* Copy the NULL */
10530 SvPV_set(dstr, NULL);
10534 /* duplicate an SV of any type (including AV, HV etc) */
10537 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
10542 PERL_ARGS_ASSERT_SV_DUP;
10546 if (SvTYPE(sstr) == SVTYPEMASK) {
10547 #ifdef DEBUG_LEAKING_SCALARS_ABORT
10552 /* look for it in the table first */
10553 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
10557 if(param->flags & CLONEf_JOIN_IN) {
10558 /** We are joining here so we don't want do clone
10559 something that is bad **/
10560 if (SvTYPE(sstr) == SVt_PVHV) {
10561 const HEK * const hvname = HvNAME_HEK(sstr);
10563 /** don't clone stashes if they already exist **/
10564 return (SV*)gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0);
10568 /* create anew and remember what it is */
10571 #ifdef DEBUG_LEAKING_SCALARS
10572 dstr->sv_debug_optype = sstr->sv_debug_optype;
10573 dstr->sv_debug_line = sstr->sv_debug_line;
10574 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10575 dstr->sv_debug_cloned = 1;
10576 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
10579 ptr_table_store(PL_ptr_table, sstr, dstr);
10582 SvFLAGS(dstr) = SvFLAGS(sstr);
10583 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
10584 SvREFCNT(dstr) = 0; /* must be before any other dups! */
10587 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
10588 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10589 (void*)PL_watch_pvx, SvPVX_const(sstr));
10592 /* don't clone objects whose class has asked us not to */
10593 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10598 switch (SvTYPE(sstr)) {
10600 SvANY(dstr) = NULL;
10603 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
10605 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10607 SvIV_set(dstr, SvIVX(sstr));
10611 SvANY(dstr) = new_XNV();
10612 SvNV_set(dstr, SvNVX(sstr));
10614 /* case SVt_BIND: */
10617 /* These are all the types that need complex bodies allocating. */
10619 const svtype sv_type = SvTYPE(sstr);
10620 const struct body_details *const sv_type_details
10621 = bodies_by_type + sv_type;
10625 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
10629 if (GvUNIQUE((GV*)sstr)) {
10630 NOOP; /* Do sharing here, and fall through */
10643 assert(sv_type_details->body_size);
10644 if (sv_type_details->arena) {
10645 new_body_inline(new_body, sv_type);
10647 = (void*)((char*)new_body - sv_type_details->offset);
10649 new_body = new_NOARENA(sv_type_details);
10653 SvANY(dstr) = new_body;
10656 Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
10657 ((char*)SvANY(dstr)) + sv_type_details->offset,
10658 sv_type_details->copy, char);
10660 Copy(((char*)SvANY(sstr)),
10661 ((char*)SvANY(dstr)),
10662 sv_type_details->body_size + sv_type_details->offset, char);
10665 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
10666 && !isGV_with_GP(dstr))
10667 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10669 /* The Copy above means that all the source (unduplicated) pointers
10670 are now in the destination. We can check the flags and the
10671 pointers in either, but it's possible that there's less cache
10672 missing by always going for the destination.
10673 FIXME - instrument and check that assumption */
10674 if (sv_type >= SVt_PVMG) {
10675 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
10676 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
10677 } else if (SvMAGIC(dstr))
10678 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
10680 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
10683 /* The cast silences a GCC warning about unhandled types. */
10684 switch ((int)sv_type) {
10694 /* FIXME for plugins */
10695 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
10698 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
10699 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
10700 LvTARG(dstr) = dstr;
10701 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
10702 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
10704 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
10706 if(isGV_with_GP(sstr)) {
10707 if (GvNAME_HEK(dstr))
10708 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
10709 /* Don't call sv_add_backref here as it's going to be
10710 created as part of the magic cloning of the symbol
10712 /* Danger Will Robinson - GvGP(dstr) isn't initialised
10713 at the point of this comment. */
10714 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
10715 GvGP(dstr) = gp_dup(GvGP(sstr), param);
10716 (void)GpREFCNT_inc(GvGP(dstr));
10718 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10721 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
10722 if (IoOFP(dstr) == IoIFP(sstr))
10723 IoOFP(dstr) = IoIFP(dstr);
10725 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
10726 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
10727 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
10728 /* I have no idea why fake dirp (rsfps)
10729 should be treated differently but otherwise
10730 we end up with leaks -- sky*/
10731 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
10732 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
10733 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
10735 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
10736 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
10737 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
10738 if (IoDIRP(dstr)) {
10739 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
10742 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */
10745 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
10746 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
10747 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
10750 if (AvARRAY((AV*)sstr)) {
10751 SV **dst_ary, **src_ary;
10752 SSize_t items = AvFILLp((AV*)sstr) + 1;
10754 src_ary = AvARRAY((AV*)sstr);
10755 Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
10756 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10757 AvARRAY((AV*)dstr) = dst_ary;
10758 AvALLOC((AV*)dstr) = dst_ary;
10759 if (AvREAL((AV*)sstr)) {
10760 while (items-- > 0)
10761 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10764 while (items-- > 0)
10765 *dst_ary++ = sv_dup(*src_ary++, param);
10767 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10768 while (items-- > 0) {
10769 *dst_ary++ = &PL_sv_undef;
10773 AvARRAY((AV*)dstr) = NULL;
10774 AvALLOC((AV*)dstr) = (SV**)NULL;
10778 if (HvARRAY((HV*)sstr)) {
10780 const bool sharekeys = !!HvSHAREKEYS(sstr);
10781 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10782 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10784 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
10785 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
10787 HvARRAY(dstr) = (HE**)darray;
10788 while (i <= sxhv->xhv_max) {
10789 const HE * const source = HvARRAY(sstr)[i];
10790 HvARRAY(dstr)[i] = source
10791 ? he_dup(source, sharekeys, param) : 0;
10796 const struct xpvhv_aux * const saux = HvAUX(sstr);
10797 struct xpvhv_aux * const daux = HvAUX(dstr);
10798 /* This flag isn't copied. */
10799 /* SvOOK_on(hv) attacks the IV flags. */
10800 SvFLAGS(dstr) |= SVf_OOK;
10802 hvname = saux->xhv_name;
10803 daux->xhv_name = hvname ? hek_dup(hvname, param) : hvname;
10805 daux->xhv_riter = saux->xhv_riter;
10806 daux->xhv_eiter = saux->xhv_eiter
10807 ? he_dup(saux->xhv_eiter,
10808 (bool)!!HvSHAREKEYS(sstr), param) : 0;
10809 /* backref array needs refcnt=2; see sv_add_backref */
10810 daux->xhv_backreferences =
10811 saux->xhv_backreferences
10812 ? (AV*) SvREFCNT_inc(
10813 sv_dup_inc((SV*)saux->xhv_backreferences, param))
10816 daux->xhv_mro_meta = saux->xhv_mro_meta
10817 ? mro_meta_dup(saux->xhv_mro_meta, param)
10820 /* Record stashes for possible cloning in Perl_clone(). */
10822 av_push(param->stashes, dstr);
10826 HvARRAY((HV*)dstr) = NULL;
10829 if (!(param->flags & CLONEf_COPY_STACKS)) {
10833 /* NOTE: not refcounted */
10834 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
10836 if (!CvISXSUB(dstr))
10837 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
10839 if (CvCONST(dstr) && CvISXSUB(dstr)) {
10840 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
10841 SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
10842 sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
10844 /* don't dup if copying back - CvGV isn't refcounted, so the
10845 * duped GV may never be freed. A bit of a hack! DAPM */
10846 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
10847 NULL : gv_dup(CvGV(dstr), param) ;
10848 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10850 CvWEAKOUTSIDE(sstr)
10851 ? cv_dup( CvOUTSIDE(dstr), param)
10852 : cv_dup_inc(CvOUTSIDE(dstr), param);
10853 if (!CvISXSUB(dstr))
10854 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
10860 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10866 /* duplicate a context */
10869 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10871 PERL_CONTEXT *ncxs;
10873 PERL_ARGS_ASSERT_CX_DUP;
10876 return (PERL_CONTEXT*)NULL;
10878 /* look for it in the table first */
10879 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10883 /* create anew and remember what it is */
10884 Newx(ncxs, max + 1, PERL_CONTEXT);
10885 ptr_table_store(PL_ptr_table, cxs, ncxs);
10886 Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
10889 PERL_CONTEXT * const ncx = &ncxs[ix];
10890 if (CxTYPE(ncx) == CXt_SUBST) {
10891 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10894 switch (CxTYPE(ncx)) {
10896 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0
10897 ? cv_dup_inc(ncx->blk_sub.cv, param)
10898 : cv_dup(ncx->blk_sub.cv,param));
10899 ncx->blk_sub.argarray = (CxHASARGS(ncx)
10900 ? av_dup_inc(ncx->blk_sub.argarray,
10903 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,
10905 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
10906 ncx->blk_sub.oldcomppad);
10909 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
10911 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
10913 case CXt_LOOP_LAZYSV:
10914 ncx->blk_loop.state_u.lazysv.end
10915 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
10916 /* We are taking advantage of av_dup_inc and sv_dup_inc
10917 actually being the same function, and order equivalance of
10919 We can assert the later [but only at run time :-(] */
10920 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
10921 (void *) &ncx->blk_loop.state_u.lazysv.cur);
10923 ncx->blk_loop.state_u.ary.ary
10924 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
10925 case CXt_LOOP_LAZYIV:
10926 case CXt_LOOP_PLAIN:
10927 if (CxPADLOOP(ncx)) {
10928 ncx->blk_loop.oldcomppad
10929 = (PAD*)ptr_table_fetch(PL_ptr_table,
10930 ncx->blk_loop.oldcomppad);
10932 ncx->blk_loop.oldcomppad
10933 = (PAD*)gv_dup((GV*)ncx->blk_loop.oldcomppad, param);
10937 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param);
10938 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param);
10939 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
10952 /* duplicate a stack info structure */
10955 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
10959 PERL_ARGS_ASSERT_SI_DUP;
10962 return (PERL_SI*)NULL;
10964 /* look for it in the table first */
10965 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10969 /* create anew and remember what it is */
10970 Newxz(nsi, 1, PERL_SI);
10971 ptr_table_store(PL_ptr_table, si, nsi);
10973 nsi->si_stack = av_dup_inc(si->si_stack, param);
10974 nsi->si_cxix = si->si_cxix;
10975 nsi->si_cxmax = si->si_cxmax;
10976 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
10977 nsi->si_type = si->si_type;
10978 nsi->si_prev = si_dup(si->si_prev, param);
10979 nsi->si_next = si_dup(si->si_next, param);
10980 nsi->si_markoff = si->si_markoff;
10985 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10986 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
10987 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10988 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
10989 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10990 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
10991 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10992 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
10993 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10994 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10995 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10996 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10997 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10998 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11001 #define pv_dup_inc(p) SAVEPV(p)
11002 #define pv_dup(p) SAVEPV(p)
11003 #define svp_dup_inc(p,pp) any_dup(p,pp)
11005 /* map any object to the new equivent - either something in the
11006 * ptr table, or something in the interpreter structure
11010 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
11014 PERL_ARGS_ASSERT_ANY_DUP;
11017 return (void*)NULL;
11019 /* look for it in the table first */
11020 ret = ptr_table_fetch(PL_ptr_table, v);
11024 /* see if it is part of the interpreter structure */
11025 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
11026 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
11034 /* duplicate the save stack */
11037 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
11040 ANY * const ss = proto_perl->Isavestack;
11041 const I32 max = proto_perl->Isavestack_max;
11042 I32 ix = proto_perl->Isavestack_ix;
11055 void (*dptr) (void*);
11056 void (*dxptr) (pTHX_ void*);
11058 PERL_ARGS_ASSERT_SS_DUP;
11060 Newxz(nss, max, ANY);
11063 const I32 type = POPINT(ss,ix);
11064 TOPINT(nss,ix) = type;
11066 case SAVEt_HELEM: /* hash element */
11067 sv = (SV*)POPPTR(ss,ix);
11068 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11070 case SAVEt_ITEM: /* normal string */
11071 case SAVEt_SV: /* scalar reference */
11072 sv = (SV*)POPPTR(ss,ix);
11073 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11076 case SAVEt_MORTALIZESV:
11077 sv = (SV*)POPPTR(ss,ix);
11078 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11080 case SAVEt_SHARED_PVREF: /* char* in shared space */
11081 c = (char*)POPPTR(ss,ix);
11082 TOPPTR(nss,ix) = savesharedpv(c);
11083 ptr = POPPTR(ss,ix);
11084 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11086 case SAVEt_GENERIC_SVREF: /* generic sv */
11087 case SAVEt_SVREF: /* scalar reference */
11088 sv = (SV*)POPPTR(ss,ix);
11089 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11090 ptr = POPPTR(ss,ix);
11091 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11093 case SAVEt_HV: /* hash reference */
11094 case SAVEt_AV: /* array reference */
11095 sv = (SV*) POPPTR(ss,ix);
11096 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11098 case SAVEt_COMPPAD:
11100 sv = (SV*) POPPTR(ss,ix);
11101 TOPPTR(nss,ix) = sv_dup(sv, param);
11103 case SAVEt_INT: /* int reference */
11104 ptr = POPPTR(ss,ix);
11105 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11106 intval = (int)POPINT(ss,ix);
11107 TOPINT(nss,ix) = intval;
11109 case SAVEt_LONG: /* long reference */
11110 ptr = POPPTR(ss,ix);
11111 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11113 case SAVEt_CLEARSV:
11114 longval = (long)POPLONG(ss,ix);
11115 TOPLONG(nss,ix) = longval;
11117 case SAVEt_I32: /* I32 reference */
11118 case SAVEt_I16: /* I16 reference */
11119 case SAVEt_I8: /* I8 reference */
11120 case SAVEt_COP_ARYBASE: /* call CopARYBASE_set */
11121 ptr = POPPTR(ss,ix);
11122 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11124 TOPINT(nss,ix) = i;
11126 case SAVEt_IV: /* IV reference */
11127 ptr = POPPTR(ss,ix);
11128 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11130 TOPIV(nss,ix) = iv;
11132 case SAVEt_HPTR: /* HV* reference */
11133 case SAVEt_APTR: /* AV* reference */
11134 case SAVEt_SPTR: /* SV* reference */
11135 ptr = POPPTR(ss,ix);
11136 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11137 sv = (SV*)POPPTR(ss,ix);
11138 TOPPTR(nss,ix) = sv_dup(sv, param);
11140 case SAVEt_VPTR: /* random* reference */
11141 ptr = POPPTR(ss,ix);
11142 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11143 ptr = POPPTR(ss,ix);
11144 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11146 case SAVEt_GENERIC_PVREF: /* generic char* */
11147 case SAVEt_PPTR: /* char* reference */
11148 ptr = POPPTR(ss,ix);
11149 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11150 c = (char*)POPPTR(ss,ix);
11151 TOPPTR(nss,ix) = pv_dup(c);
11153 case SAVEt_GP: /* scalar reference */
11154 gp = (GP*)POPPTR(ss,ix);
11155 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
11156 (void)GpREFCNT_inc(gp);
11157 gv = (GV*)POPPTR(ss,ix);
11158 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11161 ptr = POPPTR(ss,ix);
11162 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11163 /* these are assumed to be refcounted properly */
11165 switch (((OP*)ptr)->op_type) {
11167 case OP_LEAVESUBLV:
11171 case OP_LEAVEWRITE:
11172 TOPPTR(nss,ix) = ptr;
11175 (void) OpREFCNT_inc(o);
11179 TOPPTR(nss,ix) = NULL;
11184 TOPPTR(nss,ix) = NULL;
11187 c = (char*)POPPTR(ss,ix);
11188 TOPPTR(nss,ix) = pv_dup_inc(c);
11191 hv = (HV*)POPPTR(ss,ix);
11192 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11193 c = (char*)POPPTR(ss,ix);
11194 TOPPTR(nss,ix) = pv_dup_inc(c);
11196 case SAVEt_STACK_POS: /* Position on Perl stack */
11198 TOPINT(nss,ix) = i;
11200 case SAVEt_DESTRUCTOR:
11201 ptr = POPPTR(ss,ix);
11202 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11203 dptr = POPDPTR(ss,ix);
11204 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11205 any_dup(FPTR2DPTR(void *, dptr),
11208 case SAVEt_DESTRUCTOR_X:
11209 ptr = POPPTR(ss,ix);
11210 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11211 dxptr = POPDXPTR(ss,ix);
11212 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11213 any_dup(FPTR2DPTR(void *, dxptr),
11216 case SAVEt_REGCONTEXT:
11219 TOPINT(nss,ix) = i;
11222 case SAVEt_AELEM: /* array element */
11223 sv = (SV*)POPPTR(ss,ix);
11224 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11226 TOPINT(nss,ix) = i;
11227 av = (AV*)POPPTR(ss,ix);
11228 TOPPTR(nss,ix) = av_dup_inc(av, param);
11231 ptr = POPPTR(ss,ix);
11232 TOPPTR(nss,ix) = ptr;
11236 TOPINT(nss,ix) = i;
11237 ptr = POPPTR(ss,ix);
11240 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
11241 HINTS_REFCNT_UNLOCK;
11243 TOPPTR(nss,ix) = ptr;
11244 if (i & HINT_LOCALIZE_HH) {
11245 hv = (HV*)POPPTR(ss,ix);
11246 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11249 case SAVEt_PADSV_AND_MORTALIZE:
11250 longval = (long)POPLONG(ss,ix);
11251 TOPLONG(nss,ix) = longval;
11252 ptr = POPPTR(ss,ix);
11253 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11254 sv = (SV*)POPPTR(ss,ix);
11255 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11258 ptr = POPPTR(ss,ix);
11259 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11260 longval = (long)POPBOOL(ss,ix);
11261 TOPBOOL(nss,ix) = (bool)longval;
11263 case SAVEt_SET_SVFLAGS:
11265 TOPINT(nss,ix) = i;
11267 TOPINT(nss,ix) = i;
11268 sv = (SV*)POPPTR(ss,ix);
11269 TOPPTR(nss,ix) = sv_dup(sv, param);
11271 case SAVEt_RE_STATE:
11273 const struct re_save_state *const old_state
11274 = (struct re_save_state *)
11275 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11276 struct re_save_state *const new_state
11277 = (struct re_save_state *)
11278 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11280 Copy(old_state, new_state, 1, struct re_save_state);
11281 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
11283 new_state->re_state_bostr
11284 = pv_dup(old_state->re_state_bostr);
11285 new_state->re_state_reginput
11286 = pv_dup(old_state->re_state_reginput);
11287 new_state->re_state_regeol
11288 = pv_dup(old_state->re_state_regeol);
11289 new_state->re_state_regoffs
11290 = (regexp_paren_pair*)
11291 any_dup(old_state->re_state_regoffs, proto_perl);
11292 new_state->re_state_reglastparen
11293 = (U32*) any_dup(old_state->re_state_reglastparen,
11295 new_state->re_state_reglastcloseparen
11296 = (U32*)any_dup(old_state->re_state_reglastcloseparen,
11298 /* XXX This just has to be broken. The old save_re_context
11299 code did SAVEGENERICPV(PL_reg_start_tmp);
11300 PL_reg_start_tmp is char **.
11301 Look above to what the dup code does for
11302 SAVEt_GENERIC_PVREF
11303 It can never have worked.
11304 So this is merely a faithful copy of the exiting bug: */
11305 new_state->re_state_reg_start_tmp
11306 = (char **) pv_dup((char *)
11307 old_state->re_state_reg_start_tmp);
11308 /* I assume that it only ever "worked" because no-one called
11309 (pseudo)fork while the regexp engine had re-entered itself.
11311 #ifdef PERL_OLD_COPY_ON_WRITE
11312 new_state->re_state_nrs
11313 = sv_dup(old_state->re_state_nrs, param);
11315 new_state->re_state_reg_magic
11316 = (MAGIC*) any_dup(old_state->re_state_reg_magic,
11318 new_state->re_state_reg_oldcurpm
11319 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm,
11321 new_state->re_state_reg_curpm
11322 = (PMOP*) any_dup(old_state->re_state_reg_curpm,
11324 new_state->re_state_reg_oldsaved
11325 = pv_dup(old_state->re_state_reg_oldsaved);
11326 new_state->re_state_reg_poscache
11327 = pv_dup(old_state->re_state_reg_poscache);
11328 new_state->re_state_reg_starttry
11329 = pv_dup(old_state->re_state_reg_starttry);
11332 case SAVEt_COMPILE_WARNINGS:
11333 ptr = POPPTR(ss,ix);
11334 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
11337 ptr = POPPTR(ss,ix);
11338 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
11342 "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
11350 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11351 * flag to the result. This is done for each stash before cloning starts,
11352 * so we know which stashes want their objects cloned */
11355 do_mark_cloneable_stash(pTHX_ SV *const sv)
11357 const HEK * const hvname = HvNAME_HEK((HV*)sv);
11359 GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
11360 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11361 if (cloner && GvCV(cloner)) {
11368 mXPUSHs(newSVhek(hvname));
11370 call_sv((SV*)GvCV(cloner), G_SCALAR);
11377 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11385 =for apidoc perl_clone
11387 Create and return a new interpreter by cloning the current one.
11389 perl_clone takes these flags as parameters:
11391 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11392 without it we only clone the data and zero the stacks,
11393 with it we copy the stacks and the new perl interpreter is
11394 ready to run at the exact same point as the previous one.
11395 The pseudo-fork code uses COPY_STACKS while the
11396 threads->create doesn't.
11398 CLONEf_KEEP_PTR_TABLE
11399 perl_clone keeps a ptr_table with the pointer of the old
11400 variable as a key and the new variable as a value,
11401 this allows it to check if something has been cloned and not
11402 clone it again but rather just use the value and increase the
11403 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11404 the ptr_table using the function
11405 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11406 reason to keep it around is if you want to dup some of your own
11407 variable who are outside the graph perl scans, example of this
11408 code is in threads.xs create
11411 This is a win32 thing, it is ignored on unix, it tells perls
11412 win32host code (which is c++) to clone itself, this is needed on
11413 win32 if you want to run two threads at the same time,
11414 if you just want to do some stuff in a separate perl interpreter
11415 and then throw it away and return to the original one,
11416 you don't need to do anything.
11421 /* XXX the above needs expanding by someone who actually understands it ! */
11422 EXTERN_C PerlInterpreter *
11423 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11426 perl_clone(PerlInterpreter *proto_perl, UV flags)
11429 #ifdef PERL_IMPLICIT_SYS
11431 PERL_ARGS_ASSERT_PERL_CLONE;
11433 /* perlhost.h so we need to call into it
11434 to clone the host, CPerlHost should have a c interface, sky */
11436 if (flags & CLONEf_CLONE_HOST) {
11437 return perl_clone_host(proto_perl,flags);
11439 return perl_clone_using(proto_perl, flags,
11441 proto_perl->IMemShared,
11442 proto_perl->IMemParse,
11444 proto_perl->IStdIO,
11448 proto_perl->IProc);
11452 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11453 struct IPerlMem* ipM, struct IPerlMem* ipMS,
11454 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11455 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11456 struct IPerlDir* ipD, struct IPerlSock* ipS,
11457 struct IPerlProc* ipP)
11459 /* XXX many of the string copies here can be optimized if they're
11460 * constants; they need to be allocated as common memory and just
11461 * their pointers copied. */
11464 CLONE_PARAMS clone_params;
11465 CLONE_PARAMS* const param = &clone_params;
11467 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
11469 PERL_ARGS_ASSERT_PERL_CLONE_USING;
11471 /* for each stash, determine whether its objects should be cloned */
11472 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11473 PERL_SET_THX(my_perl);
11476 PoisonNew(my_perl, 1, PerlInterpreter);
11482 PL_savestack_ix = 0;
11483 PL_savestack_max = -1;
11484 PL_sig_pending = 0;
11486 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11487 # else /* !DEBUGGING */
11488 Zero(my_perl, 1, PerlInterpreter);
11489 # endif /* DEBUGGING */
11491 /* host pointers */
11493 PL_MemShared = ipMS;
11494 PL_MemParse = ipMP;
11501 #else /* !PERL_IMPLICIT_SYS */
11503 CLONE_PARAMS clone_params;
11504 CLONE_PARAMS* param = &clone_params;
11505 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
11507 PERL_ARGS_ASSERT_PERL_CLONE;
11509 /* for each stash, determine whether its objects should be cloned */
11510 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11511 PERL_SET_THX(my_perl);
11514 PoisonNew(my_perl, 1, PerlInterpreter);
11520 PL_savestack_ix = 0;
11521 PL_savestack_max = -1;
11522 PL_sig_pending = 0;
11524 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11525 # else /* !DEBUGGING */
11526 Zero(my_perl, 1, PerlInterpreter);
11527 # endif /* DEBUGGING */
11528 #endif /* PERL_IMPLICIT_SYS */
11529 param->flags = flags;
11530 param->proto_perl = proto_perl;
11532 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
11534 PL_body_arenas = NULL;
11535 Zero(&PL_body_roots, 1, PL_body_roots);
11537 PL_nice_chunk = NULL;
11538 PL_nice_chunk_size = 0;
11540 PL_sv_objcount = 0;
11542 PL_sv_arenaroot = NULL;
11544 PL_debug = proto_perl->Idebug;
11546 PL_hash_seed = proto_perl->Ihash_seed;
11547 PL_rehash_seed = proto_perl->Irehash_seed;
11549 #ifdef USE_REENTRANT_API
11550 /* XXX: things like -Dm will segfault here in perlio, but doing
11551 * PERL_SET_CONTEXT(proto_perl);
11552 * breaks too many other things
11554 Perl_reentrant_init(aTHX);
11557 /* create SV map for pointer relocation */
11558 PL_ptr_table = ptr_table_new();
11560 /* initialize these special pointers as early as possible */
11561 SvANY(&PL_sv_undef) = NULL;
11562 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
11563 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
11564 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11566 SvANY(&PL_sv_no) = new_XPVNV();
11567 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
11568 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11569 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11570 SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
11571 SvCUR_set(&PL_sv_no, 0);
11572 SvLEN_set(&PL_sv_no, 1);
11573 SvIV_set(&PL_sv_no, 0);
11574 SvNV_set(&PL_sv_no, 0);
11575 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
11577 SvANY(&PL_sv_yes) = new_XPVNV();
11578 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
11579 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11580 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11581 SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
11582 SvCUR_set(&PL_sv_yes, 1);
11583 SvLEN_set(&PL_sv_yes, 2);
11584 SvIV_set(&PL_sv_yes, 1);
11585 SvNV_set(&PL_sv_yes, 1);
11586 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11588 /* create (a non-shared!) shared string table */
11589 PL_strtab = newHV();
11590 HvSHAREKEYS_off(PL_strtab);
11591 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11592 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11594 PL_compiling = proto_perl->Icompiling;
11596 /* These two PVs will be free'd special way so must set them same way op.c does */
11597 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11598 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11600 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
11601 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11603 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11604 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
11605 if (PL_compiling.cop_hints_hash) {
11607 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
11608 HINTS_REFCNT_UNLOCK;
11610 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
11611 #ifdef PERL_DEBUG_READONLY_OPS
11616 /* pseudo environmental stuff */
11617 PL_origargc = proto_perl->Iorigargc;
11618 PL_origargv = proto_perl->Iorigargv;
11620 param->stashes = newAV(); /* Setup array of objects to call clone on */
11622 /* Set tainting stuff before PerlIO_debug can possibly get called */
11623 PL_tainting = proto_perl->Itainting;
11624 PL_taint_warn = proto_perl->Itaint_warn;
11626 #ifdef PERLIO_LAYERS
11627 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11628 PerlIO_clone(aTHX_ proto_perl, param);
11631 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
11632 PL_incgv = gv_dup(proto_perl->Iincgv, param);
11633 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
11634 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
11635 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
11636 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
11639 PL_minus_c = proto_perl->Iminus_c;
11640 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
11641 PL_localpatches = proto_perl->Ilocalpatches;
11642 PL_splitstr = proto_perl->Isplitstr;
11643 PL_minus_n = proto_perl->Iminus_n;
11644 PL_minus_p = proto_perl->Iminus_p;
11645 PL_minus_l = proto_perl->Iminus_l;
11646 PL_minus_a = proto_perl->Iminus_a;
11647 PL_minus_E = proto_perl->Iminus_E;
11648 PL_minus_F = proto_perl->Iminus_F;
11649 PL_doswitches = proto_perl->Idoswitches;
11650 PL_dowarn = proto_perl->Idowarn;
11651 PL_doextract = proto_perl->Idoextract;
11652 PL_sawampersand = proto_perl->Isawampersand;
11653 PL_unsafe = proto_perl->Iunsafe;
11654 PL_inplace = SAVEPV(proto_perl->Iinplace);
11655 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
11656 PL_perldb = proto_perl->Iperldb;
11657 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11658 PL_exit_flags = proto_perl->Iexit_flags;
11660 /* magical thingies */
11661 /* XXX time(&PL_basetime) when asked for? */
11662 PL_basetime = proto_perl->Ibasetime;
11663 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
11665 PL_maxsysfd = proto_perl->Imaxsysfd;
11666 PL_statusvalue = proto_perl->Istatusvalue;
11668 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
11670 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
11672 PL_encoding = sv_dup(proto_perl->Iencoding, param);
11674 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
11675 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
11676 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
11679 /* RE engine related */
11680 Zero(&PL_reg_state, 1, struct re_save_state);
11681 PL_reginterp_cnt = 0;
11682 PL_regmatch_slab = NULL;
11684 /* Clone the regex array */
11685 /* ORANGE FIXME for plugins, probably in the SV dup code.
11686 newSViv(PTR2IV(CALLREGDUPE(
11687 INT2PTR(REGEXP *, SvIVX(regex)), param))))
11689 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
11690 PL_regex_pad = AvARRAY(PL_regex_padav);
11692 /* shortcuts to various I/O objects */
11693 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11694 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11695 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11696 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11697 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11698 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
11700 /* shortcuts to regexp stuff */
11701 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
11703 /* shortcuts to misc objects */
11704 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
11706 /* shortcuts to debugging objects */
11707 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
11708 PL_DBline = gv_dup(proto_perl->IDBline, param);
11709 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
11710 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
11711 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
11712 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
11713 PL_dbargs = av_dup(proto_perl->Idbargs, param);
11715 /* symbol tables */
11716 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param);
11717 PL_curstash = hv_dup(proto_perl->Icurstash, param);
11718 PL_debstash = hv_dup(proto_perl->Idebstash, param);
11719 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
11720 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
11722 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
11723 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
11724 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
11725 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param);
11726 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
11727 PL_endav = av_dup_inc(proto_perl->Iendav, param);
11728 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
11729 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
11731 PL_sub_generation = proto_perl->Isub_generation;
11732 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param);
11734 /* funky return mechanisms */
11735 PL_forkprocess = proto_perl->Iforkprocess;
11737 /* subprocess state */
11738 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
11740 /* internal state */
11741 PL_maxo = proto_perl->Imaxo;
11742 if (proto_perl->Iop_mask)
11743 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11746 /* PL_asserting = proto_perl->Iasserting; */
11748 /* current interpreter roots */
11749 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
11751 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
11753 PL_main_start = proto_perl->Imain_start;
11754 PL_eval_root = proto_perl->Ieval_root;
11755 PL_eval_start = proto_perl->Ieval_start;
11757 /* runtime control stuff */
11758 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11760 PL_filemode = proto_perl->Ifilemode;
11761 PL_lastfd = proto_perl->Ilastfd;
11762 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11765 PL_gensym = proto_perl->Igensym;
11766 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11767 PL_laststatval = proto_perl->Ilaststatval;
11768 PL_laststype = proto_perl->Ilaststype;
11771 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11773 /* interpreter atexit processing */
11774 PL_exitlistlen = proto_perl->Iexitlistlen;
11775 if (PL_exitlistlen) {
11776 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11777 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11780 PL_exitlist = (PerlExitListEntry*)NULL;
11782 PL_my_cxt_size = proto_perl->Imy_cxt_size;
11783 if (PL_my_cxt_size) {
11784 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
11785 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
11786 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
11787 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
11788 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
11792 PL_my_cxt_list = (void**)NULL;
11793 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
11794 PL_my_cxt_keys = (const char**)NULL;
11797 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
11798 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
11799 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11801 PL_profiledata = NULL;
11803 PL_compcv = cv_dup(proto_perl->Icompcv, param);
11805 PAD_CLONE_VARS(proto_perl, param);
11807 #ifdef HAVE_INTERP_INTERN
11808 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11811 /* more statics moved here */
11812 PL_generation = proto_perl->Igeneration;
11813 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
11815 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11816 PL_in_clean_all = proto_perl->Iin_clean_all;
11818 PL_uid = proto_perl->Iuid;
11819 PL_euid = proto_perl->Ieuid;
11820 PL_gid = proto_perl->Igid;
11821 PL_egid = proto_perl->Iegid;
11822 PL_nomemok = proto_perl->Inomemok;
11823 PL_an = proto_perl->Ian;
11824 PL_evalseq = proto_perl->Ievalseq;
11825 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11826 PL_origalen = proto_perl->Iorigalen;
11827 #ifdef PERL_USES_PL_PIDSTATUS
11828 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11830 PL_osname = SAVEPV(proto_perl->Iosname);
11831 PL_sighandlerp = proto_perl->Isighandlerp;
11833 PL_runops = proto_perl->Irunops;
11835 PL_parser = parser_dup(proto_perl->Iparser, param);
11837 PL_subline = proto_perl->Isubline;
11838 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
11841 PL_cryptseen = proto_perl->Icryptseen;
11844 PL_hints = proto_perl->Ihints;
11846 PL_amagic_generation = proto_perl->Iamagic_generation;
11848 #ifdef USE_LOCALE_COLLATE
11849 PL_collation_ix = proto_perl->Icollation_ix;
11850 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11851 PL_collation_standard = proto_perl->Icollation_standard;
11852 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11853 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11854 #endif /* USE_LOCALE_COLLATE */
11856 #ifdef USE_LOCALE_NUMERIC
11857 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11858 PL_numeric_standard = proto_perl->Inumeric_standard;
11859 PL_numeric_local = proto_perl->Inumeric_local;
11860 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11861 #endif /* !USE_LOCALE_NUMERIC */
11863 /* utf8 character classes */
11864 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11865 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11866 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11867 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11868 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11869 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11870 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11871 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11872 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11873 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11874 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11875 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11876 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11877 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11878 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11879 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11880 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11881 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11882 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11883 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11885 /* Did the locale setup indicate UTF-8? */
11886 PL_utf8locale = proto_perl->Iutf8locale;
11887 /* Unicode features (see perlrun/-C) */
11888 PL_unicode = proto_perl->Iunicode;
11890 /* Pre-5.8 signals control */
11891 PL_signals = proto_perl->Isignals;
11893 /* times() ticks per second */
11894 PL_clocktick = proto_perl->Iclocktick;
11896 /* Recursion stopper for PerlIO_find_layer */
11897 PL_in_load_module = proto_perl->Iin_load_module;
11899 /* sort() routine */
11900 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
11902 /* Not really needed/useful since the reenrant_retint is "volatile",
11903 * but do it for consistency's sake. */
11904 PL_reentrant_retint = proto_perl->Ireentrant_retint;
11906 /* Hooks to shared SVs and locks. */
11907 PL_sharehook = proto_perl->Isharehook;
11908 PL_lockhook = proto_perl->Ilockhook;
11909 PL_unlockhook = proto_perl->Iunlockhook;
11910 PL_threadhook = proto_perl->Ithreadhook;
11911 PL_destroyhook = proto_perl->Idestroyhook;
11913 #ifdef THREADS_HAVE_PIDS
11914 PL_ppid = proto_perl->Ippid;
11918 PL_last_swash_hv = NULL; /* reinits on demand */
11919 PL_last_swash_klen = 0;
11920 PL_last_swash_key[0]= '\0';
11921 PL_last_swash_tmps = (U8*)NULL;
11922 PL_last_swash_slen = 0;
11924 PL_glob_index = proto_perl->Iglob_index;
11925 PL_srand_called = proto_perl->Isrand_called;
11926 PL_bitcount = NULL; /* reinits on demand */
11928 if (proto_perl->Ipsig_pend) {
11929 Newxz(PL_psig_pend, SIG_SIZE, int);
11932 PL_psig_pend = (int*)NULL;
11935 if (proto_perl->Ipsig_ptr) {
11936 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
11937 Newxz(PL_psig_name, SIG_SIZE, SV*);
11938 for (i = 1; i < SIG_SIZE; i++) {
11939 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11940 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11944 PL_psig_ptr = (SV**)NULL;
11945 PL_psig_name = (SV**)NULL;
11948 /* intrpvar.h stuff */
11950 if (flags & CLONEf_COPY_STACKS) {
11951 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11952 PL_tmps_ix = proto_perl->Itmps_ix;
11953 PL_tmps_max = proto_perl->Itmps_max;
11954 PL_tmps_floor = proto_perl->Itmps_floor;
11955 Newxz(PL_tmps_stack, PL_tmps_max, SV*);
11957 while (i <= PL_tmps_ix) {
11958 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Itmps_stack[i], param);
11962 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11963 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
11964 Newxz(PL_markstack, i, I32);
11965 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max
11966 - proto_perl->Imarkstack);
11967 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr
11968 - proto_perl->Imarkstack);
11969 Copy(proto_perl->Imarkstack, PL_markstack,
11970 PL_markstack_ptr - PL_markstack + 1, I32);
11972 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11973 * NOTE: unlike the others! */
11974 PL_scopestack_ix = proto_perl->Iscopestack_ix;
11975 PL_scopestack_max = proto_perl->Iscopestack_max;
11976 Newxz(PL_scopestack, PL_scopestack_max, I32);
11977 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
11979 /* NOTE: si_dup() looks at PL_markstack */
11980 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param);
11982 /* PL_curstack = PL_curstackinfo->si_stack; */
11983 PL_curstack = av_dup(proto_perl->Icurstack, param);
11984 PL_mainstack = av_dup(proto_perl->Imainstack, param);
11986 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11987 PL_stack_base = AvARRAY(PL_curstack);
11988 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp
11989 - proto_perl->Istack_base);
11990 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
11992 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11993 * NOTE: unlike the others! */
11994 PL_savestack_ix = proto_perl->Isavestack_ix;
11995 PL_savestack_max = proto_perl->Isavestack_max;
11996 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
11997 PL_savestack = ss_dup(proto_perl, param);
12001 ENTER; /* perl_destruct() wants to LEAVE; */
12003 /* although we're not duplicating the tmps stack, we should still
12004 * add entries for any SVs on the tmps stack that got cloned by a
12005 * non-refcount means (eg a temp in @_); otherwise they will be
12008 for (i = 0; i<= proto_perl->Itmps_ix; i++) {
12009 SV * const nsv = (SV*)ptr_table_fetch(PL_ptr_table,
12010 proto_perl->Itmps_stack[i]);
12011 if (nsv && !SvREFCNT(nsv)) {
12013 PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple(nsv);
12018 PL_start_env = proto_perl->Istart_env; /* XXXXXX */
12019 PL_top_env = &PL_start_env;
12021 PL_op = proto_perl->Iop;
12024 PL_Xpv = (XPV*)NULL;
12025 my_perl->Ina = proto_perl->Ina;
12027 PL_statbuf = proto_perl->Istatbuf;
12028 PL_statcache = proto_perl->Istatcache;
12029 PL_statgv = gv_dup(proto_perl->Istatgv, param);
12030 PL_statname = sv_dup_inc(proto_perl->Istatname, param);
12032 PL_timesbuf = proto_perl->Itimesbuf;
12035 PL_tainted = proto_perl->Itainted;
12036 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */
12037 PL_rs = sv_dup_inc(proto_perl->Irs, param);
12038 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param);
12039 PL_ofs_sv = sv_dup_inc(proto_perl->Iofs_sv, param);
12040 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param);
12041 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */
12042 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param);
12043 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param);
12044 PL_formtarget = sv_dup(proto_perl->Iformtarget, param);
12046 PL_restartop = proto_perl->Irestartop;
12047 PL_in_eval = proto_perl->Iin_eval;
12048 PL_delaymagic = proto_perl->Idelaymagic;
12049 PL_dirty = proto_perl->Idirty;
12050 PL_localizing = proto_perl->Ilocalizing;
12052 PL_errors = sv_dup_inc(proto_perl->Ierrors, param);
12053 PL_hv_fetch_ent_mh = NULL;
12054 PL_modcount = proto_perl->Imodcount;
12055 PL_lastgotoprobe = NULL;
12056 PL_dumpindent = proto_perl->Idumpindent;
12058 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
12059 PL_sortstash = hv_dup(proto_perl->Isortstash, param);
12060 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param);
12061 PL_secondgv = gv_dup(proto_perl->Isecondgv, param);
12062 PL_efloatbuf = NULL; /* reinits on demand */
12063 PL_efloatsize = 0; /* reinits on demand */
12067 PL_screamfirst = NULL;
12068 PL_screamnext = NULL;
12069 PL_maxscream = -1; /* reinits on demand */
12070 PL_lastscream = NULL;
12073 PL_regdummy = proto_perl->Iregdummy;
12074 PL_colorset = 0; /* reinits PL_colors[] */
12075 /*PL_colors[6] = {0,0,0,0,0,0};*/
12079 /* Pluggable optimizer */
12080 PL_peepp = proto_perl->Ipeepp;
12082 PL_stashcache = newHV();
12084 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table,
12085 proto_perl->Iwatchaddr);
12086 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL;
12087 if (PL_debug && PL_watchaddr) {
12088 PerlIO_printf(Perl_debug_log,
12089 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
12090 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
12091 PTR2UV(PL_watchok));
12094 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12095 ptr_table_free(PL_ptr_table);
12096 PL_ptr_table = NULL;
12099 /* Call the ->CLONE method, if it exists, for each of the stashes
12100 identified by sv_dup() above.
12102 while(av_len(param->stashes) != -1) {
12103 HV* const stash = (HV*) av_shift(param->stashes);
12104 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12105 if (cloner && GvCV(cloner)) {
12110 mXPUSHs(newSVhek(HvNAME_HEK(stash)));
12112 call_sv((SV*)GvCV(cloner), G_DISCARD);
12118 SvREFCNT_dec(param->stashes);
12120 /* orphaned? eg threads->new inside BEGIN or use */
12121 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
12122 SvREFCNT_inc_simple_void(PL_compcv);
12123 SAVEFREESV(PL_compcv);
12129 #endif /* USE_ITHREADS */
12132 =head1 Unicode Support
12134 =for apidoc sv_recode_to_utf8
12136 The encoding is assumed to be an Encode object, on entry the PV
12137 of the sv is assumed to be octets in that encoding, and the sv
12138 will be converted into Unicode (and UTF-8).
12140 If the sv already is UTF-8 (or if it is not POK), or if the encoding
12141 is not a reference, nothing is done to the sv. If the encoding is not
12142 an C<Encode::XS> Encoding object, bad things will happen.
12143 (See F<lib/encoding.pm> and L<Encode>).
12145 The PV of the sv is returned.
12150 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12154 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
12156 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12170 Passing sv_yes is wrong - it needs to be or'ed set of constants
12171 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12172 remove converted chars from source.
12174 Both will default the value - let them.
12176 XPUSHs(&PL_sv_yes);
12179 call_method("decode", G_SCALAR);
12183 s = SvPV_const(uni, len);
12184 if (s != SvPVX_const(sv)) {
12185 SvGROW(sv, len + 1);
12186 Move(s, SvPVX(sv), len + 1, char);
12187 SvCUR_set(sv, len);
12194 return SvPOKp(sv) ? SvPVX(sv) : NULL;
12198 =for apidoc sv_cat_decode
12200 The encoding is assumed to be an Encode object, the PV of the ssv is
12201 assumed to be octets in that encoding and decoding the input starts
12202 from the position which (PV + *offset) pointed to. The dsv will be
12203 concatenated the decoded UTF-8 string from ssv. Decoding will terminate
12204 when the string tstr appears in decoding output or the input ends on
12205 the PV of the ssv. The value which the offset points will be modified
12206 to the last input position on the ssv.
12208 Returns TRUE if the terminator was found, else returns FALSE.
12213 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12214 SV *ssv, int *offset, char *tstr, int tlen)
12219 PERL_ARGS_ASSERT_SV_CAT_DECODE;
12221 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12232 offsv = newSViv(*offset);
12234 mXPUSHp(tstr, tlen);
12236 call_method("cat_decode", G_SCALAR);
12238 ret = SvTRUE(TOPs);
12239 *offset = SvIV(offsv);
12245 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12250 /* ---------------------------------------------------------------------
12252 * support functions for report_uninit()
12255 /* the maxiumum size of array or hash where we will scan looking
12256 * for the undefined element that triggered the warning */
12258 #define FUV_MAX_SEARCH_SIZE 1000
12260 /* Look for an entry in the hash whose value has the same SV as val;
12261 * If so, return a mortal copy of the key. */
12264 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
12267 register HE **array;
12270 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
12272 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
12273 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
12276 array = HvARRAY(hv);
12278 for (i=HvMAX(hv); i>0; i--) {
12279 register HE *entry;
12280 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
12281 if (HeVAL(entry) != val)
12283 if ( HeVAL(entry) == &PL_sv_undef ||
12284 HeVAL(entry) == &PL_sv_placeholder)
12288 if (HeKLEN(entry) == HEf_SVKEY)
12289 return sv_mortalcopy(HeKEY_sv(entry));
12290 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
12296 /* Look for an entry in the array whose value has the same SV as val;
12297 * If so, return the index, otherwise return -1. */
12300 S_find_array_subscript(pTHX_ AV *av, SV* val)
12304 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
12306 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
12307 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
12310 if (val != &PL_sv_undef) {
12311 SV ** const svp = AvARRAY(av);
12314 for (i=AvFILLp(av); i>=0; i--)
12321 /* S_varname(): return the name of a variable, optionally with a subscript.
12322 * If gv is non-zero, use the name of that global, along with gvtype (one
12323 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
12324 * targ. Depending on the value of the subscript_type flag, return:
12327 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
12328 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
12329 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
12330 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
12333 S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
12334 SV* keyname, I32 aindex, int subscript_type)
12337 SV * const name = sv_newmortal();
12340 buffer[0] = gvtype;
12343 /* as gv_fullname4(), but add literal '^' for $^FOO names */
12345 gv_fullname4(name, gv, buffer, 0);
12347 if ((unsigned int)SvPVX(name)[1] <= 26) {
12349 buffer[1] = SvPVX(name)[1] + 'A' - 1;
12351 /* Swap the 1 unprintable control character for the 2 byte pretty
12352 version - ie substr($name, 1, 1) = $buffer; */
12353 sv_insert(name, 1, 1, buffer, 2);
12357 CV * const cv = find_runcv(NULL);
12361 if (!cv || !CvPADLIST(cv))
12363 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
12364 sv = *av_fetch(av, targ, FALSE);
12365 sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
12368 if (subscript_type == FUV_SUBSCRIPT_HASH) {
12369 SV * const sv = newSV(0);
12370 *SvPVX(name) = '$';
12371 Perl_sv_catpvf(aTHX_ name, "{%s}",
12372 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
12375 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
12376 *SvPVX(name) = '$';
12377 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
12379 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
12380 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
12381 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0);
12389 =for apidoc find_uninit_var
12391 Find the name of the undefined variable (if any) that caused the operator o
12392 to issue a "Use of uninitialized value" warning.
12393 If match is true, only return a name if it's value matches uninit_sv.
12394 So roughly speaking, if a unary operator (such as OP_COS) generates a
12395 warning, then following the direct child of the op may yield an
12396 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
12397 other hand, with OP_ADD there are two branches to follow, so we only print
12398 the variable name if we get an exact match.
12400 The name is returned as a mortal SV.
12402 Assumes that PL_op is the op that originally triggered the error, and that
12403 PL_comppad/PL_curpad points to the currently executing pad.
12409 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
12417 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
12418 uninit_sv == &PL_sv_placeholder)))
12421 switch (obase->op_type) {
12428 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
12429 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
12432 int subscript_type = FUV_SUBSCRIPT_WITHIN;
12434 if (pad) { /* @lex, %lex */
12435 sv = PAD_SVl(obase->op_targ);
12439 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
12440 /* @global, %global */
12441 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
12444 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
12446 else /* @{expr}, %{expr} */
12447 return find_uninit_var(cUNOPx(obase)->op_first,
12451 /* attempt to find a match within the aggregate */
12453 keysv = find_hash_subscript((HV*)sv, uninit_sv);
12455 subscript_type = FUV_SUBSCRIPT_HASH;
12458 index = find_array_subscript((AV*)sv, uninit_sv);
12460 subscript_type = FUV_SUBSCRIPT_ARRAY;
12463 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
12466 return varname(gv, hash ? '%' : '@', obase->op_targ,
12467 keysv, index, subscript_type);
12471 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
12473 return varname(NULL, '$', obase->op_targ,
12474 NULL, 0, FUV_SUBSCRIPT_NONE);
12477 gv = cGVOPx_gv(obase);
12478 if (!gv || (match && GvSV(gv) != uninit_sv))
12480 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
12483 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
12486 av = (AV*)PAD_SV(obase->op_targ);
12487 if (!av || SvRMAGICAL(av))
12489 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12490 if (!svp || *svp != uninit_sv)
12493 return varname(NULL, '$', obase->op_targ,
12494 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12497 gv = cGVOPx_gv(obase);
12503 if (!av || SvRMAGICAL(av))
12505 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12506 if (!svp || *svp != uninit_sv)
12509 return varname(gv, '$', 0,
12510 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12515 o = cUNOPx(obase)->op_first;
12516 if (!o || o->op_type != OP_NULL ||
12517 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
12519 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
12523 if (PL_op == obase)
12524 /* $a[uninit_expr] or $h{uninit_expr} */
12525 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
12528 o = cBINOPx(obase)->op_first;
12529 kid = cBINOPx(obase)->op_last;
12531 /* get the av or hv, and optionally the gv */
12533 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
12534 sv = PAD_SV(o->op_targ);
12536 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
12537 && cUNOPo->op_first->op_type == OP_GV)
12539 gv = cGVOPx_gv(cUNOPo->op_first);
12542 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
12547 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
12548 /* index is constant */
12552 if (obase->op_type == OP_HELEM) {
12553 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
12554 if (!he || HeVAL(he) != uninit_sv)
12558 SV * const * const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
12559 if (!svp || *svp != uninit_sv)
12563 if (obase->op_type == OP_HELEM)
12564 return varname(gv, '%', o->op_targ,
12565 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
12567 return varname(gv, '@', o->op_targ, NULL,
12568 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
12571 /* index is an expression;
12572 * attempt to find a match within the aggregate */
12573 if (obase->op_type == OP_HELEM) {
12574 SV * const keysv = find_hash_subscript((HV*)sv, uninit_sv);
12576 return varname(gv, '%', o->op_targ,
12577 keysv, 0, FUV_SUBSCRIPT_HASH);
12580 const I32 index = find_array_subscript((AV*)sv, uninit_sv);
12582 return varname(gv, '@', o->op_targ,
12583 NULL, index, FUV_SUBSCRIPT_ARRAY);
12588 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
12590 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
12595 /* only examine RHS */
12596 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
12599 o = cUNOPx(obase)->op_first;
12600 if (o->op_type == OP_PUSHMARK)
12603 if (!o->op_sibling) {
12604 /* one-arg version of open is highly magical */
12606 if (o->op_type == OP_GV) { /* open FOO; */
12608 if (match && GvSV(gv) != uninit_sv)
12610 return varname(gv, '$', 0,
12611 NULL, 0, FUV_SUBSCRIPT_NONE);
12613 /* other possibilities not handled are:
12614 * open $x; or open my $x; should return '${*$x}'
12615 * open expr; should return '$'.expr ideally
12621 /* ops where $_ may be an implicit arg */
12625 if ( !(obase->op_flags & OPf_STACKED)) {
12626 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
12627 ? PAD_SVl(obase->op_targ)
12630 sv = sv_newmortal();
12631 sv_setpvn(sv, "$_", 2);
12640 match = 1; /* print etc can return undef on defined args */
12641 /* skip filehandle as it can't produce 'undef' warning */
12642 o = cUNOPx(obase)->op_first;
12643 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
12644 o = o->op_sibling->op_sibling;
12648 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
12650 case OP_CUSTOM: /* XS or custom code could trigger random warnings */
12652 /* the following ops are capable of returning PL_sv_undef even for
12653 * defined arg(s) */
12672 case OP_GETPEERNAME:
12720 case OP_SMARTMATCH:
12729 /* XXX tmp hack: these two may call an XS sub, and currently
12730 XS subs don't have a SUB entry on the context stack, so CV and
12731 pad determination goes wrong, and BAD things happen. So, just
12732 don't try to determine the value under those circumstances.
12733 Need a better fix at dome point. DAPM 11/2007 */
12738 /* def-ness of rval pos() is independent of the def-ness of its arg */
12739 if ( !(obase->op_flags & OPf_MOD))
12744 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
12745 return newSVpvs_flags("${$/}", SVs_TEMP);
12750 if (!(obase->op_flags & OPf_KIDS))
12752 o = cUNOPx(obase)->op_first;
12758 /* if all except one arg are constant, or have no side-effects,
12759 * or are optimized away, then it's unambiguous */
12761 for (kid=o; kid; kid = kid->op_sibling) {
12763 const OPCODE type = kid->op_type;
12764 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
12765 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
12766 || (type == OP_PUSHMARK)
12770 if (o2) { /* more than one found */
12777 return find_uninit_var(o2, uninit_sv, match);
12779 /* scan all args */
12781 sv = find_uninit_var(o, uninit_sv, 1);
12793 =for apidoc report_uninit
12795 Print appropriate "Use of uninitialized variable" warning
12801 Perl_report_uninit(pTHX_ SV* uninit_sv)
12805 SV* varname = NULL;
12807 varname = find_uninit_var(PL_op, uninit_sv,0);
12809 sv_insert(varname, 0, 0, " ", 1);
12811 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12812 varname ? SvPV_nolen_const(varname) : "",
12813 " in ", OP_DESC(PL_op));
12816 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12822 * c-indentation-style: bsd
12823 * c-basic-offset: 4
12824 * indent-tabs-mode: t
12827 * ex: set ts=8 sts=4 sw=4 noet: