3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 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 /* The cache element 0 is the Unicode offset;
34 * the cache element 1 is the byte offset of the element 0;
35 * the cache element 2 is the Unicode length of the substring;
36 * the cache element 3 is the byte length of the substring;
37 * The checking of the substring side would be good
38 * but substr() has enough code paths to make my head spin;
39 * if adding more checks watch out for the following tests:
40 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
41 * lib/utf8.t lib/Unicode/Collate/t/index.t
44 #define ASSERT_UTF8_CACHE(cache) \
45 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
47 #define ASSERT_UTF8_CACHE(cache) NOOP
50 #ifdef PERL_OLD_COPY_ON_WRITE
51 #define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
52 #define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
53 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
57 /* ============================================================================
59 =head1 Allocation and deallocation of SVs.
61 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct sv,
62 av, hv...) contains type and reference count information, as well as a
63 pointer to the body (struct xrv, xpv, xpviv...), which contains fields
64 specific to each type.
66 In all but the most memory-paranoid configuations (ex: PURIFY), this
67 allocation is done using arenas, which by default are approximately 4K
68 chunks of memory parcelled up into N heads or bodies (of same size).
69 Sv-bodies are allocated by their sv-type, guaranteeing size
70 consistency needed to allocate safely from arrays.
72 The first slot in each arena is reserved, and is used to hold a link
73 to the next arena. In the case of heads, the unused first slot also
74 contains some flags and a note of the number of slots. Snaked through
75 each arena chain is a linked list of free items; when this becomes
76 empty, an extra arena is allocated and divided up into N items which
77 are threaded into the free list.
79 The following global variables are associated with arenas:
81 PL_sv_arenaroot pointer to list of SV arenas
82 PL_sv_root pointer to list of free SV structures
84 PL_body_arenaroots[] array of pointers to list of arenas, 1 per svtype
85 PL_body_roots[] array of pointers to list of free bodies of svtype
86 arrays are indexed by the svtype needed
88 Note that some of the larger and more rarely used body types (eg
89 xpvio) are not allocated using arenas, but are instead just
90 malloc()/free()ed as required.
92 In addition, a few SV heads are not allocated from an arena, but are
93 instead directly created as static or auto variables, eg PL_sv_undef.
94 The size of arenas can be changed from the default by setting
95 PERL_ARENA_SIZE appropriately at compile time.
97 The SV arena serves the secondary purpose of allowing still-live SVs
98 to be located and destroyed during final cleanup.
100 At the lowest level, the macros new_SV() and del_SV() grab and free
101 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
102 to return the SV to the free list with error checking.) new_SV() calls
103 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
104 SVs in the free list have their SvTYPE field set to all ones.
106 Similarly, there are macros new_XIV()/del_XIV(), new_XNV()/del_XNV() etc
107 that allocate and return individual body types. Normally these are mapped
108 to the arena-manipulating functions new_xiv()/del_xiv() etc, but may be
109 instead mapped directly to malloc()/free() if PURIFY is defined. The
110 new/del functions remove from, or add to, the appropriate PL_foo_root
111 list, and call more_xiv() etc to add a new arena if the list is empty.
113 At the time of very final cleanup, sv_free_arenas() is called from
114 perl_destruct() to physically free all the arenas allocated since the
115 start of the interpreter. Note that this also clears PL_he_arenaroot,
116 which is otherwise dealt with in hv.c.
118 Manipulation of any of the PL_*root pointers is protected by enclosing
119 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
120 if threads are enabled.
122 The function visit() scans the SV arenas list, and calls a specified
123 function for each SV it finds which is still live - ie which has an SvTYPE
124 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
125 following functions (specified as [function that calls visit()] / [function
126 called by visit() for each SV]):
128 sv_report_used() / do_report_used()
129 dump all remaining SVs (debugging aid)
131 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
132 Attempt to free all objects pointed to by RVs,
133 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
134 try to do the same for all objects indirectly
135 referenced by typeglobs too. Called once from
136 perl_destruct(), prior to calling sv_clean_all()
139 sv_clean_all() / do_clean_all()
140 SvREFCNT_dec(sv) each remaining SV, possibly
141 triggering an sv_free(). It also sets the
142 SVf_BREAK flag on the SV to indicate that the
143 refcnt has been artificially lowered, and thus
144 stopping sv_free() from giving spurious warnings
145 about SVs which unexpectedly have a refcnt
146 of zero. called repeatedly from perl_destruct()
147 until there are no SVs left.
149 =head2 Arena allocator API Summary
151 Private API to rest of sv.c
155 new_XIV(), del_XIV(),
156 new_XNV(), del_XNV(),
161 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
166 ============================================================================ */
171 * "A time to plant, and a time to uproot what was planted..."
175 * nice_chunk and nice_chunk size need to be set
176 * and queried under the protection of sv_mutex
179 Perl_offer_nice_chunk(pTHX_ void *chunk, U32 chunk_size)
184 new_chunk = (void *)(chunk);
185 new_chunk_size = (chunk_size);
186 if (new_chunk_size > PL_nice_chunk_size) {
187 Safefree(PL_nice_chunk);
188 PL_nice_chunk = (char *) new_chunk;
189 PL_nice_chunk_size = new_chunk_size;
196 #ifdef DEBUG_LEAKING_SCALARS
197 # define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
199 # define FREE_SV_DEBUG_FILE(sv)
203 # define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
204 /* Whilst I'd love to do this, it seems that things like to check on
206 # define POSION_SV_HEAD(sv) Poison(sv, 1, struct STRUCT_SV)
208 # define POSION_SV_HEAD(sv) Poison(&SvANY(sv), 1, void *), \
209 Poison(&SvREFCNT(sv), 1, U32)
211 # define SvARENA_CHAIN(sv) SvANY(sv)
212 # define POSION_SV_HEAD(sv)
215 #define plant_SV(p) \
217 FREE_SV_DEBUG_FILE(p); \
219 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
220 SvFLAGS(p) = SVTYPEMASK; \
225 /* sv_mutex must be held while calling uproot_SV() */
226 #define uproot_SV(p) \
229 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
234 /* make some more SVs by adding another arena */
236 /* sv_mutex must be held while calling more_sv() */
243 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
244 PL_nice_chunk = Nullch;
245 PL_nice_chunk_size = 0;
248 char *chunk; /* must use New here to match call to */
249 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
250 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
256 /* new_SV(): return a new, empty SV head */
258 #ifdef DEBUG_LEAKING_SCALARS
259 /* provide a real function for a debugger to play with */
269 sv = S_more_sv(aTHX);
274 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
275 sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
276 (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
277 sv->sv_debug_inpad = 0;
278 sv->sv_debug_cloned = 0;
279 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
283 # define new_SV(p) (p)=S_new_SV(aTHX)
292 (p) = S_more_sv(aTHX); \
301 /* del_SV(): return an empty SV head to the free list */
316 S_del_sv(pTHX_ SV *p)
321 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
322 const SV * const sv = sva + 1;
323 const SV * const svend = &sva[SvREFCNT(sva)];
324 if (p >= sv && p < svend) {
330 if (ckWARN_d(WARN_INTERNAL))
331 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
332 "Attempt to free non-arena SV: 0x%"UVxf
333 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
340 #else /* ! DEBUGGING */
342 #define del_SV(p) plant_SV(p)
344 #endif /* DEBUGGING */
348 =head1 SV Manipulation Functions
350 =for apidoc sv_add_arena
352 Given a chunk of memory, link it to the head of the list of arenas,
353 and split it into a list of free SVs.
359 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
365 /* The first SV in an arena isn't an SV. */
366 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
367 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
368 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
370 PL_sv_arenaroot = sva;
371 PL_sv_root = sva + 1;
373 svend = &sva[SvREFCNT(sva) - 1];
376 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
380 /* Must always set typemask because it's awlays checked in on cleanup
381 when the arenas are walked looking for objects. */
382 SvFLAGS(sv) = SVTYPEMASK;
385 SvARENA_CHAIN(sv) = 0;
389 SvFLAGS(sv) = SVTYPEMASK;
392 /* visit(): call the named function for each non-free SV in the arenas
393 * whose flags field matches the flags/mask args. */
396 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
401 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
402 register const SV * const svend = &sva[SvREFCNT(sva)];
404 for (sv = sva + 1; sv < svend; ++sv) {
405 if (SvTYPE(sv) != SVTYPEMASK
406 && (sv->sv_flags & mask) == flags
419 /* called by sv_report_used() for each live SV */
422 do_report_used(pTHX_ SV *sv)
424 if (SvTYPE(sv) != SVTYPEMASK) {
425 PerlIO_printf(Perl_debug_log, "****\n");
432 =for apidoc sv_report_used
434 Dump the contents of all SVs not yet freed. (Debugging aid).
440 Perl_sv_report_used(pTHX)
443 visit(do_report_used, 0, 0);
447 /* called by sv_clean_objs() for each live SV */
450 do_clean_objs(pTHX_ SV *ref)
453 SV * const target = SvRV(ref);
454 if (SvOBJECT(target)) {
455 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
456 if (SvWEAKREF(ref)) {
457 sv_del_backref(target, ref);
463 SvREFCNT_dec(target);
468 /* XXX Might want to check arrays, etc. */
471 /* called by sv_clean_objs() for each live SV */
473 #ifndef DISABLE_DESTRUCTOR_KLUDGE
475 do_clean_named_objs(pTHX_ SV *sv)
477 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
479 #ifdef PERL_DONT_CREATE_GVSV
482 SvOBJECT(GvSV(sv))) ||
483 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
484 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
485 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
486 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
488 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
489 SvFLAGS(sv) |= SVf_BREAK;
497 =for apidoc sv_clean_objs
499 Attempt to destroy all objects not yet freed
505 Perl_sv_clean_objs(pTHX)
507 PL_in_clean_objs = TRUE;
508 visit(do_clean_objs, SVf_ROK, SVf_ROK);
509 #ifndef DISABLE_DESTRUCTOR_KLUDGE
510 /* some barnacles may yet remain, clinging to typeglobs */
511 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
513 PL_in_clean_objs = FALSE;
516 /* called by sv_clean_all() for each live SV */
519 do_clean_all(pTHX_ SV *sv)
521 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
522 SvFLAGS(sv) |= SVf_BREAK;
523 if (PL_comppad == (AV*)sv) {
525 PL_curpad = Null(SV**);
531 =for apidoc sv_clean_all
533 Decrement the refcnt of each remaining SV, possibly triggering a
534 cleanup. This function may have to be called multiple times to free
535 SVs which are in complex self-referential hierarchies.
541 Perl_sv_clean_all(pTHX)
544 PL_in_clean_all = TRUE;
545 cleaned = visit(do_clean_all, 0,0);
546 PL_in_clean_all = FALSE;
551 S_free_arena(pTHX_ void **root) {
553 void ** const next = *(void **)root;
560 =for apidoc sv_free_arenas
562 Deallocate the memory used by all arenas. Note that all the individual SV
563 heads and bodies within the arenas must already have been freed.
567 #define free_arena(name) \
569 S_free_arena(aTHX_ (void**) PL_ ## name ## _arenaroot); \
570 PL_ ## name ## _arenaroot = 0; \
571 PL_ ## name ## _root = 0; \
575 Perl_sv_free_arenas(pTHX)
581 /* Free arenas here, but be careful about fake ones. (We assume
582 contiguity of the fake ones with the corresponding real ones.) */
584 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
585 svanext = (SV*) SvANY(sva);
586 while (svanext && SvFAKE(svanext))
587 svanext = (SV*) SvANY(svanext);
593 for (i=0; i<SVt_LAST; i++) {
594 S_free_arena(aTHX_ (void**) PL_body_arenaroots[i]);
595 PL_body_arenaroots[i] = 0;
596 PL_body_roots[i] = 0;
601 Safefree(PL_nice_chunk);
602 PL_nice_chunk = Nullch;
603 PL_nice_chunk_size = 0;
608 /* ---------------------------------------------------------------------
610 * support functions for report_uninit()
613 /* the maxiumum size of array or hash where we will scan looking
614 * for the undefined element that triggered the warning */
616 #define FUV_MAX_SEARCH_SIZE 1000
618 /* Look for an entry in the hash whose value has the same SV as val;
619 * If so, return a mortal copy of the key. */
622 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
628 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
629 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
634 for (i=HvMAX(hv); i>0; i--) {
636 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
637 if (HeVAL(entry) != val)
639 if ( HeVAL(entry) == &PL_sv_undef ||
640 HeVAL(entry) == &PL_sv_placeholder)
644 if (HeKLEN(entry) == HEf_SVKEY)
645 return sv_mortalcopy(HeKEY_sv(entry));
646 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
652 /* Look for an entry in the array whose value has the same SV as val;
653 * If so, return the index, otherwise return -1. */
656 S_find_array_subscript(pTHX_ AV *av, SV* val)
660 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
661 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
665 for (i=AvFILLp(av); i>=0; i--) {
666 if (svp[i] == val && svp[i] != &PL_sv_undef)
672 /* S_varname(): return the name of a variable, optionally with a subscript.
673 * If gv is non-zero, use the name of that global, along with gvtype (one
674 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
675 * targ. Depending on the value of the subscript_type flag, return:
678 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
679 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
680 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
681 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
684 S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
685 SV* keyname, I32 aindex, int subscript_type)
688 SV * const name = sv_newmortal();
694 /* as gv_fullname4(), but add literal '^' for $^FOO names */
696 gv_fullname4(name, gv, buffer, 0);
698 if ((unsigned int)SvPVX(name)[1] <= 26) {
700 buffer[1] = SvPVX(name)[1] + 'A' - 1;
702 /* Swap the 1 unprintable control character for the 2 byte pretty
703 version - ie substr($name, 1, 1) = $buffer; */
704 sv_insert(name, 1, 1, buffer, 2);
709 CV * const cv = find_runcv(&unused);
713 if (!cv || !CvPADLIST(cv))
715 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
716 sv = *av_fetch(av, targ, FALSE);
717 /* SvLEN in a pad name is not to be trusted */
718 sv_setpv(name, SvPV_nolen_const(sv));
721 if (subscript_type == FUV_SUBSCRIPT_HASH) {
722 SV * const sv = NEWSV(0,0);
724 Perl_sv_catpvf(aTHX_ name, "{%s}",
725 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
728 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
730 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
732 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
733 sv_insert(name, 0, 0, "within ", 7);
740 =for apidoc find_uninit_var
742 Find the name of the undefined variable (if any) that caused the operator o
743 to issue a "Use of uninitialized value" warning.
744 If match is true, only return a name if it's value matches uninit_sv.
745 So roughly speaking, if a unary operator (such as OP_COS) generates a
746 warning, then following the direct child of the op may yield an
747 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
748 other hand, with OP_ADD there are two branches to follow, so we only print
749 the variable name if we get an exact match.
751 The name is returned as a mortal SV.
753 Assumes that PL_op is the op that originally triggered the error, and that
754 PL_comppad/PL_curpad points to the currently executing pad.
760 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
768 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
769 uninit_sv == &PL_sv_placeholder)))
772 switch (obase->op_type) {
779 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
780 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
783 int subscript_type = FUV_SUBSCRIPT_WITHIN;
785 if (pad) { /* @lex, %lex */
786 sv = PAD_SVl(obase->op_targ);
790 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
791 /* @global, %global */
792 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
795 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
797 else /* @{expr}, %{expr} */
798 return find_uninit_var(cUNOPx(obase)->op_first,
802 /* attempt to find a match within the aggregate */
804 keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
806 subscript_type = FUV_SUBSCRIPT_HASH;
809 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
811 subscript_type = FUV_SUBSCRIPT_ARRAY;
814 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
817 return varname(gv, hash ? '%' : '@', obase->op_targ,
818 keysv, index, subscript_type);
822 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
824 return varname(Nullgv, '$', obase->op_targ,
825 Nullsv, 0, FUV_SUBSCRIPT_NONE);
828 gv = cGVOPx_gv(obase);
829 if (!gv || (match && GvSV(gv) != uninit_sv))
831 return varname(gv, '$', 0, Nullsv, 0, FUV_SUBSCRIPT_NONE);
834 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
837 av = (AV*)PAD_SV(obase->op_targ);
838 if (!av || SvRMAGICAL(av))
840 svp = av_fetch(av, (I32)obase->op_private, FALSE);
841 if (!svp || *svp != uninit_sv)
844 return varname(Nullgv, '$', obase->op_targ,
845 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
848 gv = cGVOPx_gv(obase);
854 if (!av || SvRMAGICAL(av))
856 svp = av_fetch(av, (I32)obase->op_private, FALSE);
857 if (!svp || *svp != uninit_sv)
860 return varname(gv, '$', 0,
861 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
866 o = cUNOPx(obase)->op_first;
867 if (!o || o->op_type != OP_NULL ||
868 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
870 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
875 /* $a[uninit_expr] or $h{uninit_expr} */
876 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
879 o = cBINOPx(obase)->op_first;
880 kid = cBINOPx(obase)->op_last;
882 /* get the av or hv, and optionally the gv */
884 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
885 sv = PAD_SV(o->op_targ);
887 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
888 && cUNOPo->op_first->op_type == OP_GV)
890 gv = cGVOPx_gv(cUNOPo->op_first);
893 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
898 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
899 /* index is constant */
903 if (obase->op_type == OP_HELEM) {
904 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
905 if (!he || HeVAL(he) != uninit_sv)
909 SV ** const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
910 if (!svp || *svp != uninit_sv)
914 if (obase->op_type == OP_HELEM)
915 return varname(gv, '%', o->op_targ,
916 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
918 return varname(gv, '@', o->op_targ, Nullsv,
919 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
923 /* index is an expression;
924 * attempt to find a match within the aggregate */
925 if (obase->op_type == OP_HELEM) {
926 SV * const keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
928 return varname(gv, '%', o->op_targ,
929 keysv, 0, FUV_SUBSCRIPT_HASH);
932 const I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
934 return varname(gv, '@', o->op_targ,
935 Nullsv, index, FUV_SUBSCRIPT_ARRAY);
940 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
942 o->op_targ, Nullsv, 0, FUV_SUBSCRIPT_WITHIN);
948 /* only examine RHS */
949 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
952 o = cUNOPx(obase)->op_first;
953 if (o->op_type == OP_PUSHMARK)
956 if (!o->op_sibling) {
957 /* one-arg version of open is highly magical */
959 if (o->op_type == OP_GV) { /* open FOO; */
961 if (match && GvSV(gv) != uninit_sv)
963 return varname(gv, '$', 0,
964 Nullsv, 0, FUV_SUBSCRIPT_NONE);
966 /* other possibilities not handled are:
967 * open $x; or open my $x; should return '${*$x}'
968 * open expr; should return '$'.expr ideally
974 /* ops where $_ may be an implicit arg */
978 if ( !(obase->op_flags & OPf_STACKED)) {
979 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
980 ? PAD_SVl(obase->op_targ)
984 sv_setpvn(sv, "$_", 2);
992 /* skip filehandle as it can't produce 'undef' warning */
993 o = cUNOPx(obase)->op_first;
994 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
995 o = o->op_sibling->op_sibling;
1002 match = 1; /* XS or custom code could trigger random warnings */
1007 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
1008 return sv_2mortal(newSVpvn("${$/}", 5));
1013 if (!(obase->op_flags & OPf_KIDS))
1015 o = cUNOPx(obase)->op_first;
1021 /* if all except one arg are constant, or have no side-effects,
1022 * or are optimized away, then it's unambiguous */
1024 for (kid=o; kid; kid = kid->op_sibling) {
1026 ( (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
1027 || (kid->op_type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
1028 || (kid->op_type == OP_PUSHMARK)
1032 if (o2) { /* more than one found */
1039 return find_uninit_var(o2, uninit_sv, match);
1043 sv = find_uninit_var(o, uninit_sv, 1);
1055 =for apidoc report_uninit
1057 Print appropriate "Use of uninitialized variable" warning
1063 Perl_report_uninit(pTHX_ SV* uninit_sv)
1066 SV* varname = Nullsv;
1068 varname = find_uninit_var(PL_op, uninit_sv,0);
1070 sv_insert(varname, 0, 0, " ", 1);
1072 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1073 varname ? SvPV_nolen_const(varname) : "",
1074 " in ", OP_DESC(PL_op));
1077 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1082 Here are mid-level routines that manage the allocation of bodies out
1083 of the various arenas. There are 5 kinds of arenas:
1085 1. SV-head arenas, which are discussed and handled above
1086 2. regular body arenas
1087 3. arenas for reduced-size bodies
1088 4. Hash-Entry arenas
1089 5. pte arenas (thread related)
1091 Arena types 2 & 3 are chained by body-type off an array of
1092 arena-root pointers, which is indexed by svtype. Some of the
1093 larger/less used body types are malloced singly, since a large
1094 unused block of them is wasteful. Also, several svtypes dont have
1095 bodies; the data fits into the sv-head itself. The arena-root
1096 pointer thus has a few unused root-pointers (which may be hijacked
1097 later for arena types 4,5)
1099 3 differs from 2 as an optimization; some body types have several
1100 unused fields in the front of the structure (which are kept in-place
1101 for consistency). These bodies can be allocated in smaller chunks,
1102 because the leading fields arent accessed. Pointers to such bodies
1103 are decremented to point at the unused 'ghost' memory, knowing that
1104 the pointers are used with offsets to the real memory.
1106 HE, HEK arenas are managed separately, with separate code, but may
1107 be merge-able later..
1109 PTE arenas are not sv-bodies, but they share these mid-level
1110 mechanics, so are considered here. The new mid-level mechanics rely
1111 on the sv_type of the body being allocated, so we just reserve one
1112 of the unused body-slots for PTEs, then use it in those (2) PTE
1113 contexts below (line ~10k)
1117 S_more_bodies (pTHX_ size_t size, svtype sv_type)
1119 void **arena_root = &PL_body_arenaroots[sv_type];
1120 void **root = &PL_body_roots[sv_type];
1123 const size_t count = PERL_ARENA_SIZE / size;
1125 Newx(start, count*size, char);
1126 *((void **) start) = *arena_root;
1127 *arena_root = (void *)start;
1129 end = start + (count-1) * size;
1131 /* The initial slot is used to link the arenas together, so it isn't to be
1132 linked into the list of ready-to-use bodies. */
1136 *root = (void *)start;
1138 while (start < end) {
1139 char * const next = start + size;
1140 *(void**) start = (void *)next;
1143 *(void **)start = 0;
1148 /* grab a new thing from the free list, allocating more if necessary */
1150 /* 1st, the inline version */
1152 #define new_body_inline(xpv, root, size, sv_type) \
1155 xpv = *((void **)(root)) \
1156 ? *((void **)(root)) : S_more_bodies(aTHX_ size, sv_type); \
1157 *(root) = *(void**)(xpv); \
1161 /* now use the inline version in the proper function */
1165 /* This isn't being used with -DPURIFY, so don't declare it. Otherwise
1166 compilers issue warnings. */
1169 S_new_body(pTHX_ size_t size, svtype sv_type)
1172 new_body_inline(xpv, &PL_body_roots[sv_type], size, sv_type);
1178 /* return a thing to the free list */
1180 #define del_body(thing, root) \
1182 void **thing_copy = (void **)thing; \
1184 *thing_copy = *root; \
1185 *root = (void*)thing_copy; \
1190 Revisiting type 3 arenas, there are 4 body-types which have some
1191 members that are never accessed. They are XPV, XPVIV, XPVAV,
1192 XPVHV, which have corresponding types: xpv_allocated,
1193 xpviv_allocated, xpvav_allocated, xpvhv_allocated,
1195 For these types, the arenas are carved up into *_allocated size
1196 chunks, we thus avoid wasted memory for those unaccessed members.
1197 When bodies are allocated, we adjust the pointer back in memory by
1198 the size of the bit not allocated, so it's as if we allocated the
1199 full structure. (But things will all go boom if you write to the
1200 part that is "not there", because you'll be overwriting the last
1201 members of the preceding structure in memory.)
1203 We calculate the correction using the STRUCT_OFFSET macro. For example, if
1204 xpv_allocated is the same structure as XPV then the two OFFSETs sum to zero,
1205 and the pointer is unchanged. If the allocated structure is smaller (no
1206 initial NV actually allocated) then the net effect is to subtract the size
1207 of the NV from the pointer, to return a new pointer as if an initial NV were
1210 This is the same trick as was used for NV and IV bodies. Ironically it
1211 doesn't need to be used for NV bodies any more, because NV is now at the
1212 start of the structure. IV bodies don't need it either, because they are
1213 no longer allocated. */
1215 /* The following 2 arrays hide the above details in a pair of
1216 lookup-tables, allowing us to be body-type agnostic.
1218 size maps svtype to its body's allocated size.
1219 offset maps svtype to the body-pointer adjustment needed
1221 NB: elements in latter are 0 or <0, and are added during
1222 allocation, and subtracted during deallocation. It may be clearer
1223 to invert the values, and call it shrinkage_by_svtype.
1226 struct body_details {
1227 size_t size; /* Size to allocate */
1228 size_t copy; /* Size of structure to copy (may be shorter) */
1230 bool cant_upgrade; /* Can upgrade this type */
1231 bool zero_nv; /* zero the NV when upgrading from this */
1234 static const struct body_details bodies_by_type[] = {
1235 {0, 0, 0, FALSE, TRUE},
1236 /* IVs are in the head, so the allocation size is 0 */
1237 {0, sizeof(IV), -STRUCT_OFFSET(XPVIV, xiv_iv), FALSE, TRUE},
1238 /* 8 bytes on most ILP32 with IEEE doubles */
1239 {sizeof(NV), sizeof(NV), 0, FALSE, FALSE},
1240 /* RVs are in the head now */
1241 {0, 0, 0, FALSE, TRUE},
1242 /* 8 bytes on most ILP32 with IEEE doubles */
1243 {sizeof(xpv_allocated),
1244 STRUCT_OFFSET(XPV, xpv_len) + sizeof (((XPV*)SvANY((SV*)0))->xpv_len)
1245 + STRUCT_OFFSET(xpv_allocated, xpv_cur) - STRUCT_OFFSET(XPV, xpv_cur),
1246 + STRUCT_OFFSET(xpv_allocated, xpv_cur) - STRUCT_OFFSET(XPV, xpv_cur)
1249 {sizeof(xpviv_allocated),
1250 STRUCT_OFFSET(XPVIV, xiv_u) + sizeof (((XPVIV*)SvANY((SV*)0))->xiv_u)
1251 + STRUCT_OFFSET(xpviv_allocated, xpv_cur) - STRUCT_OFFSET(XPVIV, xpv_cur),
1252 + STRUCT_OFFSET(xpviv_allocated, xpv_cur) - STRUCT_OFFSET(XPVIV, xpv_cur)
1256 STRUCT_OFFSET(XPVNV, xiv_u) + sizeof (((XPVNV*)SvANY((SV*)0))->xiv_u),
1260 STRUCT_OFFSET(XPVMG, xmg_stash) + sizeof (((XPVMG*)SvANY((SV*)0))->xmg_stash),
1263 {sizeof(XPVBM), 0, 0, TRUE, FALSE},
1265 {sizeof(XPVGV), 0, 0, TRUE, FALSE},
1267 {sizeof(XPVLV), 0, 0, TRUE, FALSE},
1269 {sizeof(xpvav_allocated), 0,
1270 STRUCT_OFFSET(xpvav_allocated, xav_fill)
1271 - STRUCT_OFFSET(XPVAV, xav_fill), TRUE, FALSE},
1273 {sizeof(xpvhv_allocated), 0,
1274 STRUCT_OFFSET(xpvhv_allocated, xhv_fill)
1275 - STRUCT_OFFSET(XPVHV, xhv_fill), TRUE, FALSE},
1277 {sizeof(XPVCV), 0, 0, TRUE, FALSE},
1279 {sizeof(XPVFM), 0, 0, TRUE, FALSE},
1281 {sizeof(XPVIO), 0, 0, TRUE, FALSE}
1284 #define new_body_type(sv_type) \
1285 (void *)((char *)S_new_body(aTHX_ bodies_by_type[sv_type].size, sv_type)\
1286 + bodies_by_type[sv_type].offset)
1288 #define del_body_type(p, sv_type) \
1289 del_body(p, &PL_body_roots[sv_type])
1292 #define new_body_allocated(sv_type) \
1293 (void *)((char *)S_new_body(aTHX_ bodies_by_type[sv_type].size, sv_type)\
1294 + bodies_by_type[sv_type].offset)
1296 #define del_body_allocated(p, sv_type) \
1297 del_body(p - bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
1300 #define my_safemalloc(s) (void*)safemalloc(s)
1301 #define my_safefree(p) safefree((char*)p)
1305 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1306 #define del_XNV(p) my_safefree(p)
1308 #define new_XPV() my_safemalloc(sizeof(XPV))
1309 #define del_XPV(p) my_safefree(p)
1311 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1312 #define del_XPVIV(p) my_safefree(p)
1314 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1315 #define del_XPVNV(p) my_safefree(p)
1317 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1318 #define del_XPVCV(p) my_safefree(p)
1320 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1321 #define del_XPVAV(p) my_safefree(p)
1323 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1324 #define del_XPVHV(p) my_safefree(p)
1326 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1327 #define del_XPVMG(p) my_safefree(p)
1329 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1330 #define del_XPVGV(p) my_safefree(p)
1332 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1333 #define del_XPVLV(p) my_safefree(p)
1335 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1336 #define del_XPVBM(p) my_safefree(p)
1340 #define new_XNV() new_body_type(SVt_NV)
1341 #define del_XNV(p) del_body_type(p, SVt_NV)
1343 #define new_XPV() new_body_allocated(SVt_PV)
1344 #define del_XPV(p) del_body_allocated(p, SVt_PV)
1346 #define new_XPVIV() new_body_allocated(SVt_PVIV)
1347 #define del_XPVIV(p) del_body_allocated(p, SVt_PVIV)
1349 #define new_XPVNV() new_body_type(SVt_PVNV)
1350 #define del_XPVNV(p) del_body_type(p, SVt_PVNV)
1352 #define new_XPVCV() new_body_type(SVt_PVCV)
1353 #define del_XPVCV(p) del_body_type(p, SVt_PVCV)
1355 #define new_XPVAV() new_body_allocated(SVt_PVAV)
1356 #define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
1358 #define new_XPVHV() new_body_allocated(SVt_PVHV)
1359 #define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
1361 #define new_XPVMG() new_body_type(SVt_PVMG)
1362 #define del_XPVMG(p) del_body_type(p, SVt_PVMG)
1364 #define new_XPVGV() new_body_type(SVt_PVGV)
1365 #define del_XPVGV(p) del_body_type(p, SVt_PVGV)
1367 #define new_XPVLV() new_body_type(SVt_PVLV)
1368 #define del_XPVLV(p) del_body_type(p, SVt_PVLV)
1370 #define new_XPVBM() new_body_type(SVt_PVBM)
1371 #define del_XPVBM(p) del_body_type(p, SVt_PVBM)
1375 /* no arena for you! */
1376 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1377 #define del_XPVFM(p) my_safefree(p)
1379 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1380 #define del_XPVIO(p) my_safefree(p)
1385 =for apidoc sv_upgrade
1387 Upgrade an SV to a more complex form. Generally adds a new body type to the
1388 SV, then copies across as much information as possible from the old body.
1389 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1395 Perl_sv_upgrade(pTHX_ register SV *sv, U32 new_type)
1399 size_t new_body_length;
1400 size_t new_body_offset;
1401 void** new_body_arena;
1402 void** new_body_arenaroot;
1403 const U32 old_type = SvTYPE(sv);
1404 const struct body_details *const old_type_details
1405 = bodies_by_type + old_type;
1407 if (new_type != SVt_PV && SvIsCOW(sv)) {
1408 sv_force_normal_flags(sv, 0);
1411 if (old_type == new_type)
1414 if (old_type > new_type)
1415 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1416 (int)old_type, (int)new_type);
1419 old_body = SvANY(sv);
1420 new_body_offset = 0;
1421 new_body_length = ~0;
1423 /* Copying structures onto other structures that have been neatly zeroed
1424 has a subtle gotcha. Consider XPVMG
1426 +------+------+------+------+------+-------+-------+
1427 | NV | CUR | LEN | IV | MAGIC | STASH |
1428 +------+------+------+------+------+-------+-------+
1429 0 4 8 12 16 20 24 28
1431 where NVs are aligned to 8 bytes, so that sizeof that structure is
1432 actually 32 bytes long, with 4 bytes of padding at the end:
1434 +------+------+------+------+------+-------+-------+------+
1435 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1436 +------+------+------+------+------+-------+-------+------+
1437 0 4 8 12 16 20 24 28 32
1439 so what happens if you allocate memory for this structure:
1441 +------+------+------+------+------+-------+-------+------+------+...
1442 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1443 +------+------+------+------+------+-------+-------+------+------+...
1444 0 4 8 12 16 20 24 28 32 36
1446 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1447 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1448 started out as zero once, but it's quite possible that it isn't. So now,
1449 rather than a nicely zeroed GP, you have it pointing somewhere random.
1452 (In fact, GP ends up pointing at a previous GP structure, because the
1453 principle cause of the padding in XPVMG getting garbage is a copy of
1454 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob)
1456 So we are careful and work out the size of used parts of all the
1463 if (new_type < SVt_PVIV) {
1464 new_type = (new_type == SVt_NV)
1465 ? SVt_PVNV : SVt_PVIV;
1469 if (new_type < SVt_PVNV)
1470 new_type = SVt_PVNV;
1475 assert(new_type > SVt_PV);
1476 assert(SVt_IV < SVt_PV);
1477 assert(SVt_NV < SVt_PV);
1484 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1485 there's no way that it can be safely upgraded, because perl.c
1486 expects to Safefree(SvANY(PL_mess_sv)) */
1487 assert(sv != PL_mess_sv);
1488 /* This flag bit is used to mean other things in other scalar types.
1489 Given that it only has meaning inside the pad, it shouldn't be set
1490 on anything that can get upgraded. */
1491 assert((SvFLAGS(sv) & SVpad_TYPED) == 0);
1494 if (old_type_details->cant_upgrade)
1495 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1498 SvFLAGS(sv) &= ~SVTYPEMASK;
1499 SvFLAGS(sv) |= new_type;
1503 Perl_croak(aTHX_ "Can't upgrade to undef");
1505 assert(old_type == SVt_NULL);
1506 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1510 assert(old_type == SVt_NULL);
1511 SvANY(sv) = new_XNV();
1515 assert(old_type == SVt_NULL);
1516 SvANY(sv) = &sv->sv_u.svu_rv;
1520 SvANY(sv) = new_XPVHV();
1523 HvTOTALKEYS(sv) = 0;
1528 SvANY(sv) = new_XPVAV();
1535 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1536 The target created by newSVrv also is, and it can have magic.
1537 However, it never has SvPVX set.
1539 if (old_type >= SVt_RV) {
1540 assert(SvPVX_const(sv) == 0);
1543 /* Could put this in the else clause below, as PVMG must have SvPVX
1544 0 already (the assertion above) */
1545 SvPV_set(sv, (char*)0);
1547 if (old_type >= SVt_PVMG) {
1548 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_magic);
1549 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1557 new_body = new_XPVIO();
1558 new_body_length = sizeof(XPVIO);
1561 new_body = new_XPVFM();
1562 new_body_length = sizeof(XPVFM);
1571 new_body_length = bodies_by_type[new_type].size;
1572 new_body_arena = &PL_body_roots[new_type];
1573 new_body_arenaroot = &PL_body_arenaroots[new_type];
1577 new_body_offset = - bodies_by_type[SVt_PVIV].offset;
1578 new_body_length = sizeof(XPVIV) - new_body_offset;
1579 new_body_arena = &PL_body_roots[SVt_PVIV];
1580 new_body_arenaroot = &PL_body_arenaroots[SVt_PVIV];
1581 /* XXX Is this still needed? Was it ever needed? Surely as there is
1582 no route from NV to PVIV, NOK can never be true */
1583 assert(!SvNOKp(sv));
1585 goto new_body_no_NV;
1587 new_body_offset = - bodies_by_type[SVt_PV].offset;
1588 new_body_length = sizeof(XPV) - new_body_offset;
1589 new_body_arena = &PL_body_roots[SVt_PV];
1590 new_body_arenaroot = &PL_body_arenaroots[SVt_PV];
1592 /* PV and PVIV don't have an NV slot. */
1595 assert(new_body_length);
1597 /* This points to the start of the allocated area. */
1598 new_body_inline(new_body, new_body_arena, new_body_length, new_type);
1600 /* We always allocated the full length item with PURIFY */
1601 new_body_length += new_body_offset;
1602 new_body_offset = 0;
1603 new_body = my_safemalloc(new_body_length);
1607 Zero(new_body, new_body_length, char);
1608 new_body = ((char *)new_body) - new_body_offset;
1609 SvANY(sv) = new_body;
1611 if (old_type_details->copy) {
1612 Copy((char *)old_body - old_type_details->offset,
1613 (char *)new_body - old_type_details->offset,
1614 old_type_details->copy, char);
1617 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1618 /* If NV 0.0 is store as all bits 0 then Zero() already creates a correct
1620 if (old_type_details->zero_nv)
1624 if (new_type == SVt_PVIO)
1625 IoPAGE_LEN(sv) = 60;
1626 if (old_type < SVt_RV)
1630 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu", new_type);
1633 if (old_type_details->size) {
1634 /* If the old body had an allocated size, then we need to free it. */
1636 my_safefree(old_body);
1638 del_body((void*)((char*)old_body - old_type_details->offset),
1639 &PL_body_roots[old_type]);
1645 =for apidoc sv_backoff
1647 Remove any string offset. You should normally use the C<SvOOK_off> macro
1654 Perl_sv_backoff(pTHX_ register SV *sv)
1657 assert(SvTYPE(sv) != SVt_PVHV);
1658 assert(SvTYPE(sv) != SVt_PVAV);
1660 const char * const s = SvPVX_const(sv);
1661 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1662 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1664 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1666 SvFLAGS(sv) &= ~SVf_OOK;
1673 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1674 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1675 Use the C<SvGROW> wrapper instead.
1681 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1685 #ifdef HAS_64K_LIMIT
1686 if (newlen >= 0x10000) {
1687 PerlIO_printf(Perl_debug_log,
1688 "Allocation too large: %"UVxf"\n", (UV)newlen);
1691 #endif /* HAS_64K_LIMIT */
1694 if (SvTYPE(sv) < SVt_PV) {
1695 sv_upgrade(sv, SVt_PV);
1696 s = SvPVX_mutable(sv);
1698 else if (SvOOK(sv)) { /* pv is offset? */
1700 s = SvPVX_mutable(sv);
1701 if (newlen > SvLEN(sv))
1702 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1703 #ifdef HAS_64K_LIMIT
1704 if (newlen >= 0x10000)
1709 s = SvPVX_mutable(sv);
1711 if (newlen > SvLEN(sv)) { /* need more room? */
1712 newlen = PERL_STRLEN_ROUNDUP(newlen);
1713 if (SvLEN(sv) && s) {
1715 const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1721 s = saferealloc(s, newlen);
1724 s = safemalloc(newlen);
1725 if (SvPVX_const(sv) && SvCUR(sv)) {
1726 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1730 SvLEN_set(sv, newlen);
1736 =for apidoc sv_setiv
1738 Copies an integer into the given SV, upgrading first if necessary.
1739 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1745 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1747 SV_CHECK_THINKFIRST_COW_DROP(sv);
1748 switch (SvTYPE(sv)) {
1750 sv_upgrade(sv, SVt_IV);
1753 sv_upgrade(sv, SVt_PVNV);
1757 sv_upgrade(sv, SVt_PVIV);
1766 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1769 (void)SvIOK_only(sv); /* validate number */
1775 =for apidoc sv_setiv_mg
1777 Like C<sv_setiv>, but also handles 'set' magic.
1783 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1790 =for apidoc sv_setuv
1792 Copies an unsigned integer into the given SV, upgrading first if necessary.
1793 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1799 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1801 /* With these two if statements:
1802 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1805 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1807 If you wish to remove them, please benchmark to see what the effect is
1809 if (u <= (UV)IV_MAX) {
1810 sv_setiv(sv, (IV)u);
1819 =for apidoc sv_setuv_mg
1821 Like C<sv_setuv>, but also handles 'set' magic.
1827 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1836 =for apidoc sv_setnv
1838 Copies a double into the given SV, upgrading first if necessary.
1839 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1845 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1847 SV_CHECK_THINKFIRST_COW_DROP(sv);
1848 switch (SvTYPE(sv)) {
1851 sv_upgrade(sv, SVt_NV);
1856 sv_upgrade(sv, SVt_PVNV);
1865 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1869 (void)SvNOK_only(sv); /* validate number */
1874 =for apidoc sv_setnv_mg
1876 Like C<sv_setnv>, but also handles 'set' magic.
1882 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1888 /* Print an "isn't numeric" warning, using a cleaned-up,
1889 * printable version of the offending string
1893 S_not_a_number(pTHX_ SV *sv)
1900 dsv = sv_2mortal(newSVpvn("", 0));
1901 pv = sv_uni_display(dsv, sv, 10, 0);
1904 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1905 /* each *s can expand to 4 chars + "...\0",
1906 i.e. need room for 8 chars */
1908 const char *s, *end;
1909 for (s = SvPVX_const(sv), end = s + SvCUR(sv); s < end && d < limit;
1912 if (ch & 128 && !isPRINT_LC(ch)) {
1921 else if (ch == '\r') {
1925 else if (ch == '\f') {
1929 else if (ch == '\\') {
1933 else if (ch == '\0') {
1937 else if (isPRINT_LC(ch))
1954 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1955 "Argument \"%s\" isn't numeric in %s", pv,
1958 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1959 "Argument \"%s\" isn't numeric", pv);
1963 =for apidoc looks_like_number
1965 Test if the content of an SV looks like a number (or is a number).
1966 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1967 non-numeric warning), even if your atof() doesn't grok them.
1973 Perl_looks_like_number(pTHX_ SV *sv)
1975 register const char *sbegin;
1979 sbegin = SvPVX_const(sv);
1982 else if (SvPOKp(sv))
1983 sbegin = SvPV_const(sv, len);
1985 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1986 return grok_number(sbegin, len, NULL);
1989 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1990 until proven guilty, assume that things are not that bad... */
1995 As 64 bit platforms often have an NV that doesn't preserve all bits of
1996 an IV (an assumption perl has been based on to date) it becomes necessary
1997 to remove the assumption that the NV always carries enough precision to
1998 recreate the IV whenever needed, and that the NV is the canonical form.
1999 Instead, IV/UV and NV need to be given equal rights. So as to not lose
2000 precision as a side effect of conversion (which would lead to insanity
2001 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
2002 1) to distinguish between IV/UV/NV slots that have cached a valid
2003 conversion where precision was lost and IV/UV/NV slots that have a
2004 valid conversion which has lost no precision
2005 2) to ensure that if a numeric conversion to one form is requested that
2006 would lose precision, the precise conversion (or differently
2007 imprecise conversion) is also performed and cached, to prevent
2008 requests for different numeric formats on the same SV causing
2009 lossy conversion chains. (lossless conversion chains are perfectly
2014 SvIOKp is true if the IV slot contains a valid value
2015 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
2016 SvNOKp is true if the NV slot contains a valid value
2017 SvNOK is true only if the NV value is accurate
2020 while converting from PV to NV, check to see if converting that NV to an
2021 IV(or UV) would lose accuracy over a direct conversion from PV to
2022 IV(or UV). If it would, cache both conversions, return NV, but mark
2023 SV as IOK NOKp (ie not NOK).
2025 While converting from PV to IV, check to see if converting that IV to an
2026 NV would lose accuracy over a direct conversion from PV to NV. If it
2027 would, cache both conversions, flag similarly.
2029 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2030 correctly because if IV & NV were set NV *always* overruled.
2031 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2032 changes - now IV and NV together means that the two are interchangeable:
2033 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2035 The benefit of this is that operations such as pp_add know that if
2036 SvIOK is true for both left and right operands, then integer addition
2037 can be used instead of floating point (for cases where the result won't
2038 overflow). Before, floating point was always used, which could lead to
2039 loss of precision compared with integer addition.
2041 * making IV and NV equal status should make maths accurate on 64 bit
2043 * may speed up maths somewhat if pp_add and friends start to use
2044 integers when possible instead of fp. (Hopefully the overhead in
2045 looking for SvIOK and checking for overflow will not outweigh the
2046 fp to integer speedup)
2047 * will slow down integer operations (callers of SvIV) on "inaccurate"
2048 values, as the change from SvIOK to SvIOKp will cause a call into
2049 sv_2iv each time rather than a macro access direct to the IV slot
2050 * should speed up number->string conversion on integers as IV is
2051 favoured when IV and NV are equally accurate
2053 ####################################################################
2054 You had better be using SvIOK_notUV if you want an IV for arithmetic:
2055 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2056 On the other hand, SvUOK is true iff UV.
2057 ####################################################################
2059 Your mileage will vary depending your CPU's relative fp to integer
2063 #ifndef NV_PRESERVES_UV
2064 # define IS_NUMBER_UNDERFLOW_IV 1
2065 # define IS_NUMBER_UNDERFLOW_UV 2
2066 # define IS_NUMBER_IV_AND_UV 2
2067 # define IS_NUMBER_OVERFLOW_IV 4
2068 # define IS_NUMBER_OVERFLOW_UV 5
2070 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2072 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2074 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2076 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));
2077 if (SvNVX(sv) < (NV)IV_MIN) {
2078 (void)SvIOKp_on(sv);
2080 SvIV_set(sv, IV_MIN);
2081 return IS_NUMBER_UNDERFLOW_IV;
2083 if (SvNVX(sv) > (NV)UV_MAX) {
2084 (void)SvIOKp_on(sv);
2087 SvUV_set(sv, UV_MAX);
2088 return IS_NUMBER_OVERFLOW_UV;
2090 (void)SvIOKp_on(sv);
2092 /* Can't use strtol etc to convert this string. (See truth table in
2094 if (SvNVX(sv) <= (UV)IV_MAX) {
2095 SvIV_set(sv, I_V(SvNVX(sv)));
2096 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2097 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2099 /* Integer is imprecise. NOK, IOKp */
2101 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2104 SvUV_set(sv, U_V(SvNVX(sv)));
2105 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2106 if (SvUVX(sv) == UV_MAX) {
2107 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2108 possibly be preserved by NV. Hence, it must be overflow.
2110 return IS_NUMBER_OVERFLOW_UV;
2112 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2114 /* Integer is imprecise. NOK, IOKp */
2116 return IS_NUMBER_OVERFLOW_IV;
2118 #endif /* !NV_PRESERVES_UV*/
2121 =for apidoc sv_2iv_flags
2123 Return the integer value of an SV, doing any necessary string
2124 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2125 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2131 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2135 if (SvGMAGICAL(sv)) {
2136 if (flags & SV_GMAGIC)
2141 return I_V(SvNVX(sv));
2143 if (SvPOKp(sv) && SvLEN(sv))
2146 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2147 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2153 if (SvTHINKFIRST(sv)) {
2156 SV * const tmpstr=AMG_CALLun(sv,numer);
2157 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2158 return SvIV(tmpstr);
2161 return PTR2IV(SvRV(sv));
2164 sv_force_normal_flags(sv, 0);
2166 if (SvREADONLY(sv) && !SvOK(sv)) {
2167 if (ckWARN(WARN_UNINITIALIZED))
2174 return (IV)(SvUVX(sv));
2181 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2182 * without also getting a cached IV/UV from it at the same time
2183 * (ie PV->NV conversion should detect loss of accuracy and cache
2184 * IV or UV at same time to avoid this. NWC */
2186 if (SvTYPE(sv) == SVt_NV)
2187 sv_upgrade(sv, SVt_PVNV);
2189 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2190 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2191 certainly cast into the IV range at IV_MAX, whereas the correct
2192 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2194 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2195 SvIV_set(sv, I_V(SvNVX(sv)));
2196 if (SvNVX(sv) == (NV) SvIVX(sv)
2197 #ifndef NV_PRESERVES_UV
2198 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2199 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2200 /* Don't flag it as "accurately an integer" if the number
2201 came from a (by definition imprecise) NV operation, and
2202 we're outside the range of NV integer precision */
2205 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2206 DEBUG_c(PerlIO_printf(Perl_debug_log,
2207 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2213 /* IV not precise. No need to convert from PV, as NV
2214 conversion would already have cached IV if it detected
2215 that PV->IV would be better than PV->NV->IV
2216 flags already correct - don't set public IOK. */
2217 DEBUG_c(PerlIO_printf(Perl_debug_log,
2218 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2223 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2224 but the cast (NV)IV_MIN rounds to a the value less (more
2225 negative) than IV_MIN which happens to be equal to SvNVX ??
2226 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2227 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2228 (NV)UVX == NVX are both true, but the values differ. :-(
2229 Hopefully for 2s complement IV_MIN is something like
2230 0x8000000000000000 which will be exact. NWC */
2233 SvUV_set(sv, U_V(SvNVX(sv)));
2235 (SvNVX(sv) == (NV) SvUVX(sv))
2236 #ifndef NV_PRESERVES_UV
2237 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2238 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2239 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2240 /* Don't flag it as "accurately an integer" if the number
2241 came from a (by definition imprecise) NV operation, and
2242 we're outside the range of NV integer precision */
2248 DEBUG_c(PerlIO_printf(Perl_debug_log,
2249 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2253 return (IV)SvUVX(sv);
2256 else if (SvPOKp(sv) && SvLEN(sv)) {
2258 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2259 /* We want to avoid a possible problem when we cache an IV which
2260 may be later translated to an NV, and the resulting NV is not
2261 the same as the direct translation of the initial string
2262 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2263 be careful to ensure that the value with the .456 is around if the
2264 NV value is requested in the future).
2266 This means that if we cache such an IV, we need to cache the
2267 NV as well. Moreover, we trade speed for space, and do not
2268 cache the NV if we are sure it's not needed.
2271 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2272 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2273 == IS_NUMBER_IN_UV) {
2274 /* It's definitely an integer, only upgrade to PVIV */
2275 if (SvTYPE(sv) < SVt_PVIV)
2276 sv_upgrade(sv, SVt_PVIV);
2278 } else if (SvTYPE(sv) < SVt_PVNV)
2279 sv_upgrade(sv, SVt_PVNV);
2281 /* If NV preserves UV then we only use the UV value if we know that
2282 we aren't going to call atof() below. If NVs don't preserve UVs
2283 then the value returned may have more precision than atof() will
2284 return, even though value isn't perfectly accurate. */
2285 if ((numtype & (IS_NUMBER_IN_UV
2286 #ifdef NV_PRESERVES_UV
2289 )) == IS_NUMBER_IN_UV) {
2290 /* This won't turn off the public IOK flag if it was set above */
2291 (void)SvIOKp_on(sv);
2293 if (!(numtype & IS_NUMBER_NEG)) {
2295 if (value <= (UV)IV_MAX) {
2296 SvIV_set(sv, (IV)value);
2298 SvUV_set(sv, value);
2302 /* 2s complement assumption */
2303 if (value <= (UV)IV_MIN) {
2304 SvIV_set(sv, -(IV)value);
2306 /* Too negative for an IV. This is a double upgrade, but
2307 I'm assuming it will be rare. */
2308 if (SvTYPE(sv) < SVt_PVNV)
2309 sv_upgrade(sv, SVt_PVNV);
2313 SvNV_set(sv, -(NV)value);
2314 SvIV_set(sv, IV_MIN);
2318 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2319 will be in the previous block to set the IV slot, and the next
2320 block to set the NV slot. So no else here. */
2322 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2323 != IS_NUMBER_IN_UV) {
2324 /* It wasn't an (integer that doesn't overflow the UV). */
2325 SvNV_set(sv, Atof(SvPVX_const(sv)));
2327 if (! numtype && ckWARN(WARN_NUMERIC))
2330 #if defined(USE_LONG_DOUBLE)
2331 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2332 PTR2UV(sv), SvNVX(sv)));
2334 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2335 PTR2UV(sv), SvNVX(sv)));
2339 #ifdef NV_PRESERVES_UV
2340 (void)SvIOKp_on(sv);
2342 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2343 SvIV_set(sv, I_V(SvNVX(sv)));
2344 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2347 /* Integer is imprecise. NOK, IOKp */
2349 /* UV will not work better than IV */
2351 if (SvNVX(sv) > (NV)UV_MAX) {
2353 /* Integer is inaccurate. NOK, IOKp, is UV */
2354 SvUV_set(sv, UV_MAX);
2357 SvUV_set(sv, U_V(SvNVX(sv)));
2358 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2359 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2363 /* Integer is imprecise. NOK, IOKp, is UV */
2369 #else /* NV_PRESERVES_UV */
2370 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2371 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2372 /* The IV slot will have been set from value returned by
2373 grok_number above. The NV slot has just been set using
2376 assert (SvIOKp(sv));
2378 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2379 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2380 /* Small enough to preserve all bits. */
2381 (void)SvIOKp_on(sv);
2383 SvIV_set(sv, I_V(SvNVX(sv)));
2384 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2386 /* Assumption: first non-preserved integer is < IV_MAX,
2387 this NV is in the preserved range, therefore: */
2388 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2390 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);
2394 0 0 already failed to read UV.
2395 0 1 already failed to read UV.
2396 1 0 you won't get here in this case. IV/UV
2397 slot set, public IOK, Atof() unneeded.
2398 1 1 already read UV.
2399 so there's no point in sv_2iuv_non_preserve() attempting
2400 to use atol, strtol, strtoul etc. */
2401 if (sv_2iuv_non_preserve (sv, numtype)
2402 >= IS_NUMBER_OVERFLOW_IV)
2406 #endif /* NV_PRESERVES_UV */
2409 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2411 if (SvTYPE(sv) < SVt_IV)
2412 /* Typically the caller expects that sv_any is not NULL now. */
2413 sv_upgrade(sv, SVt_IV);
2416 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2417 PTR2UV(sv),SvIVX(sv)));
2418 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2422 =for apidoc sv_2uv_flags
2424 Return the unsigned integer value of an SV, doing any necessary string
2425 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2426 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2432 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2436 if (SvGMAGICAL(sv)) {
2437 if (flags & SV_GMAGIC)
2442 return U_V(SvNVX(sv));
2443 if (SvPOKp(sv) && SvLEN(sv))
2446 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2447 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2453 if (SvTHINKFIRST(sv)) {
2456 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2457 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2458 return SvUV(tmpstr);
2459 return PTR2UV(SvRV(sv));
2462 sv_force_normal_flags(sv, 0);
2464 if (SvREADONLY(sv) && !SvOK(sv)) {
2465 if (ckWARN(WARN_UNINITIALIZED))
2475 return (UV)SvIVX(sv);
2479 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2480 * without also getting a cached IV/UV from it at the same time
2481 * (ie PV->NV conversion should detect loss of accuracy and cache
2482 * IV or UV at same time to avoid this. */
2483 /* IV-over-UV optimisation - choose to cache IV if possible */
2485 if (SvTYPE(sv) == SVt_NV)
2486 sv_upgrade(sv, SVt_PVNV);
2488 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2489 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2490 SvIV_set(sv, I_V(SvNVX(sv)));
2491 if (SvNVX(sv) == (NV) SvIVX(sv)
2492 #ifndef NV_PRESERVES_UV
2493 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2494 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2495 /* Don't flag it as "accurately an integer" if the number
2496 came from a (by definition imprecise) NV operation, and
2497 we're outside the range of NV integer precision */
2500 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2501 DEBUG_c(PerlIO_printf(Perl_debug_log,
2502 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2508 /* IV not precise. No need to convert from PV, as NV
2509 conversion would already have cached IV if it detected
2510 that PV->IV would be better than PV->NV->IV
2511 flags already correct - don't set public IOK. */
2512 DEBUG_c(PerlIO_printf(Perl_debug_log,
2513 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2518 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2519 but the cast (NV)IV_MIN rounds to a the value less (more
2520 negative) than IV_MIN which happens to be equal to SvNVX ??
2521 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2522 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2523 (NV)UVX == NVX are both true, but the values differ. :-(
2524 Hopefully for 2s complement IV_MIN is something like
2525 0x8000000000000000 which will be exact. NWC */
2528 SvUV_set(sv, U_V(SvNVX(sv)));
2530 (SvNVX(sv) == (NV) SvUVX(sv))
2531 #ifndef NV_PRESERVES_UV
2532 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2533 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2534 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2535 /* Don't flag it as "accurately an integer" if the number
2536 came from a (by definition imprecise) NV operation, and
2537 we're outside the range of NV integer precision */
2542 DEBUG_c(PerlIO_printf(Perl_debug_log,
2543 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2549 else if (SvPOKp(sv) && SvLEN(sv)) {
2551 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2553 /* We want to avoid a possible problem when we cache a UV which
2554 may be later translated to an NV, and the resulting NV is not
2555 the translation of the initial data.
2557 This means that if we cache such a UV, we need to cache the
2558 NV as well. Moreover, we trade speed for space, and do not
2559 cache the NV if not needed.
2562 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2563 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2564 == IS_NUMBER_IN_UV) {
2565 /* It's definitely an integer, only upgrade to PVIV */
2566 if (SvTYPE(sv) < SVt_PVIV)
2567 sv_upgrade(sv, SVt_PVIV);
2569 } else if (SvTYPE(sv) < SVt_PVNV)
2570 sv_upgrade(sv, SVt_PVNV);
2572 /* If NV preserves UV then we only use the UV value if we know that
2573 we aren't going to call atof() below. If NVs don't preserve UVs
2574 then the value returned may have more precision than atof() will
2575 return, even though it isn't accurate. */
2576 if ((numtype & (IS_NUMBER_IN_UV
2577 #ifdef NV_PRESERVES_UV
2580 )) == IS_NUMBER_IN_UV) {
2581 /* This won't turn off the public IOK flag if it was set above */
2582 (void)SvIOKp_on(sv);
2584 if (!(numtype & IS_NUMBER_NEG)) {
2586 if (value <= (UV)IV_MAX) {
2587 SvIV_set(sv, (IV)value);
2589 /* it didn't overflow, and it was positive. */
2590 SvUV_set(sv, value);
2594 /* 2s complement assumption */
2595 if (value <= (UV)IV_MIN) {
2596 SvIV_set(sv, -(IV)value);
2598 /* Too negative for an IV. This is a double upgrade, but
2599 I'm assuming it will be rare. */
2600 if (SvTYPE(sv) < SVt_PVNV)
2601 sv_upgrade(sv, SVt_PVNV);
2605 SvNV_set(sv, -(NV)value);
2606 SvIV_set(sv, IV_MIN);
2611 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2612 != IS_NUMBER_IN_UV) {
2613 /* It wasn't an integer, or it overflowed the UV. */
2614 SvNV_set(sv, Atof(SvPVX_const(sv)));
2616 if (! numtype && ckWARN(WARN_NUMERIC))
2619 #if defined(USE_LONG_DOUBLE)
2620 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2621 PTR2UV(sv), SvNVX(sv)));
2623 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
2624 PTR2UV(sv), SvNVX(sv)));
2627 #ifdef NV_PRESERVES_UV
2628 (void)SvIOKp_on(sv);
2630 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2631 SvIV_set(sv, I_V(SvNVX(sv)));
2632 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2635 /* Integer is imprecise. NOK, IOKp */
2637 /* UV will not work better than IV */
2639 if (SvNVX(sv) > (NV)UV_MAX) {
2641 /* Integer is inaccurate. NOK, IOKp, is UV */
2642 SvUV_set(sv, UV_MAX);
2645 SvUV_set(sv, U_V(SvNVX(sv)));
2646 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2647 NV preservse UV so can do correct comparison. */
2648 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2652 /* Integer is imprecise. NOK, IOKp, is UV */
2657 #else /* NV_PRESERVES_UV */
2658 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2659 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2660 /* The UV slot will have been set from value returned by
2661 grok_number above. The NV slot has just been set using
2664 assert (SvIOKp(sv));
2666 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2667 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2668 /* Small enough to preserve all bits. */
2669 (void)SvIOKp_on(sv);
2671 SvIV_set(sv, I_V(SvNVX(sv)));
2672 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2674 /* Assumption: first non-preserved integer is < IV_MAX,
2675 this NV is in the preserved range, therefore: */
2676 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2678 Perl_croak(aTHX_ "sv_2uv 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);
2681 sv_2iuv_non_preserve (sv, numtype);
2683 #endif /* NV_PRESERVES_UV */
2687 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2688 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2691 if (SvTYPE(sv) < SVt_IV)
2692 /* Typically the caller expects that sv_any is not NULL now. */
2693 sv_upgrade(sv, SVt_IV);
2697 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2698 PTR2UV(sv),SvUVX(sv)));
2699 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2705 Return the num value of an SV, doing any necessary string or integer
2706 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2713 Perl_sv_2nv(pTHX_ register SV *sv)
2717 if (SvGMAGICAL(sv)) {
2721 if (SvPOKp(sv) && SvLEN(sv)) {
2722 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2723 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2725 return Atof(SvPVX_const(sv));
2729 return (NV)SvUVX(sv);
2731 return (NV)SvIVX(sv);
2734 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2735 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2741 if (SvTHINKFIRST(sv)) {
2744 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2745 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2746 return SvNV(tmpstr);
2747 return PTR2NV(SvRV(sv));
2750 sv_force_normal_flags(sv, 0);
2752 if (SvREADONLY(sv) && !SvOK(sv)) {
2753 if (ckWARN(WARN_UNINITIALIZED))
2758 if (SvTYPE(sv) < SVt_NV) {
2759 if (SvTYPE(sv) == SVt_IV)
2760 sv_upgrade(sv, SVt_PVNV);
2762 sv_upgrade(sv, SVt_NV);
2763 #ifdef USE_LONG_DOUBLE
2765 STORE_NUMERIC_LOCAL_SET_STANDARD();
2766 PerlIO_printf(Perl_debug_log,
2767 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2768 PTR2UV(sv), SvNVX(sv));
2769 RESTORE_NUMERIC_LOCAL();
2773 STORE_NUMERIC_LOCAL_SET_STANDARD();
2774 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2775 PTR2UV(sv), SvNVX(sv));
2776 RESTORE_NUMERIC_LOCAL();
2780 else if (SvTYPE(sv) < SVt_PVNV)
2781 sv_upgrade(sv, SVt_PVNV);
2786 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2787 #ifdef NV_PRESERVES_UV
2790 /* Only set the public NV OK flag if this NV preserves the IV */
2791 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2792 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2793 : (SvIVX(sv) == I_V(SvNVX(sv))))
2799 else if (SvPOKp(sv) && SvLEN(sv)) {
2801 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2802 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2804 #ifdef NV_PRESERVES_UV
2805 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2806 == IS_NUMBER_IN_UV) {
2807 /* It's definitely an integer */
2808 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2810 SvNV_set(sv, Atof(SvPVX_const(sv)));
2813 SvNV_set(sv, Atof(SvPVX_const(sv)));
2814 /* Only set the public NV OK flag if this NV preserves the value in
2815 the PV at least as well as an IV/UV would.
2816 Not sure how to do this 100% reliably. */
2817 /* if that shift count is out of range then Configure's test is
2818 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2820 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2821 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2822 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2823 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2824 /* Can't use strtol etc to convert this string, so don't try.
2825 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2828 /* value has been set. It may not be precise. */
2829 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2830 /* 2s complement assumption for (UV)IV_MIN */
2831 SvNOK_on(sv); /* Integer is too negative. */
2836 if (numtype & IS_NUMBER_NEG) {
2837 SvIV_set(sv, -(IV)value);
2838 } else if (value <= (UV)IV_MAX) {
2839 SvIV_set(sv, (IV)value);
2841 SvUV_set(sv, value);
2845 if (numtype & IS_NUMBER_NOT_INT) {
2846 /* I believe that even if the original PV had decimals,
2847 they are lost beyond the limit of the FP precision.
2848 However, neither is canonical, so both only get p
2849 flags. NWC, 2000/11/25 */
2850 /* Both already have p flags, so do nothing */
2852 const NV nv = SvNVX(sv);
2853 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2854 if (SvIVX(sv) == I_V(nv)) {
2859 /* It had no "." so it must be integer. */
2862 /* between IV_MAX and NV(UV_MAX).
2863 Could be slightly > UV_MAX */
2865 if (numtype & IS_NUMBER_NOT_INT) {
2866 /* UV and NV both imprecise. */
2868 const UV nv_as_uv = U_V(nv);
2870 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2881 #endif /* NV_PRESERVES_UV */
2884 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2886 if (SvTYPE(sv) < SVt_NV)
2887 /* Typically the caller expects that sv_any is not NULL now. */
2888 /* XXX Ilya implies that this is a bug in callers that assume this
2889 and ideally should be fixed. */
2890 sv_upgrade(sv, SVt_NV);
2893 #if defined(USE_LONG_DOUBLE)
2895 STORE_NUMERIC_LOCAL_SET_STANDARD();
2896 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2897 PTR2UV(sv), SvNVX(sv));
2898 RESTORE_NUMERIC_LOCAL();
2902 STORE_NUMERIC_LOCAL_SET_STANDARD();
2903 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2904 PTR2UV(sv), SvNVX(sv));
2905 RESTORE_NUMERIC_LOCAL();
2911 /* asIV(): extract an integer from the string value of an SV.
2912 * Caller must validate PVX */
2915 S_asIV(pTHX_ SV *sv)
2918 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2920 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2921 == IS_NUMBER_IN_UV) {
2922 /* It's definitely an integer */
2923 if (numtype & IS_NUMBER_NEG) {
2924 if (value < (UV)IV_MIN)
2927 if (value < (UV)IV_MAX)
2932 if (ckWARN(WARN_NUMERIC))
2935 return I_V(Atof(SvPVX_const(sv)));
2938 /* asUV(): extract an unsigned integer from the string value of an SV
2939 * Caller must validate PVX */
2942 S_asUV(pTHX_ SV *sv)
2945 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2947 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2948 == IS_NUMBER_IN_UV) {
2949 /* It's definitely an integer */
2950 if (!(numtype & IS_NUMBER_NEG))
2954 if (ckWARN(WARN_NUMERIC))
2957 return U_V(Atof(SvPVX_const(sv)));
2960 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2961 * UV as a string towards the end of buf, and return pointers to start and
2964 * We assume that buf is at least TYPE_CHARS(UV) long.
2968 S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2970 char *ptr = buf + TYPE_CHARS(UV);
2971 char * const ebuf = ptr;
2984 *--ptr = '0' + (char)(uv % 10);
2993 =for apidoc sv_2pv_flags
2995 Returns a pointer to the string value of an SV, and sets *lp to its length.
2996 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2998 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2999 usually end up here too.
3005 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
3010 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
3011 char *tmpbuf = tbuf;
3012 STRLEN len = 0; /* Hush gcc. len is always initialised before use. */
3019 if (SvGMAGICAL(sv)) {
3020 if (flags & SV_GMAGIC)
3025 if (flags & SV_MUTABLE_RETURN)
3026 return SvPVX_mutable(sv);
3027 if (flags & SV_CONST_RETURN)
3028 return (char *)SvPVX_const(sv);
3032 len = SvIsUV(sv) ? my_sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv))
3033 : my_sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
3035 goto tokensave_has_len;
3038 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
3043 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3044 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3052 if (SvTHINKFIRST(sv)) {
3055 register const char *typestr;
3056 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3057 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3059 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr); */
3062 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
3063 if (flags & SV_CONST_RETURN) {
3064 pv = (char *) SvPVX_const(tmpstr);
3066 pv = (flags & SV_MUTABLE_RETURN)
3067 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
3070 *lp = SvCUR(tmpstr);
3072 pv = sv_2pv_flags(tmpstr, lp, flags);
3083 typestr = "NULLREF";
3087 switch (SvTYPE(sv)) {
3089 if ( ((SvFLAGS(sv) &
3090 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3091 == (SVs_OBJECT|SVs_SMG))
3092 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3093 const regexp *re = (regexp *)mg->mg_obj;
3096 const char *fptr = "msix";
3101 char need_newline = 0;
3102 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3104 while((ch = *fptr++)) {
3106 reflags[left++] = ch;
3109 reflags[right--] = ch;
3114 reflags[left] = '-';
3118 mg->mg_len = re->prelen + 4 + left;
3120 * If /x was used, we have to worry about a regex
3121 * ending with a comment later being embedded
3122 * within another regex. If so, we don't want this
3123 * regex's "commentization" to leak out to the
3124 * right part of the enclosing regex, we must cap
3125 * it with a newline.
3127 * So, if /x was used, we scan backwards from the
3128 * end of the regex. If we find a '#' before we
3129 * find a newline, we need to add a newline
3130 * ourself. If we find a '\n' first (or if we
3131 * don't find '#' or '\n'), we don't need to add
3132 * anything. -jfriedl
3134 if (PMf_EXTENDED & re->reganch)
3136 const char *endptr = re->precomp + re->prelen;
3137 while (endptr >= re->precomp)
3139 const char c = *(endptr--);
3141 break; /* don't need another */
3143 /* we end while in a comment, so we
3145 mg->mg_len++; /* save space for it */
3146 need_newline = 1; /* note to add it */
3152 Newx(mg->mg_ptr, mg->mg_len + 1 + left, char);
3153 Copy("(?", mg->mg_ptr, 2, char);
3154 Copy(reflags, mg->mg_ptr+2, left, char);
3155 Copy(":", mg->mg_ptr+left+2, 1, char);
3156 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3158 mg->mg_ptr[mg->mg_len - 2] = '\n';
3159 mg->mg_ptr[mg->mg_len - 1] = ')';
3160 mg->mg_ptr[mg->mg_len] = 0;
3162 PL_reginterp_cnt += re->program[0].next_off;
3164 if (re->reganch & ROPT_UTF8)
3180 case SVt_PVBM: typestr = SvROK(sv) ? "REF" : "SCALAR"; break;
3181 case SVt_PVLV: typestr = SvROK(sv) ? "REF"
3182 /* tied lvalues should appear to be
3183 * scalars for backwards compatitbility */
3184 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3185 ? "SCALAR" : "LVALUE"; break;
3186 case SVt_PVAV: typestr = "ARRAY"; break;
3187 case SVt_PVHV: typestr = "HASH"; break;
3188 case SVt_PVCV: typestr = "CODE"; break;
3189 case SVt_PVGV: typestr = "GLOB"; break;
3190 case SVt_PVFM: typestr = "FORMAT"; break;
3191 case SVt_PVIO: typestr = "IO"; break;
3192 default: typestr = "UNKNOWN"; break;
3196 const char * const name = HvNAME_get(SvSTASH(sv));
3197 Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
3198 name ? name : "__ANON__" , typestr, PTR2UV(sv));
3201 Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, PTR2UV(sv));
3205 *lp = strlen(typestr);
3206 return (char *)typestr;
3208 if (SvREADONLY(sv) && !SvOK(sv)) {
3209 if (ckWARN(WARN_UNINITIALIZED))
3216 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3217 /* I'm assuming that if both IV and NV are equally valid then
3218 converting the IV is going to be more efficient */
3219 const U32 isIOK = SvIOK(sv);
3220 const U32 isUIOK = SvIsUV(sv);
3221 char buf[TYPE_CHARS(UV)];
3224 if (SvTYPE(sv) < SVt_PVIV)
3225 sv_upgrade(sv, SVt_PVIV);
3227 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3229 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3230 /* inlined from sv_setpvn */
3231 SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
3232 Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
3233 SvCUR_set(sv, ebuf - ptr);
3243 else if (SvNOKp(sv)) {
3244 if (SvTYPE(sv) < SVt_PVNV)
3245 sv_upgrade(sv, SVt_PVNV);
3246 /* The +20 is pure guesswork. Configure test needed. --jhi */
3247 s = SvGROW_mutable(sv, NV_DIG + 20);
3248 olderrno = errno; /* some Xenix systems wipe out errno here */
3250 if (SvNVX(sv) == 0.0)
3251 (void)strcpy(s,"0");
3255 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3258 #ifdef FIXNEGATIVEZERO
3259 if (*s == '-' && s[1] == '0' && !s[2])
3269 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
3273 if (SvTYPE(sv) < SVt_PV)
3274 /* Typically the caller expects that sv_any is not NULL now. */
3275 sv_upgrade(sv, SVt_PV);
3279 const STRLEN len = s - SvPVX_const(sv);
3285 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3286 PTR2UV(sv),SvPVX_const(sv)));
3287 if (flags & SV_CONST_RETURN)
3288 return (char *)SvPVX_const(sv);
3289 if (flags & SV_MUTABLE_RETURN)
3290 return SvPVX_mutable(sv);
3294 len = strlen(tmpbuf);
3297 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3298 /* Sneaky stuff here */
3302 tsv = newSVpvn(tmpbuf, len);
3311 #ifdef FIXNEGATIVEZERO
3312 if (len == 2 && tmpbuf[0] == '-' && tmpbuf[1] == '0') {
3318 SvUPGRADE(sv, SVt_PV);
3321 s = SvGROW_mutable(sv, len + 1);
3324 return memcpy(s, tmpbuf, len + 1);
3329 =for apidoc sv_copypv
3331 Copies a stringified representation of the source SV into the
3332 destination SV. Automatically performs any necessary mg_get and
3333 coercion of numeric values into strings. Guaranteed to preserve
3334 UTF-8 flag even from overloaded objects. Similar in nature to
3335 sv_2pv[_flags] but operates directly on an SV instead of just the
3336 string. Mostly uses sv_2pv_flags to do its work, except when that
3337 would lose the UTF-8'ness of the PV.
3343 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3346 const char * const s = SvPV_const(ssv,len);
3347 sv_setpvn(dsv,s,len);
3355 =for apidoc sv_2pvbyte
3357 Return a pointer to the byte-encoded representation of the SV, and set *lp
3358 to its length. May cause the SV to be downgraded from UTF-8 as a
3361 Usually accessed via the C<SvPVbyte> macro.
3367 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3369 sv_utf8_downgrade(sv,0);
3370 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3374 =for apidoc sv_2pvutf8
3376 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3377 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3379 Usually accessed via the C<SvPVutf8> macro.
3385 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3387 sv_utf8_upgrade(sv);
3388 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3393 =for apidoc sv_2bool
3395 This function is only called on magical items, and is only used by
3396 sv_true() or its macro equivalent.
3402 Perl_sv_2bool(pTHX_ register SV *sv)
3410 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3411 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3412 return (bool)SvTRUE(tmpsv);
3413 return SvRV(sv) != 0;
3416 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3418 (*sv->sv_u.svu_pv > '0' ||
3419 Xpvtmp->xpv_cur > 1 ||
3420 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3427 return SvIVX(sv) != 0;
3430 return SvNVX(sv) != 0.0;
3438 =for apidoc sv_utf8_upgrade
3440 Converts the PV of an SV to its UTF-8-encoded form.
3441 Forces the SV to string form if it is not already.
3442 Always sets the SvUTF8 flag to avoid future validity checks even
3443 if all the bytes have hibit clear.
3445 This is not as a general purpose byte encoding to Unicode interface:
3446 use the Encode extension for that.
3448 =for apidoc sv_utf8_upgrade_flags
3450 Converts the PV of an SV to its UTF-8-encoded form.
3451 Forces the SV to string form if it is not already.
3452 Always sets the SvUTF8 flag to avoid future validity checks even
3453 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3454 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3455 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3457 This is not as a general purpose byte encoding to Unicode interface:
3458 use the Encode extension for that.
3464 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3466 if (sv == &PL_sv_undef)
3470 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3471 (void) sv_2pv_flags(sv,&len, flags);
3475 (void) SvPV_force(sv,len);
3484 sv_force_normal_flags(sv, 0);
3487 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3488 sv_recode_to_utf8(sv, PL_encoding);
3489 else { /* Assume Latin-1/EBCDIC */
3490 /* This function could be much more efficient if we
3491 * had a FLAG in SVs to signal if there are any hibit
3492 * chars in the PV. Given that there isn't such a flag
3493 * make the loop as fast as possible. */
3494 const U8 *s = (U8 *) SvPVX_const(sv);
3495 const U8 * const e = (U8 *) SvEND(sv);
3501 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3505 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3506 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3508 SvPV_free(sv); /* No longer using what was there before. */
3510 SvPV_set(sv, (char*)recoded);
3511 SvCUR_set(sv, len - 1);
3512 SvLEN_set(sv, len); /* No longer know the real size. */
3514 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3521 =for apidoc sv_utf8_downgrade
3523 Attempts to convert the PV of an SV from characters to bytes.
3524 If the PV contains a character beyond byte, this conversion will fail;
3525 in this case, either returns false or, if C<fail_ok> is not
3528 This is not as a general purpose Unicode to byte encoding interface:
3529 use the Encode extension for that.
3535 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3537 if (SvPOKp(sv) && SvUTF8(sv)) {
3543 sv_force_normal_flags(sv, 0);
3545 s = (U8 *) SvPV(sv, len);
3546 if (!utf8_to_bytes(s, &len)) {
3551 Perl_croak(aTHX_ "Wide character in %s",
3554 Perl_croak(aTHX_ "Wide character");
3565 =for apidoc sv_utf8_encode
3567 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3568 flag off so that it looks like octets again.
3574 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3576 (void) sv_utf8_upgrade(sv);
3578 sv_force_normal_flags(sv, 0);
3580 if (SvREADONLY(sv)) {
3581 Perl_croak(aTHX_ PL_no_modify);
3587 =for apidoc sv_utf8_decode
3589 If the PV of the SV is an octet sequence in UTF-8
3590 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3591 so that it looks like a character. If the PV contains only single-byte
3592 characters, the C<SvUTF8> flag stays being off.
3593 Scans PV for validity and returns false if the PV is invalid UTF-8.
3599 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3605 /* The octets may have got themselves encoded - get them back as
3608 if (!sv_utf8_downgrade(sv, TRUE))
3611 /* it is actually just a matter of turning the utf8 flag on, but
3612 * we want to make sure everything inside is valid utf8 first.
3614 c = (const U8 *) SvPVX_const(sv);
3615 if (!is_utf8_string(c, SvCUR(sv)+1))
3617 e = (const U8 *) SvEND(sv);
3620 if (!UTF8_IS_INVARIANT(ch)) {
3630 =for apidoc sv_setsv
3632 Copies the contents of the source SV C<ssv> into the destination SV
3633 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3634 function if the source SV needs to be reused. Does not handle 'set' magic.
3635 Loosely speaking, it performs a copy-by-value, obliterating any previous
3636 content of the destination.
3638 You probably want to use one of the assortment of wrappers, such as
3639 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3640 C<SvSetMagicSV_nosteal>.
3642 =for apidoc sv_setsv_flags
3644 Copies the contents of the source SV C<ssv> into the destination SV
3645 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3646 function if the source SV needs to be reused. Does not handle 'set' magic.
3647 Loosely speaking, it performs a copy-by-value, obliterating any previous
3648 content of the destination.
3649 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3650 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3651 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3652 and C<sv_setsv_nomg> are implemented in terms of this function.
3654 You probably want to use one of the assortment of wrappers, such as
3655 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3656 C<SvSetMagicSV_nosteal>.
3658 This is the primary function for copying scalars, and most other
3659 copy-ish functions and macros use this underneath.
3665 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3667 register U32 sflags;
3673 SV_CHECK_THINKFIRST_COW_DROP(dstr);
3675 sstr = &PL_sv_undef;
3676 stype = SvTYPE(sstr);
3677 dtype = SvTYPE(dstr);
3682 /* need to nuke the magic */
3684 SvRMAGICAL_off(dstr);
3687 /* There's a lot of redundancy below but we're going for speed here */
3692 if (dtype != SVt_PVGV) {
3693 (void)SvOK_off(dstr);
3701 sv_upgrade(dstr, SVt_IV);
3704 sv_upgrade(dstr, SVt_PVNV);
3708 sv_upgrade(dstr, SVt_PVIV);
3711 (void)SvIOK_only(dstr);
3712 SvIV_set(dstr, SvIVX(sstr));
3715 if (SvTAINTED(sstr))
3726 sv_upgrade(dstr, SVt_NV);
3731 sv_upgrade(dstr, SVt_PVNV);
3734 SvNV_set(dstr, SvNVX(sstr));
3735 (void)SvNOK_only(dstr);
3736 if (SvTAINTED(sstr))
3744 sv_upgrade(dstr, SVt_RV);
3745 else if (dtype == SVt_PVGV &&
3746 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3749 if (GvIMPORTED(dstr) != GVf_IMPORTED
3750 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3752 GvIMPORTED_on(dstr);
3761 #ifdef PERL_OLD_COPY_ON_WRITE
3762 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3763 if (dtype < SVt_PVIV)
3764 sv_upgrade(dstr, SVt_PVIV);
3771 sv_upgrade(dstr, SVt_PV);
3774 if (dtype < SVt_PVIV)
3775 sv_upgrade(dstr, SVt_PVIV);
3778 if (dtype < SVt_PVNV)
3779 sv_upgrade(dstr, SVt_PVNV);
3786 const char * const type = sv_reftype(sstr,0);
3788 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3790 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3795 if (dtype <= SVt_PVGV) {
3797 if (dtype != SVt_PVGV) {
3798 const char * const name = GvNAME(sstr);
3799 const STRLEN len = GvNAMELEN(sstr);
3800 /* don't upgrade SVt_PVLV: it can hold a glob */
3801 if (dtype != SVt_PVLV)
3802 sv_upgrade(dstr, SVt_PVGV);
3803 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
3804 GvSTASH(dstr) = GvSTASH(sstr);
3806 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
3807 GvNAME(dstr) = savepvn(name, len);
3808 GvNAMELEN(dstr) = len;
3809 SvFAKE_on(dstr); /* can coerce to non-glob */
3812 #ifdef GV_UNIQUE_CHECK
3813 if (GvUNIQUE((GV*)dstr)) {
3814 Perl_croak(aTHX_ PL_no_modify);
3818 (void)SvOK_off(dstr);
3819 GvINTRO_off(dstr); /* one-shot flag */
3821 GvGP(dstr) = gp_ref(GvGP(sstr));
3822 if (SvTAINTED(sstr))
3824 if (GvIMPORTED(dstr) != GVf_IMPORTED
3825 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3827 GvIMPORTED_on(dstr);
3835 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3837 if ((int)SvTYPE(sstr) != stype) {
3838 stype = SvTYPE(sstr);
3839 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3843 if (stype == SVt_PVLV)
3844 SvUPGRADE(dstr, SVt_PVNV);
3846 SvUPGRADE(dstr, (U32)stype);
3849 sflags = SvFLAGS(sstr);
3851 if (sflags & SVf_ROK) {
3852 if (dtype >= SVt_PV) {
3853 if (dtype == SVt_PVGV) {
3854 SV * const sref = SvREFCNT_inc(SvRV(sstr));
3856 const int intro = GvINTRO(dstr);
3858 #ifdef GV_UNIQUE_CHECK
3859 if (GvUNIQUE((GV*)dstr)) {
3860 Perl_croak(aTHX_ PL_no_modify);
3865 GvINTRO_off(dstr); /* one-shot flag */
3866 GvLINE(dstr) = CopLINE(PL_curcop);
3867 GvEGV(dstr) = (GV*)dstr;
3870 switch (SvTYPE(sref)) {
3873 SAVEGENERICSV(GvAV(dstr));
3875 dref = (SV*)GvAV(dstr);
3876 GvAV(dstr) = (AV*)sref;
3877 if (!GvIMPORTED_AV(dstr)
3878 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3880 GvIMPORTED_AV_on(dstr);
3885 SAVEGENERICSV(GvHV(dstr));
3887 dref = (SV*)GvHV(dstr);
3888 GvHV(dstr) = (HV*)sref;
3889 if (!GvIMPORTED_HV(dstr)
3890 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3892 GvIMPORTED_HV_on(dstr);
3897 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3898 SvREFCNT_dec(GvCV(dstr));
3899 GvCV(dstr) = Nullcv;
3900 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3901 PL_sub_generation++;
3903 SAVEGENERICSV(GvCV(dstr));
3906 dref = (SV*)GvCV(dstr);
3907 if (GvCV(dstr) != (CV*)sref) {
3908 CV* const cv = GvCV(dstr);
3910 if (!GvCVGEN((GV*)dstr) &&
3911 (CvROOT(cv) || CvXSUB(cv)))
3913 /* Redefining a sub - warning is mandatory if
3914 it was a const and its value changed. */
3915 if (ckWARN(WARN_REDEFINE)
3917 && (!CvCONST((CV*)sref)
3918 || sv_cmp(cv_const_sv(cv),
3919 cv_const_sv((CV*)sref)))))
3921 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3923 ? "Constant subroutine %s::%s redefined"
3924 : "Subroutine %s::%s redefined",
3925 HvNAME_get(GvSTASH((GV*)dstr)),
3926 GvENAME((GV*)dstr));
3930 cv_ckproto(cv, (GV*)dstr,
3932 ? SvPVX_const(sref) : Nullch);
3934 GvCV(dstr) = (CV*)sref;
3935 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3936 GvASSUMECV_on(dstr);
3937 PL_sub_generation++;
3939 if (!GvIMPORTED_CV(dstr)
3940 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3942 GvIMPORTED_CV_on(dstr);
3947 SAVEGENERICSV(GvIOp(dstr));
3949 dref = (SV*)GvIOp(dstr);
3950 GvIOp(dstr) = (IO*)sref;
3954 SAVEGENERICSV(GvFORM(dstr));
3956 dref = (SV*)GvFORM(dstr);
3957 GvFORM(dstr) = (CV*)sref;
3961 SAVEGENERICSV(GvSV(dstr));
3963 dref = (SV*)GvSV(dstr);
3965 if (!GvIMPORTED_SV(dstr)
3966 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3968 GvIMPORTED_SV_on(dstr);
3974 if (SvTAINTED(sstr))
3978 if (SvPVX_const(dstr)) {
3984 (void)SvOK_off(dstr);
3985 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3987 if (sflags & SVp_NOK) {
3989 /* Only set the public OK flag if the source has public OK. */
3990 if (sflags & SVf_NOK)
3991 SvFLAGS(dstr) |= SVf_NOK;
3992 SvNV_set(dstr, SvNVX(sstr));
3994 if (sflags & SVp_IOK) {
3995 (void)SvIOKp_on(dstr);
3996 if (sflags & SVf_IOK)
3997 SvFLAGS(dstr) |= SVf_IOK;
3998 if (sflags & SVf_IVisUV)
4000 SvIV_set(dstr, SvIVX(sstr));
4002 if (SvAMAGIC(sstr)) {
4006 else if (sflags & SVp_POK) {
4010 * Check to see if we can just swipe the string. If so, it's a
4011 * possible small lose on short strings, but a big win on long ones.
4012 * It might even be a win on short strings if SvPVX_const(dstr)
4013 * has to be allocated and SvPVX_const(sstr) has to be freed.
4016 /* Whichever path we take through the next code, we want this true,
4017 and doing it now facilitates the COW check. */
4018 (void)SvPOK_only(dstr);
4021 /* We're not already COW */
4022 ((sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
4023 #ifndef PERL_OLD_COPY_ON_WRITE
4024 /* or we are, but dstr isn't a suitable target. */
4025 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4030 (sflags & SVs_TEMP) && /* slated for free anyway? */
4031 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4032 (!(flags & SV_NOSTEAL)) &&
4033 /* and we're allowed to steal temps */
4034 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4035 SvLEN(sstr) && /* and really is a string */
4036 /* and won't be needed again, potentially */
4037 !(PL_op && PL_op->op_type == OP_AASSIGN))
4038 #ifdef PERL_OLD_COPY_ON_WRITE
4039 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4040 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4041 && SvTYPE(sstr) >= SVt_PVIV)
4044 /* Failed the swipe test, and it's not a shared hash key either.
4045 Have to copy the string. */
4046 STRLEN len = SvCUR(sstr);
4047 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4048 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4049 SvCUR_set(dstr, len);
4050 *SvEND(dstr) = '\0';
4052 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4054 /* Either it's a shared hash key, or it's suitable for
4055 copy-on-write or we can swipe the string. */
4057 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4061 #ifdef PERL_OLD_COPY_ON_WRITE
4063 /* I believe I should acquire a global SV mutex if
4064 it's a COW sv (not a shared hash key) to stop
4065 it going un copy-on-write.
4066 If the source SV has gone un copy on write between up there
4067 and down here, then (assert() that) it is of the correct
4068 form to make it copy on write again */
4069 if ((sflags & (SVf_FAKE | SVf_READONLY))
4070 != (SVf_FAKE | SVf_READONLY)) {
4071 SvREADONLY_on(sstr);
4073 /* Make the source SV into a loop of 1.
4074 (about to become 2) */
4075 SV_COW_NEXT_SV_SET(sstr, sstr);
4079 /* Initial code is common. */
4080 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4085 /* making another shared SV. */
4086 STRLEN cur = SvCUR(sstr);
4087 STRLEN len = SvLEN(sstr);
4088 #ifdef PERL_OLD_COPY_ON_WRITE
4090 assert (SvTYPE(dstr) >= SVt_PVIV);
4091 /* SvIsCOW_normal */
4092 /* splice us in between source and next-after-source. */
4093 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4094 SV_COW_NEXT_SV_SET(sstr, dstr);
4095 SvPV_set(dstr, SvPVX_mutable(sstr));
4099 /* SvIsCOW_shared_hash */
4100 DEBUG_C(PerlIO_printf(Perl_debug_log,
4101 "Copy on write: Sharing hash\n"));
4103 assert (SvTYPE(dstr) >= SVt_PV);
4105 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4107 SvLEN_set(dstr, len);
4108 SvCUR_set(dstr, cur);
4109 SvREADONLY_on(dstr);
4111 /* Relesase a global SV mutex. */
4114 { /* Passes the swipe test. */
4115 SvPV_set(dstr, SvPVX_mutable(sstr));
4116 SvLEN_set(dstr, SvLEN(sstr));
4117 SvCUR_set(dstr, SvCUR(sstr));
4120 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4121 SvPV_set(sstr, Nullch);
4127 if (sflags & SVf_UTF8)
4129 if (sflags & SVp_NOK) {
4131 if (sflags & SVf_NOK)
4132 SvFLAGS(dstr) |= SVf_NOK;
4133 SvNV_set(dstr, SvNVX(sstr));
4135 if (sflags & SVp_IOK) {
4136 (void)SvIOKp_on(dstr);
4137 if (sflags & SVf_IOK)
4138 SvFLAGS(dstr) |= SVf_IOK;
4139 if (sflags & SVf_IVisUV)
4141 SvIV_set(dstr, SvIVX(sstr));
4144 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4145 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4146 smg->mg_ptr, smg->mg_len);
4147 SvRMAGICAL_on(dstr);
4150 else if (sflags & SVp_IOK) {
4151 if (sflags & SVf_IOK)
4152 (void)SvIOK_only(dstr);
4154 (void)SvOK_off(dstr);
4155 (void)SvIOKp_on(dstr);
4157 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4158 if (sflags & SVf_IVisUV)
4160 SvIV_set(dstr, SvIVX(sstr));
4161 if (sflags & SVp_NOK) {
4162 if (sflags & SVf_NOK)
4163 (void)SvNOK_on(dstr);
4165 (void)SvNOKp_on(dstr);
4166 SvNV_set(dstr, SvNVX(sstr));
4169 else if (sflags & SVp_NOK) {
4170 if (sflags & SVf_NOK)
4171 (void)SvNOK_only(dstr);
4173 (void)SvOK_off(dstr);
4176 SvNV_set(dstr, SvNVX(sstr));
4179 if (dtype == SVt_PVGV) {
4180 if (ckWARN(WARN_MISC))
4181 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4184 (void)SvOK_off(dstr);
4186 if (SvTAINTED(sstr))
4191 =for apidoc sv_setsv_mg
4193 Like C<sv_setsv>, but also handles 'set' magic.
4199 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4201 sv_setsv(dstr,sstr);
4205 #ifdef PERL_OLD_COPY_ON_WRITE
4207 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4209 STRLEN cur = SvCUR(sstr);
4210 STRLEN len = SvLEN(sstr);
4211 register char *new_pv;
4214 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4222 if (SvTHINKFIRST(dstr))
4223 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4224 else if (SvPVX_const(dstr))
4225 Safefree(SvPVX_const(dstr));
4229 SvUPGRADE(dstr, SVt_PVIV);
4231 assert (SvPOK(sstr));
4232 assert (SvPOKp(sstr));
4233 assert (!SvIOK(sstr));
4234 assert (!SvIOKp(sstr));
4235 assert (!SvNOK(sstr));
4236 assert (!SvNOKp(sstr));
4238 if (SvIsCOW(sstr)) {
4240 if (SvLEN(sstr) == 0) {
4241 /* source is a COW shared hash key. */
4242 DEBUG_C(PerlIO_printf(Perl_debug_log,
4243 "Fast copy on write: Sharing hash\n"));
4244 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4247 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4249 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4250 SvUPGRADE(sstr, SVt_PVIV);
4251 SvREADONLY_on(sstr);
4253 DEBUG_C(PerlIO_printf(Perl_debug_log,
4254 "Fast copy on write: Converting sstr to COW\n"));
4255 SV_COW_NEXT_SV_SET(dstr, sstr);
4257 SV_COW_NEXT_SV_SET(sstr, dstr);
4258 new_pv = SvPVX_mutable(sstr);
4261 SvPV_set(dstr, new_pv);
4262 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4265 SvLEN_set(dstr, len);
4266 SvCUR_set(dstr, cur);
4275 =for apidoc sv_setpvn
4277 Copies a string into an SV. The C<len> parameter indicates the number of
4278 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4279 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4285 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4287 register char *dptr;
4289 SV_CHECK_THINKFIRST_COW_DROP(sv);
4295 /* len is STRLEN which is unsigned, need to copy to signed */
4298 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4300 SvUPGRADE(sv, SVt_PV);
4302 dptr = SvGROW(sv, len + 1);
4303 Move(ptr,dptr,len,char);
4306 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4311 =for apidoc sv_setpvn_mg
4313 Like C<sv_setpvn>, but also handles 'set' magic.
4319 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4321 sv_setpvn(sv,ptr,len);
4326 =for apidoc sv_setpv
4328 Copies a string into an SV. The string must be null-terminated. Does not
4329 handle 'set' magic. See C<sv_setpv_mg>.
4335 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4337 register STRLEN len;
4339 SV_CHECK_THINKFIRST_COW_DROP(sv);
4345 SvUPGRADE(sv, SVt_PV);
4347 SvGROW(sv, len + 1);
4348 Move(ptr,SvPVX(sv),len+1,char);
4350 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4355 =for apidoc sv_setpv_mg
4357 Like C<sv_setpv>, but also handles 'set' magic.
4363 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4370 =for apidoc sv_usepvn
4372 Tells an SV to use C<ptr> to find its string value. Normally the string is
4373 stored inside the SV but sv_usepvn allows the SV to use an outside string.
4374 The C<ptr> should point to memory that was allocated by C<malloc>. The
4375 string length, C<len>, must be supplied. This function will realloc the
4376 memory pointed to by C<ptr>, so that pointer should not be freed or used by
4377 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
4378 See C<sv_usepvn_mg>.
4384 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4387 SV_CHECK_THINKFIRST_COW_DROP(sv);
4388 SvUPGRADE(sv, SVt_PV);
4393 if (SvPVX_const(sv))
4396 allocate = PERL_STRLEN_ROUNDUP(len + 1);
4397 ptr = saferealloc (ptr, allocate);
4400 SvLEN_set(sv, allocate);
4402 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4407 =for apidoc sv_usepvn_mg
4409 Like C<sv_usepvn>, but also handles 'set' magic.
4415 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4417 sv_usepvn(sv,ptr,len);
4421 #ifdef PERL_OLD_COPY_ON_WRITE
4422 /* Need to do this *after* making the SV normal, as we need the buffer
4423 pointer to remain valid until after we've copied it. If we let go too early,
4424 another thread could invalidate it by unsharing last of the same hash key
4425 (which it can do by means other than releasing copy-on-write Svs)
4426 or by changing the other copy-on-write SVs in the loop. */
4428 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, STRLEN len, SV *after)
4430 if (len) { /* this SV was SvIsCOW_normal(sv) */
4431 /* we need to find the SV pointing to us. */
4432 SV * const current = SV_COW_NEXT_SV(after);
4434 if (current == sv) {
4435 /* The SV we point to points back to us (there were only two of us
4437 Hence other SV is no longer copy on write either. */
4439 SvREADONLY_off(after);
4441 /* We need to follow the pointers around the loop. */
4443 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4446 /* don't loop forever if the structure is bust, and we have
4447 a pointer into a closed loop. */
4448 assert (current != after);
4449 assert (SvPVX_const(current) == pvx);
4451 /* Make the SV before us point to the SV after us. */
4452 SV_COW_NEXT_SV_SET(current, after);
4455 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4460 Perl_sv_release_IVX(pTHX_ register SV *sv)
4463 sv_force_normal_flags(sv, 0);
4469 =for apidoc sv_force_normal_flags
4471 Undo various types of fakery on an SV: if the PV is a shared string, make
4472 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4473 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4474 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4475 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4476 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4477 set to some other value.) In addition, the C<flags> parameter gets passed to
4478 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4479 with flags set to 0.
4485 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4487 #ifdef PERL_OLD_COPY_ON_WRITE
4488 if (SvREADONLY(sv)) {
4489 /* At this point I believe I should acquire a global SV mutex. */
4491 const char * const pvx = SvPVX_const(sv);
4492 const STRLEN len = SvLEN(sv);
4493 const STRLEN cur = SvCUR(sv);
4494 SV * const next = SV_COW_NEXT_SV(sv); /* next COW sv in the loop. */
4496 PerlIO_printf(Perl_debug_log,
4497 "Copy on write: Force normal %ld\n",
4503 /* This SV doesn't own the buffer, so need to Newx() a new one: */
4504 SvPV_set(sv, (char*)0);
4506 if (flags & SV_COW_DROP_PV) {
4507 /* OK, so we don't need to copy our buffer. */
4510 SvGROW(sv, cur + 1);
4511 Move(pvx,SvPVX(sv),cur,char);
4515 sv_release_COW(sv, pvx, len, next);
4520 else if (IN_PERL_RUNTIME)
4521 Perl_croak(aTHX_ PL_no_modify);
4522 /* At this point I believe that I can drop the global SV mutex. */
4525 if (SvREADONLY(sv)) {
4527 const char * const pvx = SvPVX_const(sv);
4528 const STRLEN len = SvCUR(sv);
4531 SvPV_set(sv, Nullch);
4533 SvGROW(sv, len + 1);
4534 Move(pvx,SvPVX(sv),len,char);
4536 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4538 else if (IN_PERL_RUNTIME)
4539 Perl_croak(aTHX_ PL_no_modify);
4543 sv_unref_flags(sv, flags);
4544 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4551 Efficient removal of characters from the beginning of the string buffer.
4552 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4553 the string buffer. The C<ptr> becomes the first character of the adjusted
4554 string. Uses the "OOK hack".
4555 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4556 refer to the same chunk of data.
4562 Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
4564 register STRLEN delta;
4565 if (!ptr || !SvPOKp(sv))
4567 delta = ptr - SvPVX_const(sv);
4568 SV_CHECK_THINKFIRST(sv);
4569 if (SvTYPE(sv) < SVt_PVIV)
4570 sv_upgrade(sv,SVt_PVIV);
4573 if (!SvLEN(sv)) { /* make copy of shared string */
4574 const char *pvx = SvPVX_const(sv);
4575 const STRLEN len = SvCUR(sv);
4576 SvGROW(sv, len + 1);
4577 Move(pvx,SvPVX(sv),len,char);
4581 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4582 and we do that anyway inside the SvNIOK_off
4584 SvFLAGS(sv) |= SVf_OOK;
4587 SvLEN_set(sv, SvLEN(sv) - delta);
4588 SvCUR_set(sv, SvCUR(sv) - delta);
4589 SvPV_set(sv, SvPVX(sv) + delta);
4590 SvIV_set(sv, SvIVX(sv) + delta);
4594 =for apidoc sv_catpvn
4596 Concatenates the string onto the end of the string which is in the SV. The
4597 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4598 status set, then the bytes appended should be valid UTF-8.
4599 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4601 =for apidoc sv_catpvn_flags
4603 Concatenates the string onto the end of the string which is in the SV. The
4604 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4605 status set, then the bytes appended should be valid UTF-8.
4606 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4607 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4608 in terms of this function.
4614 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4617 const char *dstr = SvPV_force_flags(dsv, dlen, flags);
4619 SvGROW(dsv, dlen + slen + 1);
4621 sstr = SvPVX_const(dsv);
4622 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4623 SvCUR_set(dsv, SvCUR(dsv) + slen);
4625 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4627 if (flags & SV_SMAGIC)
4632 =for apidoc sv_catsv
4634 Concatenates the string from SV C<ssv> onto the end of the string in
4635 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4636 not 'set' magic. See C<sv_catsv_mg>.
4638 =for apidoc sv_catsv_flags
4640 Concatenates the string from SV C<ssv> onto the end of the string in
4641 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4642 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4643 and C<sv_catsv_nomg> are implemented in terms of this function.
4648 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4653 if ((spv = SvPV_const(ssv, slen))) {
4654 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4655 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4656 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4657 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4658 dsv->sv_flags doesn't have that bit set.
4659 Andy Dougherty 12 Oct 2001
4661 const I32 sutf8 = DO_UTF8(ssv);
4664 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4666 dutf8 = DO_UTF8(dsv);
4668 if (dutf8 != sutf8) {
4670 /* Not modifying source SV, so taking a temporary copy. */
4671 SV* csv = sv_2mortal(newSVpvn(spv, slen));
4673 sv_utf8_upgrade(csv);
4674 spv = SvPV_const(csv, slen);
4677 sv_utf8_upgrade_nomg(dsv);
4679 sv_catpvn_nomg(dsv, spv, slen);
4682 if (flags & SV_SMAGIC)
4687 =for apidoc sv_catpv
4689 Concatenates the string onto the end of the string which is in the SV.
4690 If the SV has the UTF-8 status set, then the bytes appended should be
4691 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4696 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4698 register STRLEN len;
4704 junk = SvPV_force(sv, tlen);
4706 SvGROW(sv, tlen + len + 1);
4708 ptr = SvPVX_const(sv);
4709 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4710 SvCUR_set(sv, SvCUR(sv) + len);
4711 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4716 =for apidoc sv_catpv_mg
4718 Like C<sv_catpv>, but also handles 'set' magic.
4724 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4733 Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
4734 with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
4741 Perl_newSV(pTHX_ STRLEN len)
4747 sv_upgrade(sv, SVt_PV);
4748 SvGROW(sv, len + 1);
4753 =for apidoc sv_magicext
4755 Adds magic to an SV, upgrading it if necessary. Applies the
4756 supplied vtable and returns a pointer to the magic added.
4758 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4759 In particular, you can add magic to SvREADONLY SVs, and add more than
4760 one instance of the same 'how'.
4762 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4763 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4764 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4765 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4767 (This is now used as a subroutine by C<sv_magic>.)
4772 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, const MGVTBL *vtable,
4773 const char* name, I32 namlen)
4777 if (SvTYPE(sv) < SVt_PVMG) {
4778 SvUPGRADE(sv, SVt_PVMG);
4780 Newxz(mg, 1, MAGIC);
4781 mg->mg_moremagic = SvMAGIC(sv);
4782 SvMAGIC_set(sv, mg);
4784 /* Sometimes a magic contains a reference loop, where the sv and
4785 object refer to each other. To prevent a reference loop that
4786 would prevent such objects being freed, we look for such loops
4787 and if we find one we avoid incrementing the object refcount.
4789 Note we cannot do this to avoid self-tie loops as intervening RV must
4790 have its REFCNT incremented to keep it in existence.
4793 if (!obj || obj == sv ||
4794 how == PERL_MAGIC_arylen ||
4795 how == PERL_MAGIC_qr ||
4796 how == PERL_MAGIC_symtab ||
4797 (SvTYPE(obj) == SVt_PVGV &&
4798 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4799 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4800 GvFORM(obj) == (CV*)sv)))
4805 mg->mg_obj = SvREFCNT_inc(obj);
4806 mg->mg_flags |= MGf_REFCOUNTED;
4809 /* Normal self-ties simply pass a null object, and instead of
4810 using mg_obj directly, use the SvTIED_obj macro to produce a
4811 new RV as needed. For glob "self-ties", we are tieing the PVIO
4812 with an RV obj pointing to the glob containing the PVIO. In
4813 this case, to avoid a reference loop, we need to weaken the
4817 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4818 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4824 mg->mg_len = namlen;
4827 mg->mg_ptr = savepvn(name, namlen);
4828 else if (namlen == HEf_SVKEY)
4829 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4831 mg->mg_ptr = (char *) name;
4833 mg->mg_virtual = vtable;
4837 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4842 =for apidoc sv_magic
4844 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4845 then adds a new magic item of type C<how> to the head of the magic list.
4847 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4848 handling of the C<name> and C<namlen> arguments.
4850 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4851 to add more than one instance of the same 'how'.
4857 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4859 const MGVTBL *vtable;
4862 #ifdef PERL_OLD_COPY_ON_WRITE
4864 sv_force_normal_flags(sv, 0);
4866 if (SvREADONLY(sv)) {
4868 /* its okay to attach magic to shared strings; the subsequent
4869 * upgrade to PVMG will unshare the string */
4870 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4873 && how != PERL_MAGIC_regex_global
4874 && how != PERL_MAGIC_bm
4875 && how != PERL_MAGIC_fm
4876 && how != PERL_MAGIC_sv
4877 && how != PERL_MAGIC_backref
4880 Perl_croak(aTHX_ PL_no_modify);
4883 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4884 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4885 /* sv_magic() refuses to add a magic of the same 'how' as an
4888 if (how == PERL_MAGIC_taint)
4896 vtable = &PL_vtbl_sv;
4898 case PERL_MAGIC_overload:
4899 vtable = &PL_vtbl_amagic;
4901 case PERL_MAGIC_overload_elem:
4902 vtable = &PL_vtbl_amagicelem;
4904 case PERL_MAGIC_overload_table:
4905 vtable = &PL_vtbl_ovrld;
4908 vtable = &PL_vtbl_bm;
4910 case PERL_MAGIC_regdata:
4911 vtable = &PL_vtbl_regdata;
4913 case PERL_MAGIC_regdatum:
4914 vtable = &PL_vtbl_regdatum;
4916 case PERL_MAGIC_env:
4917 vtable = &PL_vtbl_env;
4920 vtable = &PL_vtbl_fm;
4922 case PERL_MAGIC_envelem:
4923 vtable = &PL_vtbl_envelem;
4925 case PERL_MAGIC_regex_global:
4926 vtable = &PL_vtbl_mglob;
4928 case PERL_MAGIC_isa:
4929 vtable = &PL_vtbl_isa;
4931 case PERL_MAGIC_isaelem:
4932 vtable = &PL_vtbl_isaelem;
4934 case PERL_MAGIC_nkeys:
4935 vtable = &PL_vtbl_nkeys;
4937 case PERL_MAGIC_dbfile:
4940 case PERL_MAGIC_dbline:
4941 vtable = &PL_vtbl_dbline;
4943 #ifdef USE_LOCALE_COLLATE
4944 case PERL_MAGIC_collxfrm:
4945 vtable = &PL_vtbl_collxfrm;
4947 #endif /* USE_LOCALE_COLLATE */
4948 case PERL_MAGIC_tied:
4949 vtable = &PL_vtbl_pack;
4951 case PERL_MAGIC_tiedelem:
4952 case PERL_MAGIC_tiedscalar:
4953 vtable = &PL_vtbl_packelem;
4956 vtable = &PL_vtbl_regexp;
4958 case PERL_MAGIC_sig:
4959 vtable = &PL_vtbl_sig;
4961 case PERL_MAGIC_sigelem:
4962 vtable = &PL_vtbl_sigelem;
4964 case PERL_MAGIC_taint:
4965 vtable = &PL_vtbl_taint;
4967 case PERL_MAGIC_uvar:
4968 vtable = &PL_vtbl_uvar;
4970 case PERL_MAGIC_vec:
4971 vtable = &PL_vtbl_vec;
4973 case PERL_MAGIC_arylen_p:
4974 case PERL_MAGIC_rhash:
4975 case PERL_MAGIC_symtab:
4976 case PERL_MAGIC_vstring:
4979 case PERL_MAGIC_utf8:
4980 vtable = &PL_vtbl_utf8;
4982 case PERL_MAGIC_substr:
4983 vtable = &PL_vtbl_substr;
4985 case PERL_MAGIC_defelem:
4986 vtable = &PL_vtbl_defelem;
4988 case PERL_MAGIC_glob:
4989 vtable = &PL_vtbl_glob;
4991 case PERL_MAGIC_arylen:
4992 vtable = &PL_vtbl_arylen;
4994 case PERL_MAGIC_pos:
4995 vtable = &PL_vtbl_pos;
4997 case PERL_MAGIC_backref:
4998 vtable = &PL_vtbl_backref;
5000 case PERL_MAGIC_ext:
5001 /* Reserved for use by extensions not perl internals. */
5002 /* Useful for attaching extension internal data to perl vars. */
5003 /* Note that multiple extensions may clash if magical scalars */
5004 /* etc holding private data from one are passed to another. */
5008 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5011 /* Rest of work is done else where */
5012 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5015 case PERL_MAGIC_taint:
5018 case PERL_MAGIC_ext:
5019 case PERL_MAGIC_dbfile:
5026 =for apidoc sv_unmagic
5028 Removes all magic of type C<type> from an SV.
5034 Perl_sv_unmagic(pTHX_ SV *sv, int type)
5038 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5041 for (mg = *mgp; mg; mg = *mgp) {
5042 if (mg->mg_type == type) {
5043 const MGVTBL* const vtbl = mg->mg_virtual;
5044 *mgp = mg->mg_moremagic;
5045 if (vtbl && vtbl->svt_free)
5046 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
5047 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5049 Safefree(mg->mg_ptr);
5050 else if (mg->mg_len == HEf_SVKEY)
5051 SvREFCNT_dec((SV*)mg->mg_ptr);
5052 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
5053 Safefree(mg->mg_ptr);
5055 if (mg->mg_flags & MGf_REFCOUNTED)
5056 SvREFCNT_dec(mg->mg_obj);
5060 mgp = &mg->mg_moremagic;
5064 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5071 =for apidoc sv_rvweaken
5073 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5074 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5075 push a back-reference to this RV onto the array of backreferences
5076 associated with that magic.
5082 Perl_sv_rvweaken(pTHX_ SV *sv)
5085 if (!SvOK(sv)) /* let undefs pass */
5088 Perl_croak(aTHX_ "Can't weaken a nonreference");
5089 else if (SvWEAKREF(sv)) {
5090 if (ckWARN(WARN_MISC))
5091 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5095 Perl_sv_add_backref(aTHX_ tsv, sv);
5101 /* Give tsv backref magic if it hasn't already got it, then push a
5102 * back-reference to sv onto the array associated with the backref magic.
5106 Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
5110 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
5111 av = (AV*)mg->mg_obj;
5114 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
5115 /* av now has a refcnt of 2, which avoids it getting freed
5116 * before us during global cleanup. The extra ref is removed
5117 * by magic_killbackrefs() when tsv is being freed */
5119 if (AvFILLp(av) >= AvMAX(av)) {
5120 av_extend(av, AvFILLp(av)+1);
5122 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5125 /* delete a back-reference to ourselves from the backref magic associated
5126 * with the SV we point to.
5130 S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
5136 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref))) {
5137 if (PL_in_clean_all)
5140 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
5141 Perl_croak(aTHX_ "panic: del_backref");
5142 av = (AV *)mg->mg_obj;
5144 /* We shouldn't be in here more than once, but for paranoia reasons lets
5146 for (i = AvFILLp(av); i >= 0; i--) {
5148 const SSize_t fill = AvFILLp(av);
5150 /* We weren't the last entry.
5151 An unordered list has this property that you can take the
5152 last element off the end to fill the hole, and it's still
5153 an unordered list :-)
5158 AvFILLp(av) = fill - 1;
5164 =for apidoc sv_insert
5166 Inserts a string at the specified offset/length within the SV. Similar to
5167 the Perl substr() function.
5173 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
5177 register char *midend;
5178 register char *bigend;
5184 Perl_croak(aTHX_ "Can't modify non-existent substring");
5185 SvPV_force(bigstr, curlen);
5186 (void)SvPOK_only_UTF8(bigstr);
5187 if (offset + len > curlen) {
5188 SvGROW(bigstr, offset+len+1);
5189 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5190 SvCUR_set(bigstr, offset+len);
5194 i = littlelen - len;
5195 if (i > 0) { /* string might grow */
5196 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5197 mid = big + offset + len;
5198 midend = bigend = big + SvCUR(bigstr);
5201 while (midend > mid) /* shove everything down */
5202 *--bigend = *--midend;
5203 Move(little,big+offset,littlelen,char);
5204 SvCUR_set(bigstr, SvCUR(bigstr) + i);
5209 Move(little,SvPVX(bigstr)+offset,len,char);
5214 big = SvPVX(bigstr);
5217 bigend = big + SvCUR(bigstr);
5219 if (midend > bigend)
5220 Perl_croak(aTHX_ "panic: sv_insert");
5222 if (mid - big > bigend - midend) { /* faster to shorten from end */
5224 Move(little, mid, littlelen,char);
5227 i = bigend - midend;
5229 Move(midend, mid, i,char);
5233 SvCUR_set(bigstr, mid - big);
5235 else if ((i = mid - big)) { /* faster from front */
5236 midend -= littlelen;
5238 sv_chop(bigstr,midend-i);
5243 Move(little, mid, littlelen,char);
5245 else if (littlelen) {
5246 midend -= littlelen;
5247 sv_chop(bigstr,midend);
5248 Move(little,midend,littlelen,char);
5251 sv_chop(bigstr,midend);
5257 =for apidoc sv_replace
5259 Make the first argument a copy of the second, then delete the original.
5260 The target SV physically takes over ownership of the body of the source SV
5261 and inherits its flags; however, the target keeps any magic it owns,
5262 and any magic in the source is discarded.
5263 Note that this is a rather specialist SV copying operation; most of the
5264 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5270 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
5272 const U32 refcnt = SvREFCNT(sv);
5273 SV_CHECK_THINKFIRST_COW_DROP(sv);
5274 if (SvREFCNT(nsv) != 1) {
5275 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
5276 UVuf " != 1)", (UV) SvREFCNT(nsv));
5278 if (SvMAGICAL(sv)) {
5282 sv_upgrade(nsv, SVt_PVMG);
5283 SvMAGIC_set(nsv, SvMAGIC(sv));
5284 SvFLAGS(nsv) |= SvMAGICAL(sv);
5286 SvMAGIC_set(sv, NULL);
5290 assert(!SvREFCNT(sv));
5291 #ifdef DEBUG_LEAKING_SCALARS
5292 sv->sv_flags = nsv->sv_flags;
5293 sv->sv_any = nsv->sv_any;
5294 sv->sv_refcnt = nsv->sv_refcnt;
5295 sv->sv_u = nsv->sv_u;
5297 StructCopy(nsv,sv,SV);
5299 /* Currently could join these into one piece of pointer arithmetic, but
5300 it would be unclear. */
5301 if(SvTYPE(sv) == SVt_IV)
5303 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5304 else if (SvTYPE(sv) == SVt_RV) {
5305 SvANY(sv) = &sv->sv_u.svu_rv;
5309 #ifdef PERL_OLD_COPY_ON_WRITE
5310 if (SvIsCOW_normal(nsv)) {
5311 /* We need to follow the pointers around the loop to make the
5312 previous SV point to sv, rather than nsv. */
5315 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5318 assert(SvPVX_const(current) == SvPVX_const(nsv));
5320 /* Make the SV before us point to the SV after us. */
5322 PerlIO_printf(Perl_debug_log, "previous is\n");
5324 PerlIO_printf(Perl_debug_log,
5325 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5326 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5328 SV_COW_NEXT_SV_SET(current, sv);
5331 SvREFCNT(sv) = refcnt;
5332 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5338 =for apidoc sv_clear
5340 Clear an SV: call any destructors, free up any memory used by the body,
5341 and free the body itself. The SV's head is I<not> freed, although
5342 its type is set to all 1's so that it won't inadvertently be assumed
5343 to be live during global destruction etc.
5344 This function should only be called when REFCNT is zero. Most of the time
5345 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5352 Perl_sv_clear(pTHX_ register SV *sv)
5355 void** old_body_arena;
5356 size_t old_body_offset;
5357 const U32 type = SvTYPE(sv);
5360 assert(SvREFCNT(sv) == 0);
5366 old_body_offset = 0;
5369 if (PL_defstash) { /* Still have a symbol table? */
5374 stash = SvSTASH(sv);
5375 destructor = StashHANDLER(stash,DESTROY);
5377 SV* const tmpref = newRV(sv);
5378 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5380 PUSHSTACKi(PERLSI_DESTROY);
5385 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5391 if(SvREFCNT(tmpref) < 2) {
5392 /* tmpref is not kept alive! */
5394 SvRV_set(tmpref, NULL);
5397 SvREFCNT_dec(tmpref);
5399 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5403 if (PL_in_clean_objs)
5404 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5406 /* DESTROY gave object new lease on life */
5412 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5413 SvOBJECT_off(sv); /* Curse the object. */
5414 if (type != SVt_PVIO)
5415 --PL_sv_objcount; /* XXX Might want something more general */
5418 if (type >= SVt_PVMG) {
5421 if (type == SVt_PVMG && SvFLAGS(sv) & SVpad_TYPED)
5422 SvREFCNT_dec(SvSTASH(sv));
5427 IoIFP(sv) != PerlIO_stdin() &&
5428 IoIFP(sv) != PerlIO_stdout() &&
5429 IoIFP(sv) != PerlIO_stderr())
5431 io_close((IO*)sv, FALSE);
5433 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5434 PerlDir_close(IoDIRP(sv));
5435 IoDIRP(sv) = (DIR*)NULL;
5436 Safefree(IoTOP_NAME(sv));
5437 Safefree(IoFMT_NAME(sv));
5438 Safefree(IoBOTTOM_NAME(sv));
5439 /* PVIOs aren't from arenas */
5442 old_body_arena = &PL_body_roots[SVt_PVBM];
5445 old_body_arena = &PL_body_roots[SVt_PVCV];
5447 /* PVFMs aren't from arenas */
5452 old_body_arena = &PL_body_roots[SVt_PVHV];
5453 old_body_offset = STRUCT_OFFSET(XPVHV, xhv_fill);
5457 old_body_arena = &PL_body_roots[SVt_PVAV];
5458 old_body_offset = STRUCT_OFFSET(XPVAV, xav_fill);
5461 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5462 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5463 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5464 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5466 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5467 SvREFCNT_dec(LvTARG(sv));
5468 old_body_arena = &PL_body_roots[SVt_PVLV];
5472 Safefree(GvNAME(sv));
5473 /* If we're in a stash, we don't own a reference to it. However it does
5474 have a back reference to us, which needs to be cleared. */
5476 sv_del_backref((SV*)GvSTASH(sv), sv);
5477 old_body_arena = &PL_body_roots[SVt_PVGV];
5480 old_body_arena = &PL_body_roots[SVt_PVMG];
5483 old_body_arena = &PL_body_roots[SVt_PVNV];
5486 old_body_arena = &PL_body_roots[SVt_PVIV];
5487 old_body_offset = STRUCT_OFFSET(XPVIV, xpv_cur);
5489 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5491 SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv));
5492 /* Don't even bother with turning off the OOK flag. */
5496 old_body_arena = &PL_body_roots[SVt_PV];
5497 old_body_offset = STRUCT_OFFSET(XPV, xpv_cur);
5501 SV *target = SvRV(sv);
5503 sv_del_backref(target, sv);
5505 SvREFCNT_dec(target);
5507 #ifdef PERL_OLD_COPY_ON_WRITE
5508 else if (SvPVX_const(sv)) {
5510 /* I believe I need to grab the global SV mutex here and
5511 then recheck the COW status. */
5513 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
5516 sv_release_COW(sv, SvPVX_const(sv), SvLEN(sv),
5517 SV_COW_NEXT_SV(sv));
5518 /* And drop it here. */
5520 } else if (SvLEN(sv)) {
5521 Safefree(SvPVX_const(sv));
5525 else if (SvPVX_const(sv) && SvLEN(sv))
5526 Safefree(SvPVX_mutable(sv));
5527 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5528 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5534 old_body_arena = PL_body_roots[SVt_NV];
5538 SvFLAGS(sv) &= SVf_BREAK;
5539 SvFLAGS(sv) |= SVTYPEMASK;
5542 if (old_body_arena) {
5543 del_body(((char *)SvANY(sv) + old_body_offset), old_body_arena);
5547 if (type > SVt_RV) {
5548 my_safefree(SvANY(sv));
5553 =for apidoc sv_newref
5555 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5562 Perl_sv_newref(pTHX_ SV *sv)
5572 Decrement an SV's reference count, and if it drops to zero, call
5573 C<sv_clear> to invoke destructors and free up any memory used by
5574 the body; finally, deallocate the SV's head itself.
5575 Normally called via a wrapper macro C<SvREFCNT_dec>.
5581 Perl_sv_free(pTHX_ SV *sv)
5586 if (SvREFCNT(sv) == 0) {
5587 if (SvFLAGS(sv) & SVf_BREAK)
5588 /* this SV's refcnt has been artificially decremented to
5589 * trigger cleanup */
5591 if (PL_in_clean_all) /* All is fair */
5593 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5594 /* make sure SvREFCNT(sv)==0 happens very seldom */
5595 SvREFCNT(sv) = (~(U32)0)/2;
5598 if (ckWARN_d(WARN_INTERNAL)) {
5599 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5600 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5601 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5602 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5603 Perl_dump_sv_child(aTHX_ sv);
5608 if (--(SvREFCNT(sv)) > 0)
5610 Perl_sv_free2(aTHX_ sv);
5614 Perl_sv_free2(pTHX_ SV *sv)
5619 if (ckWARN_d(WARN_DEBUGGING))
5620 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5621 "Attempt to free temp prematurely: SV 0x%"UVxf
5622 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5626 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5627 /* make sure SvREFCNT(sv)==0 happens very seldom */
5628 SvREFCNT(sv) = (~(U32)0)/2;
5639 Returns the length of the string in the SV. Handles magic and type
5640 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5646 Perl_sv_len(pTHX_ register SV *sv)
5654 len = mg_length(sv);
5656 (void)SvPV_const(sv, len);
5661 =for apidoc sv_len_utf8
5663 Returns the number of characters in the string in an SV, counting wide
5664 UTF-8 bytes as a single character. Handles magic and type coercion.
5670 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
5671 * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init().
5672 * (Note that the mg_len is not the length of the mg_ptr field.)
5677 Perl_sv_len_utf8(pTHX_ register SV *sv)
5683 return mg_length(sv);
5687 const U8 *s = (U8*)SvPV_const(sv, len);
5688 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
5690 if (mg && mg->mg_len != -1 && (mg->mg_len > 0 || len == 0)) {
5692 #ifdef PERL_UTF8_CACHE_ASSERT
5693 assert(ulen == Perl_utf8_length(aTHX_ s, s + len));
5697 ulen = Perl_utf8_length(aTHX_ s, s + len);
5698 if (!mg && !SvREADONLY(sv)) {
5699 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5700 mg = mg_find(sv, PERL_MAGIC_utf8);
5710 /* S_utf8_mg_pos_init() is used to initialize the mg_ptr field of
5711 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5712 * between UTF-8 and byte offsets. There are two (substr offset and substr
5713 * length, the i offset, PERL_MAGIC_UTF8_CACHESIZE) times two (UTF-8 offset
5714 * and byte offset) cache positions.
5716 * The mg_len field is used by sv_len_utf8(), see its comments.
5717 * Note that the mg_len is not the length of the mg_ptr field.
5721 S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i,
5722 I32 offsetp, const U8 *s, const U8 *start)
5726 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5728 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0, 0);
5732 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5734 Newxz(*cachep, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5735 (*mgp)->mg_ptr = (char *) *cachep;
5739 (*cachep)[i] = offsetp;
5740 (*cachep)[i+1] = s - start;
5748 * S_utf8_mg_pos() is used to query and update mg_ptr field of
5749 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5750 * between UTF-8 and byte offsets. See also the comments of
5751 * S_utf8_mg_pos_init().
5755 S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I32 uoff, const U8 **sp, const U8 *start, const U8 *send)
5759 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5761 *mgp = mg_find(sv, PERL_MAGIC_utf8);
5762 if (*mgp && (*mgp)->mg_ptr) {
5763 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5764 ASSERT_UTF8_CACHE(*cachep);
5765 if ((*cachep)[i] == (STRLEN)uoff) /* An exact match. */
5767 else { /* We will skip to the right spot. */
5772 /* The assumption is that going backward is half
5773 * the speed of going forward (that's where the
5774 * 2 * backw in the below comes from). (The real
5775 * figure of course depends on the UTF-8 data.) */
5777 if ((*cachep)[i] > (STRLEN)uoff) {
5779 backw = (*cachep)[i] - (STRLEN)uoff;
5781 if (forw < 2 * backw)
5784 p = start + (*cachep)[i+1];
5786 /* Try this only for the substr offset (i == 0),
5787 * not for the substr length (i == 2). */
5788 else if (i == 0) { /* (*cachep)[i] < uoff */
5789 const STRLEN ulen = sv_len_utf8(sv);
5791 if ((STRLEN)uoff < ulen) {
5792 forw = (STRLEN)uoff - (*cachep)[i];
5793 backw = ulen - (STRLEN)uoff;
5795 if (forw < 2 * backw)
5796 p = start + (*cachep)[i+1];
5801 /* If the string is not long enough for uoff,
5802 * we could extend it, but not at this low a level. */
5806 if (forw < 2 * backw) {
5813 while (UTF8_IS_CONTINUATION(*p))
5818 /* Update the cache. */
5819 (*cachep)[i] = (STRLEN)uoff;
5820 (*cachep)[i+1] = p - start;
5822 /* Drop the stale "length" cache */
5831 if (found) { /* Setup the return values. */
5832 *offsetp = (*cachep)[i+1];
5833 *sp = start + *offsetp;
5836 *offsetp = send - start;
5838 else if (*sp < start) {
5844 #ifdef PERL_UTF8_CACHE_ASSERT
5849 while (n-- && s < send)
5853 assert(*offsetp == s - start);
5854 assert((*cachep)[0] == (STRLEN)uoff);
5855 assert((*cachep)[1] == *offsetp);
5857 ASSERT_UTF8_CACHE(*cachep);
5866 =for apidoc sv_pos_u2b
5868 Converts the value pointed to by offsetp from a count of UTF-8 chars from
5869 the start of the string, to a count of the equivalent number of bytes; if
5870 lenp is non-zero, it does the same to lenp, but this time starting from
5871 the offset, rather than from the start of the string. Handles magic and
5878 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5879 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5880 * byte offsets. See also the comments of S_utf8_mg_pos().
5885 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
5893 start = (U8*)SvPV_const(sv, len);
5897 const U8 *s = start;
5898 I32 uoffset = *offsetp;
5899 const U8 * const send = s + len;
5903 if (utf8_mg_pos(sv, &mg, &cache, 0, offsetp, *offsetp, &s, start, send))
5905 if (!found && uoffset > 0) {
5906 while (s < send && uoffset--)
5910 if (utf8_mg_pos_init(sv, &mg, &cache, 0, *offsetp, s, start))
5912 *offsetp = s - start;
5917 if (utf8_mg_pos(sv, &mg, &cache, 2, lenp, *lenp, &s, start, send)) {
5921 if (!found && *lenp > 0) {
5924 while (s < send && ulen--)
5928 utf8_mg_pos_init(sv, &mg, &cache, 2, *lenp, s, start);
5932 ASSERT_UTF8_CACHE(cache);
5944 =for apidoc sv_pos_b2u
5946 Converts the value pointed to by offsetp from a count of bytes from the
5947 start of the string, to a count of the equivalent number of UTF-8 chars.
5948 Handles magic and type coercion.
5954 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5955 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5956 * byte offsets. See also the comments of S_utf8_mg_pos().
5961 Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
5969 s = (const U8*)SvPV_const(sv, len);
5970 if ((I32)len < *offsetp)
5971 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
5973 const U8* send = s + *offsetp;
5975 STRLEN *cache = NULL;
5979 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5980 mg = mg_find(sv, PERL_MAGIC_utf8);
5981 if (mg && mg->mg_ptr) {
5982 cache = (STRLEN *) mg->mg_ptr;
5983 if (cache[1] == (STRLEN)*offsetp) {
5984 /* An exact match. */
5985 *offsetp = cache[0];
5989 else if (cache[1] < (STRLEN)*offsetp) {
5990 /* We already know part of the way. */
5993 /* Let the below loop do the rest. */
5995 else { /* cache[1] > *offsetp */
5996 /* We already know all of the way, now we may
5997 * be able to walk back. The same assumption
5998 * is made as in S_utf8_mg_pos(), namely that
5999 * walking backward is twice slower than
6000 * walking forward. */
6001 const STRLEN forw = *offsetp;
6002 STRLEN backw = cache[1] - *offsetp;
6004 if (!(forw < 2 * backw)) {
6005 const U8 *p = s + cache[1];
6012 while (UTF8_IS_CONTINUATION(*p)) {
6020 *offsetp = cache[0];
6022 /* Drop the stale "length" cache */
6030 ASSERT_UTF8_CACHE(cache);
6036 /* Call utf8n_to_uvchr() to validate the sequence
6037 * (unless a simple non-UTF character) */
6038 if (!UTF8_IS_INVARIANT(*s))
6039 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
6048 if (!SvREADONLY(sv)) {
6050 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
6051 mg = mg_find(sv, PERL_MAGIC_utf8);
6056 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6057 mg->mg_ptr = (char *) cache;
6062 cache[1] = *offsetp;
6063 /* Drop the stale "length" cache */
6076 Returns a boolean indicating whether the strings in the two SVs are
6077 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6078 coerce its args to strings if necessary.
6084 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
6092 SV* svrecode = Nullsv;
6099 pv1 = SvPV_const(sv1, cur1);
6106 pv2 = SvPV_const(sv2, cur2);
6108 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6109 /* Differing utf8ness.
6110 * Do not UTF8size the comparands as a side-effect. */
6113 svrecode = newSVpvn(pv2, cur2);
6114 sv_recode_to_utf8(svrecode, PL_encoding);
6115 pv2 = SvPV_const(svrecode, cur2);
6118 svrecode = newSVpvn(pv1, cur1);
6119 sv_recode_to_utf8(svrecode, PL_encoding);
6120 pv1 = SvPV_const(svrecode, cur1);
6122 /* Now both are in UTF-8. */
6124 SvREFCNT_dec(svrecode);
6129 bool is_utf8 = TRUE;
6132 /* sv1 is the UTF-8 one,
6133 * if is equal it must be downgrade-able */
6134 char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
6140 /* sv2 is the UTF-8 one,
6141 * if is equal it must be downgrade-able */
6142 char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
6148 /* Downgrade not possible - cannot be eq */
6156 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6159 SvREFCNT_dec(svrecode);
6170 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6171 string in C<sv1> is less than, equal to, or greater than the string in
6172 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6173 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
6179 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
6182 const char *pv1, *pv2;
6185 SV *svrecode = Nullsv;
6192 pv1 = SvPV_const(sv1, cur1);
6199 pv2 = SvPV_const(sv2, cur2);
6201 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6202 /* Differing utf8ness.
6203 * Do not UTF8size the comparands as a side-effect. */
6206 svrecode = newSVpvn(pv2, cur2);
6207 sv_recode_to_utf8(svrecode, PL_encoding);
6208 pv2 = SvPV_const(svrecode, cur2);
6211 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6216 svrecode = newSVpvn(pv1, cur1);
6217 sv_recode_to_utf8(svrecode, PL_encoding);
6218 pv1 = SvPV_const(svrecode, cur1);
6221 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6227 cmp = cur2 ? -1 : 0;
6231 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6234 cmp = retval < 0 ? -1 : 1;
6235 } else if (cur1 == cur2) {
6238 cmp = cur1 < cur2 ? -1 : 1;
6243 SvREFCNT_dec(svrecode);
6252 =for apidoc sv_cmp_locale
6254 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6255 'use bytes' aware, handles get magic, and will coerce its args to strings
6256 if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
6262 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
6264 #ifdef USE_LOCALE_COLLATE
6270 if (PL_collation_standard)
6274 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6276 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6278 if (!pv1 || !len1) {
6289 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6292 return retval < 0 ? -1 : 1;
6295 * When the result of collation is equality, that doesn't mean
6296 * that there are no differences -- some locales exclude some
6297 * characters from consideration. So to avoid false equalities,
6298 * we use the raw string as a tiebreaker.
6304 #endif /* USE_LOCALE_COLLATE */
6306 return sv_cmp(sv1, sv2);
6310 #ifdef USE_LOCALE_COLLATE
6313 =for apidoc sv_collxfrm
6315 Add Collate Transform magic to an SV if it doesn't already have it.
6317 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6318 scalar data of the variable, but transformed to such a format that a normal
6319 memory comparison can be used to compare the data according to the locale
6326 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
6330 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6331 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6337 Safefree(mg->mg_ptr);
6338 s = SvPV_const(sv, len);
6339 if ((xf = mem_collxfrm(s, len, &xlen))) {
6340 if (SvREADONLY(sv)) {
6343 return xf + sizeof(PL_collation_ix);
6346 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
6347 mg = mg_find(sv, PERL_MAGIC_collxfrm);
6360 if (mg && mg->mg_ptr) {
6362 return mg->mg_ptr + sizeof(PL_collation_ix);
6370 #endif /* USE_LOCALE_COLLATE */
6375 Get a line from the filehandle and store it into the SV, optionally
6376 appending to the currently-stored string.
6382 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
6386 register STDCHAR rslast;
6387 register STDCHAR *bp;
6393 if (SvTHINKFIRST(sv))
6394 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6395 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6397 However, perlbench says it's slower, because the existing swipe code
6398 is faster than copy on write.
6399 Swings and roundabouts. */
6400 SvUPGRADE(sv, SVt_PV);
6405 if (PerlIO_isutf8(fp)) {
6407 sv_utf8_upgrade_nomg(sv);
6408 sv_pos_u2b(sv,&append,0);
6410 } else if (SvUTF8(sv)) {
6411 SV * const tsv = NEWSV(0,0);
6412 sv_gets(tsv, fp, 0);
6413 sv_utf8_upgrade_nomg(tsv);
6414 SvCUR_set(sv,append);
6417 goto return_string_or_null;
6422 if (PerlIO_isutf8(fp))
6425 if (IN_PERL_COMPILETIME) {
6426 /* we always read code in line mode */
6430 else if (RsSNARF(PL_rs)) {
6431 /* If it is a regular disk file use size from stat() as estimate
6432 of amount we are going to read - may result in malloc-ing
6433 more memory than we realy need if layers bellow reduce
6434 size we read (e.g. CRLF or a gzip layer)
6437 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
6438 const Off_t offset = PerlIO_tell(fp);
6439 if (offset != (Off_t) -1 && st.st_size + append > offset) {
6440 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6446 else if (RsRECORD(PL_rs)) {
6450 /* Grab the size of the record we're getting */
6451 recsize = SvIV(SvRV(PL_rs));
6452 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6455 /* VMS wants read instead of fread, because fread doesn't respect */
6456 /* RMS record boundaries. This is not necessarily a good thing to be */
6457 /* doing, but we've got no other real choice - except avoid stdio
6458 as implementation - perhaps write a :vms layer ?
6460 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6462 bytesread = PerlIO_read(fp, buffer, recsize);
6466 SvCUR_set(sv, bytesread += append);
6467 buffer[bytesread] = '\0';
6468 goto return_string_or_null;
6470 else if (RsPARA(PL_rs)) {
6476 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6477 if (PerlIO_isutf8(fp)) {
6478 rsptr = SvPVutf8(PL_rs, rslen);
6481 if (SvUTF8(PL_rs)) {
6482 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6483 Perl_croak(aTHX_ "Wide character in $/");
6486 rsptr = SvPV_const(PL_rs, rslen);
6490 rslast = rslen ? rsptr[rslen - 1] : '\0';
6492 if (rspara) { /* have to do this both before and after */
6493 do { /* to make sure file boundaries work right */
6496 i = PerlIO_getc(fp);
6500 PerlIO_ungetc(fp,i);
6506 /* See if we know enough about I/O mechanism to cheat it ! */
6508 /* This used to be #ifdef test - it is made run-time test for ease
6509 of abstracting out stdio interface. One call should be cheap
6510 enough here - and may even be a macro allowing compile
6514 if (PerlIO_fast_gets(fp)) {
6517 * We're going to steal some values from the stdio struct
6518 * and put EVERYTHING in the innermost loop into registers.
6520 register STDCHAR *ptr;
6524 #if defined(VMS) && defined(PERLIO_IS_STDIO)
6525 /* An ungetc()d char is handled separately from the regular
6526 * buffer, so we getc() it back out and stuff it in the buffer.
6528 i = PerlIO_getc(fp);
6529 if (i == EOF) return 0;
6530 *(--((*fp)->_ptr)) = (unsigned char) i;
6534 /* Here is some breathtakingly efficient cheating */
6536 cnt = PerlIO_get_cnt(fp); /* get count into register */
6537 /* make sure we have the room */
6538 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6539 /* Not room for all of it
6540 if we are looking for a separator and room for some
6542 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6543 /* just process what we have room for */
6544 shortbuffered = cnt - SvLEN(sv) + append + 1;
6545 cnt -= shortbuffered;
6549 /* remember that cnt can be negative */
6550 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6555 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
6556 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6557 DEBUG_P(PerlIO_printf(Perl_debug_log,
6558 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6559 DEBUG_P(PerlIO_printf(Perl_debug_log,
6560 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6561 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6562 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6567 while (cnt > 0) { /* this | eat */
6569 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6570 goto thats_all_folks; /* screams | sed :-) */
6574 Copy(ptr, bp, cnt, char); /* this | eat */
6575 bp += cnt; /* screams | dust */
6576 ptr += cnt; /* louder | sed :-) */
6581 if (shortbuffered) { /* oh well, must extend */
6582 cnt = shortbuffered;
6584 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6586 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6587 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6591 DEBUG_P(PerlIO_printf(Perl_debug_log,
6592 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6593 PTR2UV(ptr),(long)cnt));
6594 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6596 DEBUG_P(PerlIO_printf(Perl_debug_log,
6597 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6598 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6599 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6601 /* This used to call 'filbuf' in stdio form, but as that behaves like
6602 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6603 another abstraction. */
6604 i = PerlIO_getc(fp); /* get more characters */
6606 DEBUG_P(PerlIO_printf(Perl_debug_log,
6607 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6608 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6609 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6611 cnt = PerlIO_get_cnt(fp);
6612 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
6613 DEBUG_P(PerlIO_printf(Perl_debug_log,
6614 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6616 if (i == EOF) /* all done for ever? */
6617 goto thats_really_all_folks;
6619 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6621 SvGROW(sv, bpx + cnt + 2);
6622 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6624 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
6626 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
6627 goto thats_all_folks;
6631 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6632 memNE((char*)bp - rslen, rsptr, rslen))
6633 goto screamer; /* go back to the fray */
6634 thats_really_all_folks:
6636 cnt += shortbuffered;
6637 DEBUG_P(PerlIO_printf(Perl_debug_log,
6638 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6639 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
6640 DEBUG_P(PerlIO_printf(Perl_debug_log,
6641 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6642 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6643 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6645 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
6646 DEBUG_P(PerlIO_printf(Perl_debug_log,
6647 "Screamer: done, len=%ld, string=|%.*s|\n",
6648 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6652 /*The big, slow, and stupid way. */
6653 #ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
6655 Newx(buf, 8192, STDCHAR);
6663 register const STDCHAR *bpe = buf + sizeof(buf);
6665 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6666 ; /* keep reading */
6670 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6671 /* Accomodate broken VAXC compiler, which applies U8 cast to
6672 * both args of ?: operator, causing EOF to change into 255
6675 i = (U8)buf[cnt - 1];
6681 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6683 sv_catpvn(sv, (char *) buf, cnt);
6685 sv_setpvn(sv, (char *) buf, cnt);
6687 if (i != EOF && /* joy */
6689 SvCUR(sv) < rslen ||
6690 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6694 * If we're reading from a TTY and we get a short read,
6695 * indicating that the user hit his EOF character, we need
6696 * to notice it now, because if we try to read from the TTY
6697 * again, the EOF condition will disappear.
6699 * The comparison of cnt to sizeof(buf) is an optimization
6700 * that prevents unnecessary calls to feof().
6704 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
6708 #ifdef USE_HEAP_INSTEAD_OF_STACK
6713 if (rspara) { /* have to do this both before and after */
6714 while (i != EOF) { /* to make sure file boundaries work right */
6715 i = PerlIO_getc(fp);
6717 PerlIO_ungetc(fp,i);
6723 return_string_or_null:
6724 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
6730 Auto-increment of the value in the SV, doing string to numeric conversion
6731 if necessary. Handles 'get' magic.
6737 Perl_sv_inc(pTHX_ register SV *sv)
6745 if (SvTHINKFIRST(sv)) {
6747 sv_force_normal_flags(sv, 0);
6748 if (SvREADONLY(sv)) {
6749 if (IN_PERL_RUNTIME)
6750 Perl_croak(aTHX_ PL_no_modify);
6754 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6756 i = PTR2IV(SvRV(sv));
6761 flags = SvFLAGS(sv);
6762 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6763 /* It's (privately or publicly) a float, but not tested as an
6764 integer, so test it to see. */
6766 flags = SvFLAGS(sv);
6768 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6769 /* It's publicly an integer, or privately an integer-not-float */
6770 #ifdef PERL_PRESERVE_IVUV
6774 if (SvUVX(sv) == UV_MAX)
6775 sv_setnv(sv, UV_MAX_P1);
6777 (void)SvIOK_only_UV(sv);
6778 SvUV_set(sv, SvUVX(sv) + 1);
6780 if (SvIVX(sv) == IV_MAX)
6781 sv_setuv(sv, (UV)IV_MAX + 1);
6783 (void)SvIOK_only(sv);
6784 SvIV_set(sv, SvIVX(sv) + 1);
6789 if (flags & SVp_NOK) {
6790 (void)SvNOK_only(sv);
6791 SvNV_set(sv, SvNVX(sv) + 1.0);
6795 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
6796 if ((flags & SVTYPEMASK) < SVt_PVIV)
6797 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
6798 (void)SvIOK_only(sv);
6803 while (isALPHA(*d)) d++;
6804 while (isDIGIT(*d)) d++;
6806 #ifdef PERL_PRESERVE_IVUV
6807 /* Got to punt this as an integer if needs be, but we don't issue
6808 warnings. Probably ought to make the sv_iv_please() that does
6809 the conversion if possible, and silently. */
6810 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6811 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6812 /* Need to try really hard to see if it's an integer.
6813 9.22337203685478e+18 is an integer.
6814 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6815 so $a="9.22337203685478e+18"; $a+0; $a++
6816 needs to be the same as $a="9.22337203685478e+18"; $a++
6823 /* sv_2iv *should* have made this an NV */
6824 if (flags & SVp_NOK) {
6825 (void)SvNOK_only(sv);
6826 SvNV_set(sv, SvNVX(sv) + 1.0);
6829 /* I don't think we can get here. Maybe I should assert this
6830 And if we do get here I suspect that sv_setnv will croak. NWC
6832 #if defined(USE_LONG_DOUBLE)
6833 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",
6834 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6836 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6837 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6840 #endif /* PERL_PRESERVE_IVUV */
6841 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
6845 while (d >= SvPVX_const(sv)) {
6853 /* MKS: The original code here died if letters weren't consecutive.
6854 * at least it didn't have to worry about non-C locales. The
6855 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
6856 * arranged in order (although not consecutively) and that only
6857 * [A-Za-z] are accepted by isALPHA in the C locale.
6859 if (*d != 'z' && *d != 'Z') {
6860 do { ++*d; } while (!isALPHA(*d));
6863 *(d--) -= 'z' - 'a';
6868 *(d--) -= 'z' - 'a' + 1;
6872 /* oh,oh, the number grew */
6873 SvGROW(sv, SvCUR(sv) + 2);
6874 SvCUR_set(sv, SvCUR(sv) + 1);
6875 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
6886 Auto-decrement of the value in the SV, doing string to numeric conversion
6887 if necessary. Handles 'get' magic.
6893 Perl_sv_dec(pTHX_ register SV *sv)
6900 if (SvTHINKFIRST(sv)) {
6902 sv_force_normal_flags(sv, 0);
6903 if (SvREADONLY(sv)) {
6904 if (IN_PERL_RUNTIME)
6905 Perl_croak(aTHX_ PL_no_modify);
6909 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6911 i = PTR2IV(SvRV(sv));
6916 /* Unlike sv_inc we don't have to worry about string-never-numbers
6917 and keeping them magic. But we mustn't warn on punting */
6918 flags = SvFLAGS(sv);
6919 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6920 /* It's publicly an integer, or privately an integer-not-float */
6921 #ifdef PERL_PRESERVE_IVUV
6925 if (SvUVX(sv) == 0) {
6926 (void)SvIOK_only(sv);
6930 (void)SvIOK_only_UV(sv);
6931 SvUV_set(sv, SvUVX(sv) - 1);
6934 if (SvIVX(sv) == IV_MIN)
6935 sv_setnv(sv, (NV)IV_MIN - 1.0);
6937 (void)SvIOK_only(sv);
6938 SvIV_set(sv, SvIVX(sv) - 1);
6943 if (flags & SVp_NOK) {
6944 SvNV_set(sv, SvNVX(sv) - 1.0);
6945 (void)SvNOK_only(sv);
6948 if (!(flags & SVp_POK)) {
6949 if ((flags & SVTYPEMASK) < SVt_PVIV)
6950 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
6952 (void)SvIOK_only(sv);
6955 #ifdef PERL_PRESERVE_IVUV
6957 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6958 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6959 /* Need to try really hard to see if it's an integer.
6960 9.22337203685478e+18 is an integer.
6961 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6962 so $a="9.22337203685478e+18"; $a+0; $a--
6963 needs to be the same as $a="9.22337203685478e+18"; $a--
6970 /* sv_2iv *should* have made this an NV */
6971 if (flags & SVp_NOK) {
6972 (void)SvNOK_only(sv);
6973 SvNV_set(sv, SvNVX(sv) - 1.0);
6976 /* I don't think we can get here. Maybe I should assert this
6977 And if we do get here I suspect that sv_setnv will croak. NWC
6979 #if defined(USE_LONG_DOUBLE)
6980 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",
6981 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6983 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6984 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6988 #endif /* PERL_PRESERVE_IVUV */
6989 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
6993 =for apidoc sv_mortalcopy
6995 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
6996 The new SV is marked as mortal. It will be destroyed "soon", either by an
6997 explicit call to FREETMPS, or by an implicit call at places such as
6998 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
7003 /* Make a string that will exist for the duration of the expression
7004 * evaluation. Actually, it may have to last longer than that, but
7005 * hopefully we won't free it until it has been assigned to a
7006 * permanent location. */
7009 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
7014 sv_setsv(sv,oldstr);
7016 PL_tmps_stack[++PL_tmps_ix] = sv;
7022 =for apidoc sv_newmortal
7024 Creates a new null SV which is mortal. The reference count of the SV is
7025 set to 1. It will be destroyed "soon", either by an explicit call to
7026 FREETMPS, or by an implicit call at places such as statement boundaries.
7027 See also C<sv_mortalcopy> and C<sv_2mortal>.
7033 Perl_sv_newmortal(pTHX)
7038 SvFLAGS(sv) = SVs_TEMP;
7040 PL_tmps_stack[++PL_tmps_ix] = sv;
7045 =for apidoc sv_2mortal
7047 Marks an existing SV as mortal. The SV will be destroyed "soon", either
7048 by an explicit call to FREETMPS, or by an implicit call at places such as
7049 statement boundaries. SvTEMP() is turned on which means that the SV's
7050 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7051 and C<sv_mortalcopy>.
7057 Perl_sv_2mortal(pTHX_ register SV *sv)
7062 if (SvREADONLY(sv) && SvIMMORTAL(sv))
7065 PL_tmps_stack[++PL_tmps_ix] = sv;
7073 Creates a new SV and copies a string into it. The reference count for the
7074 SV is set to 1. If C<len> is zero, Perl will compute the length using
7075 strlen(). For efficiency, consider using C<newSVpvn> instead.
7081 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
7086 sv_setpvn(sv,s,len ? len : strlen(s));
7091 =for apidoc newSVpvn
7093 Creates a new SV and copies a string into it. The reference count for the
7094 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7095 string. You are responsible for ensuring that the source string is at least
7096 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7102 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
7107 sv_setpvn(sv,s,len);
7113 =for apidoc newSVhek
7115 Creates a new SV from the hash key structure. It will generate scalars that
7116 point to the shared string table where possible. Returns a new (undefined)
7117 SV if the hek is NULL.
7123 Perl_newSVhek(pTHX_ const HEK *hek)
7132 if (HEK_LEN(hek) == HEf_SVKEY) {
7133 return newSVsv(*(SV**)HEK_KEY(hek));
7135 const int flags = HEK_FLAGS(hek);
7136 if (flags & HVhek_WASUTF8) {
7138 Andreas would like keys he put in as utf8 to come back as utf8
7140 STRLEN utf8_len = HEK_LEN(hek);
7141 const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7142 SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
7145 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7147 } else if (flags & HVhek_REHASH) {
7148 /* We don't have a pointer to the hv, so we have to replicate the
7149 flag into every HEK. This hv is using custom a hasing
7150 algorithm. Hence we can't return a shared string scalar, as
7151 that would contain the (wrong) hash value, and might get passed
7152 into an hv routine with a regular hash */
7154 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
7159 /* This will be overwhelminly the most common case. */
7160 return newSVpvn_share(HEK_KEY(hek),
7161 (HEK_UTF8(hek) ? -HEK_LEN(hek) : HEK_LEN(hek)),
7167 =for apidoc newSVpvn_share
7169 Creates a new SV with its SvPVX_const pointing to a shared string in the string
7170 table. If the string does not already exist in the table, it is created
7171 first. Turns on READONLY and FAKE. The string's hash is stored in the UV
7172 slot of the SV; if the C<hash> parameter is non-zero, that value is used;
7173 otherwise the hash is computed. The idea here is that as the string table
7174 is used for shared hash keys these strings will have SvPVX_const == HeKEY and
7175 hash lookup will avoid string compare.
7181 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7184 bool is_utf8 = FALSE;
7186 STRLEN tmplen = -len;
7188 /* See the note in hv.c:hv_fetch() --jhi */
7189 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7193 PERL_HASH(hash, src, len);
7195 sv_upgrade(sv, SVt_PV);
7196 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7208 #if defined(PERL_IMPLICIT_CONTEXT)
7210 /* pTHX_ magic can't cope with varargs, so this is a no-context
7211 * version of the main function, (which may itself be aliased to us).
7212 * Don't access this version directly.
7216 Perl_newSVpvf_nocontext(const char* pat, ...)
7221 va_start(args, pat);
7222 sv = vnewSVpvf(pat, &args);
7229 =for apidoc newSVpvf
7231 Creates a new SV and initializes it with the string formatted like
7238 Perl_newSVpvf(pTHX_ const char* pat, ...)
7242 va_start(args, pat);
7243 sv = vnewSVpvf(pat, &args);
7248 /* backend for newSVpvf() and newSVpvf_nocontext() */
7251 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7255 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7262 Creates a new SV and copies a floating point value into it.
7263 The reference count for the SV is set to 1.
7269 Perl_newSVnv(pTHX_ NV n)
7281 Creates a new SV and copies an integer into it. The reference count for the
7288 Perl_newSViv(pTHX_ IV i)
7300 Creates a new SV and copies an unsigned integer into it.
7301 The reference count for the SV is set to 1.
7307 Perl_newSVuv(pTHX_ UV u)
7317 =for apidoc newRV_noinc
7319 Creates an RV wrapper for an SV. The reference count for the original
7320 SV is B<not> incremented.
7326 Perl_newRV_noinc(pTHX_ SV *tmpRef)
7331 sv_upgrade(sv, SVt_RV);
7333 SvRV_set(sv, tmpRef);
7338 /* newRV_inc is the official function name to use now.
7339 * newRV_inc is in fact #defined to newRV in sv.h
7343 Perl_newRV(pTHX_ SV *tmpRef)
7345 return newRV_noinc(SvREFCNT_inc(tmpRef));
7351 Creates a new SV which is an exact duplicate of the original SV.
7358 Perl_newSVsv(pTHX_ register SV *old)
7364 if (SvTYPE(old) == SVTYPEMASK) {
7365 if (ckWARN_d(WARN_INTERNAL))
7366 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7370 /* SV_GMAGIC is the default for sv_setv()
7371 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7372 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7373 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7378 =for apidoc sv_reset
7380 Underlying implementation for the C<reset> Perl function.
7381 Note that the perl-level function is vaguely deprecated.
7387 Perl_sv_reset(pTHX_ register const char *s, HV *stash)
7390 char todo[PERL_UCHAR_MAX+1];
7395 if (!*s) { /* reset ?? searches */
7396 MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
7398 PMOP *pm = (PMOP *) mg->mg_obj;
7400 pm->op_pmdynflags &= ~PMdf_USED;
7407 /* reset variables */
7409 if (!HvARRAY(stash))
7412 Zero(todo, 256, char);
7415 I32 i = (unsigned char)*s;
7419 max = (unsigned char)*s++;
7420 for ( ; i <= max; i++) {
7423 for (i = 0; i <= (I32) HvMAX(stash); i++) {
7425 for (entry = HvARRAY(stash)[i];
7427 entry = HeNEXT(entry))
7432 if (!todo[(U8)*HeKEY(entry)])
7434 gv = (GV*)HeVAL(entry);
7437 if (SvTHINKFIRST(sv)) {
7438 if (!SvREADONLY(sv) && SvROK(sv))
7440 /* XXX Is this continue a bug? Why should THINKFIRST
7441 exempt us from resetting arrays and hashes? */
7445 if (SvTYPE(sv) >= SVt_PV) {
7447 if (SvPVX_const(sv) != Nullch)
7455 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7457 Perl_die(aTHX_ "Can't reset %%ENV on this system");
7460 # if defined(USE_ENVIRON_ARRAY)
7463 # endif /* USE_ENVIRON_ARRAY */
7474 Using various gambits, try to get an IO from an SV: the IO slot if its a
7475 GV; or the recursive result if we're an RV; or the IO slot of the symbol
7476 named after the PV if we're a string.
7482 Perl_sv_2io(pTHX_ SV *sv)
7487 switch (SvTYPE(sv)) {
7495 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7499 Perl_croak(aTHX_ PL_no_usym, "filehandle");
7501 return sv_2io(SvRV(sv));
7502 gv = gv_fetchsv(sv, FALSE, SVt_PVIO);
7508 Perl_croak(aTHX_ "Bad filehandle: %"SVf, sv);
7517 Using various gambits, try to get a CV from an SV; in addition, try if
7518 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7524 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
7531 return *gvp = Nullgv, Nullcv;
7532 switch (SvTYPE(sv)) {
7550 SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */
7551 tryAMAGICunDEREF(to_cv);
7554 if (SvTYPE(sv) == SVt_PVCV) {
7563 Perl_croak(aTHX_ "Not a subroutine reference");
7568 gv = gv_fetchsv(sv, lref, SVt_PVCV);
7574 if (lref && !GvCVu(gv)) {
7577 tmpsv = NEWSV(704,0);
7578 gv_efullname3(tmpsv, gv, Nullch);
7579 /* XXX this is probably not what they think they're getting.
7580 * It has the same effect as "sub name;", i.e. just a forward
7582 newSUB(start_subparse(FALSE, 0),
7583 newSVOP(OP_CONST, 0, tmpsv),
7588 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7598 Returns true if the SV has a true value by Perl's rules.
7599 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7600 instead use an in-line version.
7606 Perl_sv_true(pTHX_ register SV *sv)
7611 register const XPV* const tXpv = (XPV*)SvANY(sv);
7613 (tXpv->xpv_cur > 1 ||
7614 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
7621 return SvIVX(sv) != 0;
7624 return SvNVX(sv) != 0.0;
7626 return sv_2bool(sv);
7632 =for apidoc sv_pvn_force
7634 Get a sensible string out of the SV somehow.
7635 A private implementation of the C<SvPV_force> macro for compilers which
7636 can't cope with complex macro expressions. Always use the macro instead.
7638 =for apidoc sv_pvn_force_flags
7640 Get a sensible string out of the SV somehow.
7641 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7642 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7643 implemented in terms of this function.
7644 You normally want to use the various wrapper macros instead: see
7645 C<SvPV_force> and C<SvPV_force_nomg>
7651 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7654 if (SvTHINKFIRST(sv) && !SvROK(sv))
7655 sv_force_normal_flags(sv, 0);
7665 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
7666 const char * const ref = sv_reftype(sv,0);
7668 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
7669 ref, OP_NAME(PL_op));
7671 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
7673 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
7674 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
7676 s = sv_2pv_flags(sv, &len, flags);
7680 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
7683 SvUPGRADE(sv, SVt_PV); /* Never FALSE */
7684 SvGROW(sv, len + 1);
7685 Move(s,SvPVX(sv),len,char);
7690 SvPOK_on(sv); /* validate pointer */
7692 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
7693 PTR2UV(sv),SvPVX_const(sv)));
7696 return SvPVX_mutable(sv);
7700 =for apidoc sv_pvbyten_force
7702 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
7708 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7710 sv_pvn_force(sv,lp);
7711 sv_utf8_downgrade(sv,0);
7717 =for apidoc sv_pvutf8n_force
7719 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
7725 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7727 sv_pvn_force(sv,lp);
7728 sv_utf8_upgrade(sv);
7734 =for apidoc sv_reftype
7736 Returns a string describing what the SV is a reference to.
7742 Perl_sv_reftype(pTHX_ const SV *sv, int ob)
7744 /* The fact that I don't need to downcast to char * everywhere, only in ?:
7745 inside return suggests a const propagation bug in g++. */
7746 if (ob && SvOBJECT(sv)) {
7747 char * const name = HvNAME_get(SvSTASH(sv));
7748 return name ? name : (char *) "__ANON__";
7751 switch (SvTYPE(sv)) {
7768 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
7769 /* tied lvalues should appear to be
7770 * scalars for backwards compatitbility */
7771 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
7772 ? "SCALAR" : "LVALUE");
7773 case SVt_PVAV: return "ARRAY";
7774 case SVt_PVHV: return "HASH";
7775 case SVt_PVCV: return "CODE";
7776 case SVt_PVGV: return "GLOB";
7777 case SVt_PVFM: return "FORMAT";
7778 case SVt_PVIO: return "IO";
7779 default: return "UNKNOWN";
7785 =for apidoc sv_isobject
7787 Returns a boolean indicating whether the SV is an RV pointing to a blessed
7788 object. If the SV is not an RV, or if the object is not blessed, then this
7795 Perl_sv_isobject(pTHX_ SV *sv)
7811 Returns a boolean indicating whether the SV is blessed into the specified
7812 class. This does not check for subtypes; use C<sv_derived_from> to verify
7813 an inheritance relationship.
7819 Perl_sv_isa(pTHX_ SV *sv, const char *name)
7830 hvname = HvNAME_get(SvSTASH(sv));
7834 return strEQ(hvname, name);
7840 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7841 it will be upgraded to one. If C<classname> is non-null then the new SV will
7842 be blessed in the specified package. The new SV is returned and its
7843 reference count is 1.
7849 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
7855 SV_CHECK_THINKFIRST_COW_DROP(rv);
7858 if (SvTYPE(rv) >= SVt_PVMG) {
7859 const U32 refcnt = SvREFCNT(rv);
7863 SvREFCNT(rv) = refcnt;
7866 if (SvTYPE(rv) < SVt_RV)
7867 sv_upgrade(rv, SVt_RV);
7868 else if (SvTYPE(rv) > SVt_RV) {
7879 HV* const stash = gv_stashpv(classname, TRUE);
7880 (void)sv_bless(rv, stash);
7886 =for apidoc sv_setref_pv
7888 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7889 argument will be upgraded to an RV. That RV will be modified to point to
7890 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7891 into the SV. The C<classname> argument indicates the package for the
7892 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7893 will have a reference count of 1, and the RV will be returned.
7895 Do not use with other Perl types such as HV, AV, SV, CV, because those
7896 objects will become corrupted by the pointer copy process.
7898 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7904 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
7907 sv_setsv(rv, &PL_sv_undef);
7911 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
7916 =for apidoc sv_setref_iv
7918 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7919 argument will be upgraded to an RV. That RV will be modified to point to
7920 the new SV. The C<classname> argument indicates the package for the
7921 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7922 will have a reference count of 1, and the RV will be returned.
7928 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
7930 sv_setiv(newSVrv(rv,classname), iv);
7935 =for apidoc sv_setref_uv
7937 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7938 argument will be upgraded to an RV. That RV will be modified to point to
7939 the new SV. The C<classname> argument indicates the package for the
7940 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7941 will have a reference count of 1, and the RV will be returned.
7947 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7949 sv_setuv(newSVrv(rv,classname), uv);
7954 =for apidoc sv_setref_nv
7956 Copies a double into a new SV, optionally blessing the SV. The C<rv>
7957 argument will be upgraded to an RV. That RV will be modified to point to
7958 the new SV. The C<classname> argument indicates the package for the
7959 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7960 will have a reference count of 1, and the RV will be returned.
7966 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
7968 sv_setnv(newSVrv(rv,classname), nv);
7973 =for apidoc sv_setref_pvn
7975 Copies a string into a new SV, optionally blessing the SV. The length of the
7976 string must be specified with C<n>. The C<rv> argument will be upgraded to
7977 an RV. That RV will be modified to point to the new SV. The C<classname>
7978 argument indicates the package for the blessing. Set C<classname> to
7979 C<Nullch> to avoid the blessing. The new SV will have a reference count
7980 of 1, and the RV will be returned.
7982 Note that C<sv_setref_pv> copies the pointer while this copies the string.
7988 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, const char *pv, STRLEN n)
7990 sv_setpvn(newSVrv(rv,classname), pv, n);
7995 =for apidoc sv_bless
7997 Blesses an SV into a specified package. The SV must be an RV. The package
7998 must be designated by its stash (see C<gv_stashpv()>). The reference count
7999 of the SV is unaffected.
8005 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
8009 Perl_croak(aTHX_ "Can't bless non-reference value");
8011 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8012 if (SvREADONLY(tmpRef))
8013 Perl_croak(aTHX_ PL_no_modify);
8014 if (SvOBJECT(tmpRef)) {
8015 if (SvTYPE(tmpRef) != SVt_PVIO)
8017 SvREFCNT_dec(SvSTASH(tmpRef));
8020 SvOBJECT_on(tmpRef);
8021 if (SvTYPE(tmpRef) != SVt_PVIO)
8023 SvUPGRADE(tmpRef, SVt_PVMG);
8024 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc(stash));
8031 if(SvSMAGICAL(tmpRef))
8032 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8040 /* Downgrades a PVGV to a PVMG.
8044 S_sv_unglob(pTHX_ SV *sv)
8048 assert(SvTYPE(sv) == SVt_PVGV);
8053 sv_del_backref((SV*)GvSTASH(sv), sv);
8054 GvSTASH(sv) = Nullhv;
8056 sv_unmagic(sv, PERL_MAGIC_glob);
8057 Safefree(GvNAME(sv));
8060 /* need to keep SvANY(sv) in the right arena */
8061 xpvmg = new_XPVMG();
8062 StructCopy(SvANY(sv), xpvmg, XPVMG);
8063 del_XPVGV(SvANY(sv));
8066 SvFLAGS(sv) &= ~SVTYPEMASK;
8067 SvFLAGS(sv) |= SVt_PVMG;
8071 =for apidoc sv_unref_flags
8073 Unsets the RV status of the SV, and decrements the reference count of
8074 whatever was being referenced by the RV. This can almost be thought of
8075 as a reversal of C<newSVrv>. The C<cflags> argument can contain
8076 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8077 (otherwise the decrementing is conditional on the reference count being
8078 different from one or the reference being a readonly SV).
8085 Perl_sv_unref_flags(pTHX_ SV *ref, U32 flags)
8087 SV* const target = SvRV(ref);
8089 if (SvWEAKREF(ref)) {
8090 sv_del_backref(target, ref);
8092 SvRV_set(ref, NULL);
8095 SvRV_set(ref, NULL);
8097 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
8098 assigned to as BEGIN {$a = \"Foo"} will fail. */
8099 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8100 SvREFCNT_dec(target);
8101 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8102 sv_2mortal(target); /* Schedule for freeing later */
8106 =for apidoc sv_untaint
8108 Untaint an SV. Use C<SvTAINTED_off> instead.
8113 Perl_sv_untaint(pTHX_ SV *sv)
8115 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8116 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8123 =for apidoc sv_tainted
8125 Test an SV for taintedness. Use C<SvTAINTED> instead.
8130 Perl_sv_tainted(pTHX_ SV *sv)
8132 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8133 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8134 if (mg && (mg->mg_len & 1) )
8141 =for apidoc sv_setpviv
8143 Copies an integer into the given SV, also updating its string value.
8144 Does not handle 'set' magic. See C<sv_setpviv_mg>.
8150 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8152 char buf[TYPE_CHARS(UV)];
8154 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8156 sv_setpvn(sv, ptr, ebuf - ptr);
8160 =for apidoc sv_setpviv_mg
8162 Like C<sv_setpviv>, but also handles 'set' magic.
8168 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8174 #if defined(PERL_IMPLICIT_CONTEXT)
8176 /* pTHX_ magic can't cope with varargs, so this is a no-context
8177 * version of the main function, (which may itself be aliased to us).
8178 * Don't access this version directly.
8182 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8186 va_start(args, pat);
8187 sv_vsetpvf(sv, pat, &args);
8191 /* pTHX_ magic can't cope with varargs, so this is a no-context
8192 * version of the main function, (which may itself be aliased to us).
8193 * Don't access this version directly.
8197 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8201 va_start(args, pat);
8202 sv_vsetpvf_mg(sv, pat, &args);
8208 =for apidoc sv_setpvf
8210 Works like C<sv_catpvf> but copies the text into the SV instead of
8211 appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
8217 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
8220 va_start(args, pat);
8221 sv_vsetpvf(sv, pat, &args);
8226 =for apidoc sv_vsetpvf
8228 Works like C<sv_vcatpvf> but copies the text into the SV instead of
8229 appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8231 Usually used via its frontend C<sv_setpvf>.
8237 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8239 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8243 =for apidoc sv_setpvf_mg
8245 Like C<sv_setpvf>, but also handles 'set' magic.
8251 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8254 va_start(args, pat);
8255 sv_vsetpvf_mg(sv, pat, &args);
8260 =for apidoc sv_vsetpvf_mg
8262 Like C<sv_vsetpvf>, but also handles 'set' magic.
8264 Usually used via its frontend C<sv_setpvf_mg>.
8270 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8272 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8276 #if defined(PERL_IMPLICIT_CONTEXT)
8278 /* pTHX_ magic can't cope with varargs, so this is a no-context
8279 * version of the main function, (which may itself be aliased to us).
8280 * Don't access this version directly.
8284 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8288 va_start(args, pat);
8289 sv_vcatpvf(sv, pat, &args);
8293 /* pTHX_ magic can't cope with varargs, so this is a no-context
8294 * version of the main function, (which may itself be aliased to us).
8295 * Don't access this version directly.
8299 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8303 va_start(args, pat);
8304 sv_vcatpvf_mg(sv, pat, &args);
8310 =for apidoc sv_catpvf
8312 Processes its arguments like C<sprintf> and appends the formatted
8313 output to an SV. If the appended data contains "wide" characters
8314 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8315 and characters >255 formatted with %c), the original SV might get
8316 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
8317 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8318 valid UTF-8; if the original SV was bytes, the pattern should be too.
8323 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
8326 va_start(args, pat);
8327 sv_vcatpvf(sv, pat, &args);
8332 =for apidoc sv_vcatpvf
8334 Processes its arguments like C<vsprintf> and appends the formatted output
8335 to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8337 Usually used via its frontend C<sv_catpvf>.
8343 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8345 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8349 =for apidoc sv_catpvf_mg
8351 Like C<sv_catpvf>, but also handles 'set' magic.
8357 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8360 va_start(args, pat);
8361 sv_vcatpvf_mg(sv, pat, &args);
8366 =for apidoc sv_vcatpvf_mg
8368 Like C<sv_vcatpvf>, but also handles 'set' magic.
8370 Usually used via its frontend C<sv_catpvf_mg>.
8376 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8378 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8383 =for apidoc sv_vsetpvfn
8385 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
8388 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
8394 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8396 sv_setpvn(sv, "", 0);
8397 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8400 /* private function for use in sv_vcatpvfn via the EXPECT_NUMBER macro */
8403 S_expect_number(pTHX_ char** pattern)
8406 switch (**pattern) {
8407 case '1': case '2': case '3':
8408 case '4': case '5': case '6':
8409 case '7': case '8': case '9':
8410 while (isDIGIT(**pattern))
8411 var = var * 10 + (*(*pattern)++ - '0');
8415 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
8418 F0convert(NV nv, char *endbuf, STRLEN *len)
8420 const int neg = nv < 0;
8429 if (uv & 1 && uv == nv)
8430 uv--; /* Round to even */
8432 const unsigned dig = uv % 10;
8445 =for apidoc sv_vcatpvfn
8447 Processes its arguments like C<vsprintf> and appends the formatted output
8448 to an SV. Uses an array of SVs if the C style variable argument list is
8449 missing (NULL). When running with taint checks enabled, indicates via
8450 C<maybe_tainted> if results are untrustworthy (often due to the use of
8453 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
8459 #define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\
8460 vecstr = (U8*)SvPV_const(vecsv,veclen);\
8461 vec_utf8 = DO_UTF8(vecsv);
8463 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8466 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8473 static const char nullstr[] = "(null)";
8475 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8476 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
8478 /* Times 4: a decimal digit takes more than 3 binary digits.
8479 * NV_DIG: mantissa takes than many decimal digits.
8480 * Plus 32: Playing safe. */
8481 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8482 /* large enough for "%#.#f" --chip */
8483 /* what about long double NVs? --jhi */
8485 PERL_UNUSED_ARG(maybe_tainted);
8487 /* no matter what, this is a string now */
8488 (void)SvPV_force(sv, origlen);
8490 /* special-case "", "%s", and "%-p" (SVf - see below) */
8493 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
8495 const char * const s = va_arg(*args, char*);
8496 sv_catpv(sv, s ? s : nullstr);
8498 else if (svix < svmax) {
8499 sv_catsv(sv, *svargs);
8500 if (DO_UTF8(*svargs))
8505 if (args && patlen == 3 && pat[0] == '%' &&
8506 pat[1] == '-' && pat[2] == 'p') {
8507 argsv = va_arg(*args, SV*);
8508 sv_catsv(sv, argsv);
8514 #ifndef USE_LONG_DOUBLE
8515 /* special-case "%.<number>[gf]" */
8516 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
8517 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8518 unsigned digits = 0;
8522 while (*pp >= '0' && *pp <= '9')
8523 digits = 10 * digits + (*pp++ - '0');
8524 if (pp - pat == (int)patlen - 1) {
8532 /* Add check for digits != 0 because it seems that some
8533 gconverts are buggy in this case, and we don't yet have
8534 a Configure test for this. */
8535 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8536 /* 0, point, slack */
8537 Gconvert(nv, (int)digits, 0, ebuf);
8539 if (*ebuf) /* May return an empty string for digits==0 */
8542 } else if (!digits) {
8545 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8546 sv_catpvn(sv, p, l);
8552 #endif /* !USE_LONG_DOUBLE */
8554 if (!args && svix < svmax && DO_UTF8(*svargs))
8557 patend = (char*)pat + patlen;
8558 for (p = (char*)pat; p < patend; p = q) {
8561 bool vectorize = FALSE;
8562 bool vectorarg = FALSE;
8563 bool vec_utf8 = FALSE;
8569 bool has_precis = FALSE;
8572 bool is_utf8 = FALSE; /* is this item utf8? */
8573 #ifdef HAS_LDBL_SPRINTF_BUG
8574 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
8575 with sfio - Allen <allens@cpan.org> */
8576 bool fix_ldbl_sprintf_bug = FALSE;
8580 U8 utf8buf[UTF8_MAXBYTES+1];
8581 STRLEN esignlen = 0;
8583 const char *eptr = Nullch;
8586 const U8 *vecstr = Null(U8*);
8593 /* we need a long double target in case HAS_LONG_DOUBLE but
8596 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
8604 const char *dotstr = ".";
8605 STRLEN dotstrlen = 1;
8606 I32 efix = 0; /* explicit format parameter index */
8607 I32 ewix = 0; /* explicit width index */
8608 I32 epix = 0; /* explicit precision index */
8609 I32 evix = 0; /* explicit vector index */
8610 bool asterisk = FALSE;
8612 /* echo everything up to the next format specification */
8613 for (q = p; q < patend && *q != '%'; ++q) ;
8615 if (has_utf8 && !pat_utf8)
8616 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8618 sv_catpvn(sv, p, q - p);
8625 We allow format specification elements in this order:
8626 \d+\$ explicit format parameter index
8628 v|\*(\d+\$)?v vector with optional (optionally specified) arg
8629 0 flag (as above): repeated to allow "v02"
8630 \d+|\*(\d+\$)? width using optional (optionally specified) arg
8631 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8633 [%bcdefginopsuxDFOUX] format (mandatory)
8638 As of perl5.9.3, printf format checking is on by default.
8639 Internally, perl uses %p formats to provide an escape to
8640 some extended formatting. This block deals with those
8641 extensions: if it does not match, (char*)q is reset and
8642 the normal format processing code is used.
8644 Currently defined extensions are:
8645 %p include pointer address (standard)
8646 %-p (SVf) include an SV (previously %_)
8647 %-<num>p include an SV with precision <num>
8648 %1p (VDf) include a v-string (as %vd)
8649 %<num>p reserved for future extensions
8651 Robin Barker 2005-07-14
8658 EXPECT_NUMBER(q, n);
8665 argsv = va_arg(*args, SV*);
8666 eptr = SvPVx_const(argsv, elen);
8672 else if (n == vdNUMBER) { /* VDf */
8679 if (ckWARN_d(WARN_INTERNAL))
8680 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8681 "internal %%<num>p might conflict with future printf extensions");
8687 if (EXPECT_NUMBER(q, width)) {
8728 if (EXPECT_NUMBER(q, ewix))
8737 if ((vectorarg = asterisk)) {
8750 EXPECT_NUMBER(q, width);
8756 vecsv = va_arg(*args, SV*);
8758 vecsv = (evix ? evix <= svmax : svix < svmax) ?
8759 svargs[evix ? evix-1 : svix++] : &PL_sv_undef;
8760 dotstr = SvPV_const(vecsv, dotstrlen);
8767 else if (efix ? efix <= svmax : svix < svmax) {
8768 vecsv = svargs[efix ? efix-1 : svix++];
8769 vecstr = (U8*)SvPV_const(vecsv,veclen);
8770 vec_utf8 = DO_UTF8(vecsv);
8771 /* if this is a version object, we need to return the
8772 * stringified representation (which the SvPVX_const has
8773 * already done for us), but not vectorize the args
8775 if ( *q == 'd' && sv_derived_from(vecsv,"version") )
8777 q++; /* skip past the rest of the %vd format */
8778 eptr = (const char *) vecstr;
8792 i = va_arg(*args, int);
8794 i = (ewix ? ewix <= svmax : svix < svmax) ?
8795 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8797 width = (i < 0) ? -i : i;
8807 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
8809 /* XXX: todo, support specified precision parameter */
8813 i = va_arg(*args, int);
8815 i = (ewix ? ewix <= svmax : svix < svmax)
8816 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8817 precis = (i < 0) ? 0 : i;
8822 precis = precis * 10 + (*q++ - '0');
8831 case 'I': /* Ix, I32x, and I64x */
8833 if (q[1] == '6' && q[2] == '4') {
8839 if (q[1] == '3' && q[2] == '2') {
8849 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8860 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8861 if (*(q + 1) == 'l') { /* lld, llf */
8886 argsv = (efix ? efix <= svmax : svix < svmax) ?
8887 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
8894 uv = (args && !vectorize) ? va_arg(*args, int) : SvIVx(argsv);
8896 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
8898 eptr = (char*)utf8buf;
8899 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
8910 if (args && !vectorize) {
8911 eptr = va_arg(*args, char*);
8913 #ifdef MACOS_TRADITIONAL
8914 /* On MacOS, %#s format is used for Pascal strings */
8919 elen = strlen(eptr);
8921 eptr = (char *)nullstr;
8922 elen = sizeof nullstr - 1;
8926 eptr = SvPVx_const(argsv, elen);
8927 if (DO_UTF8(argsv)) {
8928 if (has_precis && precis < elen) {
8930 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
8933 if (width) { /* fudge width (can't fudge elen) */
8934 width += elen - sv_len_utf8(argsv);
8942 if (has_precis && elen > precis)
8949 if (alt || vectorize)
8951 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
8972 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8981 esignbuf[esignlen++] = plus;
8985 case 'h': iv = (short)va_arg(*args, int); break;
8986 case 'l': iv = va_arg(*args, long); break;
8987 case 'V': iv = va_arg(*args, IV); break;
8988 default: iv = va_arg(*args, int); break;
8990 case 'q': iv = va_arg(*args, Quad_t); break;
8995 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
8997 case 'h': iv = (short)tiv; break;
8998 case 'l': iv = (long)tiv; break;
9000 default: iv = tiv; break;
9002 case 'q': iv = (Quad_t)tiv; break;
9006 if ( !vectorize ) /* we already set uv above */
9011 esignbuf[esignlen++] = plus;
9015 esignbuf[esignlen++] = '-';
9058 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9069 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
9070 case 'l': uv = va_arg(*args, unsigned long); break;
9071 case 'V': uv = va_arg(*args, UV); break;
9072 default: uv = va_arg(*args, unsigned); break;
9074 case 'q': uv = va_arg(*args, Uquad_t); break;
9079 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
9081 case 'h': uv = (unsigned short)tuv; break;
9082 case 'l': uv = (unsigned long)tuv; break;
9084 default: uv = tuv; break;
9086 case 'q': uv = (Uquad_t)tuv; break;
9093 char *ptr = ebuf + sizeof ebuf;
9099 p = (char*)((c == 'X')
9100 ? "0123456789ABCDEF" : "0123456789abcdef");
9106 esignbuf[esignlen++] = '0';
9107 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9115 if (alt && *ptr != '0')
9124 esignbuf[esignlen++] = '0';
9125 esignbuf[esignlen++] = 'b';
9128 default: /* it had better be ten or less */
9132 } while (uv /= base);
9135 elen = (ebuf + sizeof ebuf) - ptr;
9139 zeros = precis - elen;
9140 else if (precis == 0 && elen == 1 && *eptr == '0')
9146 /* FLOATING POINT */
9149 c = 'f'; /* maybe %F isn't supported here */
9155 /* This is evil, but floating point is even more evil */
9157 /* for SV-style calling, we can only get NV
9158 for C-style calling, we assume %f is double;
9159 for simplicity we allow any of %Lf, %llf, %qf for long double
9163 #if defined(USE_LONG_DOUBLE)
9167 /* [perl #20339] - we should accept and ignore %lf rather than die */
9171 #if defined(USE_LONG_DOUBLE)
9172 intsize = args ? 0 : 'q';
9176 #if defined(HAS_LONG_DOUBLE)
9185 /* now we need (long double) if intsize == 'q', else (double) */
9186 nv = (args && !vectorize) ?
9187 #if LONG_DOUBLESIZE > DOUBLESIZE
9189 va_arg(*args, long double) :
9190 va_arg(*args, double)
9192 va_arg(*args, double)
9198 if (c != 'e' && c != 'E') {
9200 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9201 will cast our (long double) to (double) */
9202 (void)Perl_frexp(nv, &i);
9203 if (i == PERL_INT_MIN)
9204 Perl_die(aTHX_ "panic: frexp");
9206 need = BIT_DIGITS(i);
9208 need += has_precis ? precis : 6; /* known default */
9213 #ifdef HAS_LDBL_SPRINTF_BUG
9214 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9215 with sfio - Allen <allens@cpan.org> */
9218 # define MY_DBL_MAX DBL_MAX
9219 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9220 # if DOUBLESIZE >= 8
9221 # define MY_DBL_MAX 1.7976931348623157E+308L
9223 # define MY_DBL_MAX 3.40282347E+38L
9227 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9228 # define MY_DBL_MAX_BUG 1L
9230 # define MY_DBL_MAX_BUG MY_DBL_MAX
9234 # define MY_DBL_MIN DBL_MIN
9235 # else /* XXX guessing! -Allen */
9236 # if DOUBLESIZE >= 8
9237 # define MY_DBL_MIN 2.2250738585072014E-308L
9239 # define MY_DBL_MIN 1.17549435E-38L
9243 if ((intsize == 'q') && (c == 'f') &&
9244 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9246 /* it's going to be short enough that
9247 * long double precision is not needed */
9249 if ((nv <= 0L) && (nv >= -0L))
9250 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9252 /* would use Perl_fp_class as a double-check but not
9253 * functional on IRIX - see perl.h comments */
9255 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9256 /* It's within the range that a double can represent */
9257 #if defined(DBL_MAX) && !defined(DBL_MIN)
9258 if ((nv >= ((long double)1/DBL_MAX)) ||
9259 (nv <= (-(long double)1/DBL_MAX)))
9261 fix_ldbl_sprintf_bug = TRUE;
9264 if (fix_ldbl_sprintf_bug == TRUE) {
9274 # undef MY_DBL_MAX_BUG
9277 #endif /* HAS_LDBL_SPRINTF_BUG */
9279 need += 20; /* fudge factor */
9280 if (PL_efloatsize < need) {
9281 Safefree(PL_efloatbuf);
9282 PL_efloatsize = need + 20; /* more fudge */
9283 Newx(PL_efloatbuf, PL_efloatsize, char);
9284 PL_efloatbuf[0] = '\0';
9287 if ( !(width || left || plus || alt) && fill != '0'
9288 && has_precis && intsize != 'q' ) { /* Shortcuts */
9289 /* See earlier comment about buggy Gconvert when digits,
9291 if ( c == 'g' && precis) {
9292 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9293 /* May return an empty string for digits==0 */
9294 if (*PL_efloatbuf) {
9295 elen = strlen(PL_efloatbuf);
9296 goto float_converted;
9298 } else if ( c == 'f' && !precis) {
9299 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9304 char *ptr = ebuf + sizeof ebuf;
9307 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9308 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9309 if (intsize == 'q') {
9310 /* Copy the one or more characters in a long double
9311 * format before the 'base' ([efgEFG]) character to
9312 * the format string. */
9313 static char const prifldbl[] = PERL_PRIfldbl;
9314 char const *p = prifldbl + sizeof(prifldbl) - 3;
9315 while (p >= prifldbl) { *--ptr = *p--; }
9320 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9325 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9337 /* No taint. Otherwise we are in the strange situation
9338 * where printf() taints but print($float) doesn't.
9340 #if defined(HAS_LONG_DOUBLE)
9341 elen = ((intsize == 'q')
9342 ? my_sprintf(PL_efloatbuf, ptr, nv)
9343 : my_sprintf(PL_efloatbuf, ptr, (double)nv));
9345 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9349 eptr = PL_efloatbuf;
9355 i = SvCUR(sv) - origlen;
9356 if (args && !vectorize) {
9358 case 'h': *(va_arg(*args, short*)) = i; break;
9359 default: *(va_arg(*args, int*)) = i; break;
9360 case 'l': *(va_arg(*args, long*)) = i; break;
9361 case 'V': *(va_arg(*args, IV*)) = i; break;
9363 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9368 sv_setuv_mg(argsv, (UV)i);
9370 continue; /* not "break" */
9377 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
9378 && ckWARN(WARN_PRINTF))
9380 SV * const msg = sv_newmortal();
9381 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9382 (PL_op->op_type == OP_PRTF) ? "" : "s");
9385 Perl_sv_catpvf(aTHX_ msg,
9386 "\"%%%c\"", c & 0xFF);
9388 Perl_sv_catpvf(aTHX_ msg,
9389 "\"%%\\%03"UVof"\"",
9392 sv_catpv(msg, "end of string");
9393 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, msg); /* yes, this is reentrant */
9396 /* output mangled stuff ... */
9402 /* ... right here, because formatting flags should not apply */
9403 SvGROW(sv, SvCUR(sv) + elen + 1);
9405 Copy(eptr, p, elen, char);
9408 SvCUR_set(sv, p - SvPVX_const(sv));
9410 continue; /* not "break" */
9413 /* calculate width before utf8_upgrade changes it */
9414 have = esignlen + zeros + elen;
9416 if (is_utf8 != has_utf8) {
9419 sv_utf8_upgrade(sv);
9422 SV * const nsv = sv_2mortal(newSVpvn(eptr, elen));
9423 sv_utf8_upgrade(nsv);
9424 eptr = SvPVX_const(nsv);
9427 SvGROW(sv, SvCUR(sv) + elen + 1);
9432 need = (have > width ? have : width);
9435 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9437 if (esignlen && fill == '0') {
9439 for (i = 0; i < (int)esignlen; i++)
9443 memset(p, fill, gap);
9446 if (esignlen && fill != '0') {
9448 for (i = 0; i < (int)esignlen; i++)
9453 for (i = zeros; i; i--)
9457 Copy(eptr, p, elen, char);
9461 memset(p, ' ', gap);
9466 Copy(dotstr, p, dotstrlen, char);
9470 vectorize = FALSE; /* done iterating over vecstr */
9477 SvCUR_set(sv, p - SvPVX_const(sv));
9485 /* =========================================================================
9487 =head1 Cloning an interpreter
9489 All the macros and functions in this section are for the private use of
9490 the main function, perl_clone().
9492 The foo_dup() functions make an exact copy of an existing foo thinngy.
9493 During the course of a cloning, a hash table is used to map old addresses
9494 to new addresses. The table is created and manipulated with the
9495 ptr_table_* functions.
9499 ============================================================================*/
9502 #if defined(USE_ITHREADS)
9504 #ifndef GpREFCNT_inc
9505 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9509 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
9510 #define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
9511 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9512 #define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
9513 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9514 #define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
9515 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9516 #define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
9517 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9518 #define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
9519 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9520 #define SAVEPV(p) (p ? savepv(p) : Nullch)
9521 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
9524 /* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
9525 regcomp.c. AMS 20010712 */
9528 Perl_re_dup(pTHX_ const REGEXP *r, CLONE_PARAMS *param)
9533 struct reg_substr_datum *s;
9536 return (REGEXP *)NULL;
9538 if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
9541 len = r->offsets[0];
9542 npar = r->nparens+1;
9544 Newxc(ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
9545 Copy(r->program, ret->program, len+1, regnode);
9547 Newx(ret->startp, npar, I32);
9548 Copy(r->startp, ret->startp, npar, I32);
9549 Newx(ret->endp, npar, I32);
9550 Copy(r->startp, ret->startp, npar, I32);
9552 Newx(ret->substrs, 1, struct reg_substr_data);
9553 for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
9554 s->min_offset = r->substrs->data[i].min_offset;
9555 s->max_offset = r->substrs->data[i].max_offset;
9556 s->substr = sv_dup_inc(r->substrs->data[i].substr, param);
9557 s->utf8_substr = sv_dup_inc(r->substrs->data[i].utf8_substr, param);
9560 ret->regstclass = NULL;
9563 const int count = r->data->count;
9566 Newxc(d, sizeof(struct reg_data) + count*sizeof(void *),
9567 char, struct reg_data);
9568 Newx(d->what, count, U8);
9571 for (i = 0; i < count; i++) {
9572 d->what[i] = r->data->what[i];
9573 switch (d->what[i]) {
9574 /* legal options are one of: sfpont
9575 see also regcomp.h and pregfree() */
9577 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
9580 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
9583 /* This is cheating. */
9584 Newx(d->data[i], 1, struct regnode_charclass_class);
9585 StructCopy(r->data->data[i], d->data[i],
9586 struct regnode_charclass_class);
9587 ret->regstclass = (regnode*)d->data[i];
9590 /* Compiled op trees are readonly, and can thus be
9591 shared without duplication. */
9593 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
9597 d->data[i] = r->data->data[i];
9600 d->data[i] = r->data->data[i];
9602 ((reg_trie_data*)d->data[i])->refcount++;
9606 Perl_croak(aTHX_ "panic: re_dup unknown data code '%c'", r->data->what[i]);
9615 Newx(ret->offsets, 2*len+1, U32);
9616 Copy(r->offsets, ret->offsets, 2*len+1, U32);
9618 ret->precomp = SAVEPVN(r->precomp, r->prelen);
9619 ret->refcnt = r->refcnt;
9620 ret->minlen = r->minlen;
9621 ret->prelen = r->prelen;
9622 ret->nparens = r->nparens;
9623 ret->lastparen = r->lastparen;
9624 ret->lastcloseparen = r->lastcloseparen;
9625 ret->reganch = r->reganch;
9627 ret->sublen = r->sublen;
9629 if (RX_MATCH_COPIED(ret))
9630 ret->subbeg = SAVEPVN(r->subbeg, r->sublen);
9632 ret->subbeg = Nullch;
9633 #ifdef PERL_OLD_COPY_ON_WRITE
9634 ret->saved_copy = Nullsv;
9637 ptr_table_store(PL_ptr_table, r, ret);
9641 /* duplicate a file handle */
9644 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
9648 PERL_UNUSED_ARG(type);
9651 return (PerlIO*)NULL;
9653 /* look for it in the table first */
9654 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9658 /* create anew and remember what it is */
9659 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
9660 ptr_table_store(PL_ptr_table, fp, ret);
9664 /* duplicate a directory handle */
9667 Perl_dirp_dup(pTHX_ DIR *dp)
9675 /* duplicate a typeglob */
9678 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
9683 /* look for it in the table first */
9684 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9688 /* create anew and remember what it is */
9690 ptr_table_store(PL_ptr_table, gp, ret);
9693 ret->gp_refcnt = 0; /* must be before any other dups! */
9694 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
9695 ret->gp_io = io_dup_inc(gp->gp_io, param);
9696 ret->gp_form = cv_dup_inc(gp->gp_form, param);
9697 ret->gp_av = av_dup_inc(gp->gp_av, param);
9698 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
9699 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9700 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
9701 ret->gp_cvgen = gp->gp_cvgen;
9702 ret->gp_line = gp->gp_line;
9703 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
9707 /* duplicate a chain of magic */
9710 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
9712 MAGIC *mgprev = (MAGIC*)NULL;
9715 return (MAGIC*)NULL;
9716 /* look for it in the table first */
9717 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9721 for (; mg; mg = mg->mg_moremagic) {
9723 Newxz(nmg, 1, MAGIC);
9725 mgprev->mg_moremagic = nmg;
9728 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
9729 nmg->mg_private = mg->mg_private;
9730 nmg->mg_type = mg->mg_type;
9731 nmg->mg_flags = mg->mg_flags;
9732 if (mg->mg_type == PERL_MAGIC_qr) {
9733 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
9735 else if(mg->mg_type == PERL_MAGIC_backref) {
9736 const AV * const av = (AV*) mg->mg_obj;
9739 (void)SvREFCNT_inc(nmg->mg_obj = (SV*)newAV());
9741 for (i = AvFILLp(av); i >= 0; i--) {
9742 if (!svp[i]) continue;
9743 av_push((AV*)nmg->mg_obj,sv_dup(svp[i],param));
9746 else if (mg->mg_type == PERL_MAGIC_symtab) {
9747 nmg->mg_obj = mg->mg_obj;
9750 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
9751 ? sv_dup_inc(mg->mg_obj, param)
9752 : sv_dup(mg->mg_obj, param);
9754 nmg->mg_len = mg->mg_len;
9755 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
9756 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
9757 if (mg->mg_len > 0) {
9758 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
9759 if (mg->mg_type == PERL_MAGIC_overload_table &&
9760 AMT_AMAGIC((AMT*)mg->mg_ptr))
9762 AMT * const amtp = (AMT*)mg->mg_ptr;
9763 AMT * const namtp = (AMT*)nmg->mg_ptr;
9765 for (i = 1; i < NofAMmeth; i++) {
9766 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
9770 else if (mg->mg_len == HEf_SVKEY)
9771 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
9773 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9774 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9781 /* create a new pointer-mapping table */
9784 Perl_ptr_table_new(pTHX)
9787 Newxz(tbl, 1, PTR_TBL_t);
9790 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
9795 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 3)
9797 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 2)
9801 we use the PTE_SVSLOT 'reservation' made above, both here (in the
9802 following define) and at call to new_body_inline made below in
9803 Perl_ptr_table_store()
9806 #define del_pte(p) del_body_type(p, PTE_SVSLOT)
9808 /* map an existing pointer using a table */
9811 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, const void *sv)
9813 PTR_TBL_ENT_t *tblent;
9814 const UV hash = PTR_TABLE_HASH(sv);
9816 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9817 for (; tblent; tblent = tblent->next) {
9818 if (tblent->oldval == sv)
9819 return tblent->newval;
9824 /* add a new entry to a pointer-mapping table */
9827 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, const void *oldsv, void *newsv)
9829 PTR_TBL_ENT_t *tblent, **otblent;
9830 /* XXX this may be pessimal on platforms where pointers aren't good
9831 * hash values e.g. if they grow faster in the most significant
9833 const UV hash = PTR_TABLE_HASH(oldsv);
9837 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
9838 for (tblent = *otblent; tblent; empty=0, tblent = tblent->next) {
9839 if (tblent->oldval == oldsv) {
9840 tblent->newval = newsv;
9844 new_body_inline(tblent, &PL_body_roots[PTE_SVSLOT],
9845 sizeof(struct ptr_tbl_ent), PTE_SVSLOT);
9846 tblent->oldval = oldsv;
9847 tblent->newval = newsv;
9848 tblent->next = *otblent;
9851 if (!empty && tbl->tbl_items > tbl->tbl_max)
9852 ptr_table_split(tbl);
9855 /* double the hash bucket size of an existing ptr table */
9858 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9860 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
9861 const UV oldsize = tbl->tbl_max + 1;
9862 UV newsize = oldsize * 2;
9865 Renew(ary, newsize, PTR_TBL_ENT_t*);
9866 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9867 tbl->tbl_max = --newsize;
9869 for (i=0; i < oldsize; i++, ary++) {
9870 PTR_TBL_ENT_t **curentp, **entp, *ent;
9873 curentp = ary + oldsize;
9874 for (entp = ary, ent = *ary; ent; ent = *entp) {
9875 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
9877 ent->next = *curentp;
9887 /* remove all the entries from a ptr table */
9890 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9892 register PTR_TBL_ENT_t **array;
9893 register PTR_TBL_ENT_t *entry;
9897 if (!tbl || !tbl->tbl_items) {
9901 array = tbl->tbl_ary;
9907 PTR_TBL_ENT_t *oentry = entry;
9908 entry = entry->next;
9912 if (++riter > max) {
9915 entry = array[riter];
9922 /* clear and free a ptr table */
9925 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9930 ptr_table_clear(tbl);
9931 Safefree(tbl->tbl_ary);
9937 Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param)
9940 SvRV_set(dstr, SvWEAKREF(sstr)
9941 ? sv_dup(SvRV(sstr), param)
9942 : sv_dup_inc(SvRV(sstr), param));
9945 else if (SvPVX_const(sstr)) {
9946 /* Has something there */
9948 /* Normal PV - clone whole allocated space */
9949 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
9950 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
9951 /* Not that normal - actually sstr is copy on write.
9952 But we are a true, independant SV, so: */
9953 SvREADONLY_off(dstr);
9958 /* Special case - not normally malloced for some reason */
9959 if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
9960 /* A "shared" PV - clone it as "shared" PV */
9962 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
9966 /* Some other special case - random pointer */
9967 SvPV_set(dstr, SvPVX(sstr));
9973 if (SvTYPE(dstr) == SVt_RV)
9974 SvRV_set(dstr, NULL);
9980 /* duplicate an SV of any type (including AV, HV etc) */
9983 Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param)
9988 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
9990 /* look for it in the table first */
9991 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
9995 if(param->flags & CLONEf_JOIN_IN) {
9996 /** We are joining here so we don't want do clone
9997 something that is bad **/
10000 if(SvTYPE(sstr) == SVt_PVHV &&
10001 (hvname = HvNAME_get(sstr))) {
10002 /** don't clone stashes if they already exist **/
10003 return (SV*)gv_stashpv(hvname,0);
10007 /* create anew and remember what it is */
10010 #ifdef DEBUG_LEAKING_SCALARS
10011 dstr->sv_debug_optype = sstr->sv_debug_optype;
10012 dstr->sv_debug_line = sstr->sv_debug_line;
10013 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10014 dstr->sv_debug_cloned = 1;
10016 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
10018 dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
10022 ptr_table_store(PL_ptr_table, sstr, dstr);
10025 SvFLAGS(dstr) = SvFLAGS(sstr);
10026 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
10027 SvREFCNT(dstr) = 0; /* must be before any other dups! */
10030 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
10031 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10032 PL_watch_pvx, SvPVX_const(sstr));
10035 /* don't clone objects whose class has asked us not to */
10036 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10037 SvFLAGS(dstr) &= ~SVTYPEMASK;
10038 SvOBJECT_off(dstr);
10042 switch (SvTYPE(sstr)) {
10044 SvANY(dstr) = NULL;
10047 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
10048 SvIV_set(dstr, SvIVX(sstr));
10051 SvANY(dstr) = new_XNV();
10052 SvNV_set(dstr, SvNVX(sstr));
10055 SvANY(dstr) = &(dstr->sv_u.svu_rv);
10056 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10060 /* These are all the types that need complex bodies allocating. */
10061 size_t new_body_length;
10062 size_t new_body_offset = 0;
10063 void **new_body_arena;
10064 void **new_body_arenaroot;
10066 svtype sv_type = SvTYPE(sstr);
10070 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]",
10075 new_body = new_XPVIO();
10076 new_body_length = sizeof(XPVIO);
10079 new_body = new_XPVFM();
10080 new_body_length = sizeof(XPVFM);
10084 new_body_arena = &PL_body_roots[SVt_PVHV];
10085 new_body_arenaroot = &PL_body_arenaroots[SVt_PVHV];
10086 new_body_offset = - bodies_by_type[SVt_PVHV].offset;
10088 new_body_length = STRUCT_OFFSET(XPVHV, xmg_stash)
10089 + sizeof (((XPVHV*)SvANY(sstr))->xmg_stash)
10093 new_body_arena = &PL_body_roots[SVt_PVAV];
10094 new_body_arenaroot = &PL_body_arenaroots[SVt_PVAV];
10095 new_body_offset = - bodies_by_type[SVt_PVAV].offset;
10097 new_body_length = STRUCT_OFFSET(XPVHV, xmg_stash)
10098 + sizeof (((XPVHV*)SvANY(sstr))->xmg_stash)
10102 if (GvUNIQUE((GV*)sstr)) {
10103 /* Do sharing here, and fall through */
10110 new_body_length = bodies_by_type[sv_type].size;
10111 new_body_arena = &PL_body_roots[sv_type];
10112 new_body_arenaroot = &PL_body_arenaroots[sv_type];
10116 new_body_offset = - bodies_by_type[SVt_PVIV].offset;
10117 new_body_length = sizeof(XPVIV) - new_body_offset;
10118 new_body_arena = &PL_body_roots[SVt_PVIV];
10119 new_body_arenaroot = &PL_body_arenaroots[SVt_PVIV];
10122 new_body_offset = - bodies_by_type[SVt_PV].offset;
10123 new_body_length = sizeof(XPV) - new_body_offset;
10124 new_body_arena = &PL_body_roots[SVt_PV];
10125 new_body_arenaroot = &PL_body_arenaroots[SVt_PV];
10127 assert(new_body_length);
10129 new_body_inline(new_body, new_body_arena,
10130 new_body_length, SvTYPE(sstr));
10132 new_body = (void*)((char*)new_body - new_body_offset);
10134 /* We always allocated the full length item with PURIFY */
10135 new_body_length += new_body_offset;
10136 new_body_offset = 0;
10137 new_body = my_safemalloc(new_body_length);
10141 SvANY(dstr) = new_body;
10143 Copy(((char*)SvANY(sstr)) + new_body_offset,
10144 ((char*)SvANY(dstr)) + new_body_offset,
10145 new_body_length, char);
10147 if (SvTYPE(sstr) != SVt_PVAV && SvTYPE(sstr) != SVt_PVHV)
10148 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10150 /* The Copy above means that all the source (unduplicated) pointers
10151 are now in the destination. We can check the flags and the
10152 pointers in either, but it's possible that there's less cache
10153 missing by always going for the destination.
10154 FIXME - instrument and check that assumption */
10155 if (SvTYPE(sstr) >= SVt_PVMG) {
10157 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
10159 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
10162 switch (SvTYPE(sstr)) {
10174 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
10175 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
10176 LvTARG(dstr) = dstr;
10177 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
10178 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
10180 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
10183 GvNAME(dstr) = SAVEPVN(GvNAME(dstr), GvNAMELEN(dstr));
10184 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
10185 /* Don't call sv_add_backref here as it's going to be created
10186 as part of the magic cloning of the symbol table. */
10187 GvGP(dstr) = gp_dup(GvGP(dstr), param);
10188 (void)GpREFCNT_inc(GvGP(dstr));
10191 IoIFP(dstr) = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
10192 if (IoOFP(dstr) == IoIFP(sstr))
10193 IoOFP(dstr) = IoIFP(dstr);
10195 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
10196 /* PL_rsfp_filters entries have fake IoDIRP() */
10197 if (IoDIRP(dstr) && !(IoFLAGS(dstr) & IOf_FAKE_DIRP))
10198 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr));
10199 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
10200 /* I have no idea why fake dirp (rsfps)
10201 should be treated differently but otherwise
10202 we end up with leaks -- sky*/
10203 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param);
10204 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param);
10205 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param);
10207 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param);
10208 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param);
10209 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param);
10211 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr));
10212 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr));
10213 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr));
10216 if (AvARRAY((AV*)sstr)) {
10217 SV **dst_ary, **src_ary;
10218 SSize_t items = AvFILLp((AV*)sstr) + 1;
10220 src_ary = AvARRAY((AV*)sstr);
10221 Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
10222 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10223 SvPV_set(dstr, (char*)dst_ary);
10224 AvALLOC((AV*)dstr) = dst_ary;
10225 if (AvREAL((AV*)sstr)) {
10226 while (items-- > 0)
10227 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10230 while (items-- > 0)
10231 *dst_ary++ = sv_dup(*src_ary++, param);
10233 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10234 while (items-- > 0) {
10235 *dst_ary++ = &PL_sv_undef;
10239 SvPV_set(dstr, Nullch);
10240 AvALLOC((AV*)dstr) = (SV**)NULL;
10247 if (HvARRAY((HV*)sstr)) {
10249 const bool sharekeys = !!HvSHAREKEYS(sstr);
10250 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10251 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10253 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
10254 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
10256 HvARRAY(dstr) = (HE**)darray;
10257 while (i <= sxhv->xhv_max) {
10258 const HE *source = HvARRAY(sstr)[i];
10259 HvARRAY(dstr)[i] = source
10260 ? he_dup(source, sharekeys, param) : 0;
10264 struct xpvhv_aux *saux = HvAUX(sstr);
10265 struct xpvhv_aux *daux = HvAUX(dstr);
10266 /* This flag isn't copied. */
10267 /* SvOOK_on(hv) attacks the IV flags. */
10268 SvFLAGS(dstr) |= SVf_OOK;
10270 hvname = saux->xhv_name;
10272 = hvname ? hek_dup(hvname, param) : hvname;
10274 daux->xhv_riter = saux->xhv_riter;
10275 daux->xhv_eiter = saux->xhv_eiter
10276 ? he_dup(saux->xhv_eiter,
10277 (bool)!!HvSHAREKEYS(sstr), param) : 0;
10281 SvPV_set(dstr, Nullch);
10283 /* Record stashes for possible cloning in Perl_clone(). */
10285 av_push(param->stashes, dstr);
10290 /* NOTE: not refcounted */
10291 CvSTASH(dstr) = hv_dup(CvSTASH(dstr), param);
10293 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
10295 if (CvCONST(dstr)) {
10296 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
10297 SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
10298 sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
10300 /* don't dup if copying back - CvGV isn't refcounted, so the
10301 * duped GV may never be freed. A bit of a hack! DAPM */
10302 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
10303 Nullgv : gv_dup(CvGV(dstr), param) ;
10304 if (!(param->flags & CLONEf_COPY_STACKS)) {
10307 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10309 CvWEAKOUTSIDE(sstr)
10310 ? cv_dup( CvOUTSIDE(dstr), param)
10311 : cv_dup_inc(CvOUTSIDE(dstr), param);
10313 CvFILE(dstr) = SAVEPV(CvFILE(dstr));
10319 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10325 /* duplicate a context */
10328 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10330 PERL_CONTEXT *ncxs;
10333 return (PERL_CONTEXT*)NULL;
10335 /* look for it in the table first */
10336 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10340 /* create anew and remember what it is */
10341 Newxz(ncxs, max + 1, PERL_CONTEXT);
10342 ptr_table_store(PL_ptr_table, cxs, ncxs);
10345 PERL_CONTEXT *cx = &cxs[ix];
10346 PERL_CONTEXT *ncx = &ncxs[ix];
10347 ncx->cx_type = cx->cx_type;
10348 if (CxTYPE(cx) == CXt_SUBST) {
10349 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10352 ncx->blk_oldsp = cx->blk_oldsp;
10353 ncx->blk_oldcop = cx->blk_oldcop;
10354 ncx->blk_oldmarksp = cx->blk_oldmarksp;
10355 ncx->blk_oldscopesp = cx->blk_oldscopesp;
10356 ncx->blk_oldpm = cx->blk_oldpm;
10357 ncx->blk_gimme = cx->blk_gimme;
10358 switch (CxTYPE(cx)) {
10360 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
10361 ? cv_dup_inc(cx->blk_sub.cv, param)
10362 : cv_dup(cx->blk_sub.cv,param));
10363 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
10364 ? av_dup_inc(cx->blk_sub.argarray, param)
10366 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
10367 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
10368 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10369 ncx->blk_sub.lval = cx->blk_sub.lval;
10370 ncx->blk_sub.retop = cx->blk_sub.retop;
10373 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10374 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
10375 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
10376 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
10377 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
10378 ncx->blk_eval.retop = cx->blk_eval.retop;
10381 ncx->blk_loop.label = cx->blk_loop.label;
10382 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
10383 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
10384 ncx->blk_loop.next_op = cx->blk_loop.next_op;
10385 ncx->blk_loop.last_op = cx->blk_loop.last_op;
10386 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
10387 ? cx->blk_loop.iterdata
10388 : gv_dup((GV*)cx->blk_loop.iterdata, param));
10389 ncx->blk_loop.oldcomppad
10390 = (PAD*)ptr_table_fetch(PL_ptr_table,
10391 cx->blk_loop.oldcomppad);
10392 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
10393 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
10394 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
10395 ncx->blk_loop.iterix = cx->blk_loop.iterix;
10396 ncx->blk_loop.itermax = cx->blk_loop.itermax;
10399 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
10400 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
10401 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
10402 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10403 ncx->blk_sub.retop = cx->blk_sub.retop;
10415 /* duplicate a stack info structure */
10418 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
10423 return (PERL_SI*)NULL;
10425 /* look for it in the table first */
10426 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10430 /* create anew and remember what it is */
10431 Newxz(nsi, 1, PERL_SI);
10432 ptr_table_store(PL_ptr_table, si, nsi);
10434 nsi->si_stack = av_dup_inc(si->si_stack, param);
10435 nsi->si_cxix = si->si_cxix;
10436 nsi->si_cxmax = si->si_cxmax;
10437 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
10438 nsi->si_type = si->si_type;
10439 nsi->si_prev = si_dup(si->si_prev, param);
10440 nsi->si_next = si_dup(si->si_next, param);
10441 nsi->si_markoff = si->si_markoff;
10446 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10447 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
10448 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10449 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
10450 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10451 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
10452 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10453 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
10454 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10455 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10456 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10457 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10458 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10459 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10462 #define pv_dup_inc(p) SAVEPV(p)
10463 #define pv_dup(p) SAVEPV(p)
10464 #define svp_dup_inc(p,pp) any_dup(p,pp)
10466 /* map any object to the new equivent - either something in the
10467 * ptr table, or something in the interpreter structure
10471 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
10476 return (void*)NULL;
10478 /* look for it in the table first */
10479 ret = ptr_table_fetch(PL_ptr_table, v);
10483 /* see if it is part of the interpreter structure */
10484 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
10485 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
10493 /* duplicate the save stack */
10496 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
10498 ANY * const ss = proto_perl->Tsavestack;
10499 const I32 max = proto_perl->Tsavestack_max;
10500 I32 ix = proto_perl->Tsavestack_ix;
10512 void (*dptr) (void*);
10513 void (*dxptr) (pTHX_ void*);
10515 Newxz(nss, max, ANY);
10518 I32 i = POPINT(ss,ix);
10519 TOPINT(nss,ix) = i;
10521 case SAVEt_ITEM: /* normal string */
10522 sv = (SV*)POPPTR(ss,ix);
10523 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10524 sv = (SV*)POPPTR(ss,ix);
10525 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10527 case SAVEt_SV: /* scalar reference */
10528 sv = (SV*)POPPTR(ss,ix);
10529 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10530 gv = (GV*)POPPTR(ss,ix);
10531 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10533 case SAVEt_GENERIC_PVREF: /* generic char* */
10534 c = (char*)POPPTR(ss,ix);
10535 TOPPTR(nss,ix) = pv_dup(c);
10536 ptr = POPPTR(ss,ix);
10537 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10539 case SAVEt_SHARED_PVREF: /* char* in shared space */
10540 c = (char*)POPPTR(ss,ix);
10541 TOPPTR(nss,ix) = savesharedpv(c);
10542 ptr = POPPTR(ss,ix);
10543 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10545 case SAVEt_GENERIC_SVREF: /* generic sv */
10546 case SAVEt_SVREF: /* scalar reference */
10547 sv = (SV*)POPPTR(ss,ix);
10548 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10549 ptr = POPPTR(ss,ix);
10550 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10552 case SAVEt_AV: /* array reference */
10553 av = (AV*)POPPTR(ss,ix);
10554 TOPPTR(nss,ix) = av_dup_inc(av, param);
10555 gv = (GV*)POPPTR(ss,ix);
10556 TOPPTR(nss,ix) = gv_dup(gv, param);
10558 case SAVEt_HV: /* hash reference */
10559 hv = (HV*)POPPTR(ss,ix);
10560 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10561 gv = (GV*)POPPTR(ss,ix);
10562 TOPPTR(nss,ix) = gv_dup(gv, param);
10564 case SAVEt_INT: /* int reference */
10565 ptr = POPPTR(ss,ix);
10566 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10567 intval = (int)POPINT(ss,ix);
10568 TOPINT(nss,ix) = intval;
10570 case SAVEt_LONG: /* long reference */
10571 ptr = POPPTR(ss,ix);
10572 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10573 longval = (long)POPLONG(ss,ix);
10574 TOPLONG(nss,ix) = longval;
10576 case SAVEt_I32: /* I32 reference */
10577 case SAVEt_I16: /* I16 reference */
10578 case SAVEt_I8: /* I8 reference */
10579 ptr = POPPTR(ss,ix);
10580 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10582 TOPINT(nss,ix) = i;
10584 case SAVEt_IV: /* IV reference */
10585 ptr = POPPTR(ss,ix);
10586 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10588 TOPIV(nss,ix) = iv;
10590 case SAVEt_SPTR: /* SV* reference */
10591 ptr = POPPTR(ss,ix);
10592 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10593 sv = (SV*)POPPTR(ss,ix);
10594 TOPPTR(nss,ix) = sv_dup(sv, param);
10596 case SAVEt_VPTR: /* random* reference */
10597 ptr = POPPTR(ss,ix);
10598 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10599 ptr = POPPTR(ss,ix);
10600 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10602 case SAVEt_PPTR: /* char* reference */
10603 ptr = POPPTR(ss,ix);
10604 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10605 c = (char*)POPPTR(ss,ix);
10606 TOPPTR(nss,ix) = pv_dup(c);
10608 case SAVEt_HPTR: /* HV* reference */
10609 ptr = POPPTR(ss,ix);
10610 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10611 hv = (HV*)POPPTR(ss,ix);
10612 TOPPTR(nss,ix) = hv_dup(hv, param);
10614 case SAVEt_APTR: /* AV* reference */
10615 ptr = POPPTR(ss,ix);
10616 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10617 av = (AV*)POPPTR(ss,ix);
10618 TOPPTR(nss,ix) = av_dup(av, param);
10621 gv = (GV*)POPPTR(ss,ix);
10622 TOPPTR(nss,ix) = gv_dup(gv, param);
10624 case SAVEt_GP: /* scalar reference */
10625 gp = (GP*)POPPTR(ss,ix);
10626 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
10627 (void)GpREFCNT_inc(gp);
10628 gv = (GV*)POPPTR(ss,ix);
10629 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10630 c = (char*)POPPTR(ss,ix);
10631 TOPPTR(nss,ix) = pv_dup(c);
10633 TOPIV(nss,ix) = iv;
10635 TOPIV(nss,ix) = iv;
10638 case SAVEt_MORTALIZESV:
10639 sv = (SV*)POPPTR(ss,ix);
10640 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10643 ptr = POPPTR(ss,ix);
10644 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10645 /* these are assumed to be refcounted properly */
10647 switch (((OP*)ptr)->op_type) {
10649 case OP_LEAVESUBLV:
10653 case OP_LEAVEWRITE:
10654 TOPPTR(nss,ix) = ptr;
10659 TOPPTR(nss,ix) = Nullop;
10664 TOPPTR(nss,ix) = Nullop;
10667 c = (char*)POPPTR(ss,ix);
10668 TOPPTR(nss,ix) = pv_dup_inc(c);
10670 case SAVEt_CLEARSV:
10671 longval = POPLONG(ss,ix);
10672 TOPLONG(nss,ix) = longval;
10675 hv = (HV*)POPPTR(ss,ix);
10676 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10677 c = (char*)POPPTR(ss,ix);
10678 TOPPTR(nss,ix) = pv_dup_inc(c);
10680 TOPINT(nss,ix) = i;
10682 case SAVEt_DESTRUCTOR:
10683 ptr = POPPTR(ss,ix);
10684 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10685 dptr = POPDPTR(ss,ix);
10686 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
10687 any_dup(FPTR2DPTR(void *, dptr),
10690 case SAVEt_DESTRUCTOR_X:
10691 ptr = POPPTR(ss,ix);
10692 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10693 dxptr = POPDXPTR(ss,ix);
10694 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
10695 any_dup(FPTR2DPTR(void *, dxptr),
10698 case SAVEt_REGCONTEXT:
10701 TOPINT(nss,ix) = i;
10704 case SAVEt_STACK_POS: /* Position on Perl stack */
10706 TOPINT(nss,ix) = i;
10708 case SAVEt_AELEM: /* array element */
10709 sv = (SV*)POPPTR(ss,ix);
10710 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10712 TOPINT(nss,ix) = i;
10713 av = (AV*)POPPTR(ss,ix);
10714 TOPPTR(nss,ix) = av_dup_inc(av, param);
10716 case SAVEt_HELEM: /* hash element */
10717 sv = (SV*)POPPTR(ss,ix);
10718 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10719 sv = (SV*)POPPTR(ss,ix);
10720 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10721 hv = (HV*)POPPTR(ss,ix);
10722 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10725 ptr = POPPTR(ss,ix);
10726 TOPPTR(nss,ix) = ptr;
10730 TOPINT(nss,ix) = i;
10732 case SAVEt_COMPPAD:
10733 av = (AV*)POPPTR(ss,ix);
10734 TOPPTR(nss,ix) = av_dup(av, param);
10737 longval = (long)POPLONG(ss,ix);
10738 TOPLONG(nss,ix) = longval;
10739 ptr = POPPTR(ss,ix);
10740 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10741 sv = (SV*)POPPTR(ss,ix);
10742 TOPPTR(nss,ix) = sv_dup(sv, param);
10745 ptr = POPPTR(ss,ix);
10746 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10747 longval = (long)POPBOOL(ss,ix);
10748 TOPBOOL(nss,ix) = (bool)longval;
10750 case SAVEt_SET_SVFLAGS:
10752 TOPINT(nss,ix) = i;
10754 TOPINT(nss,ix) = i;
10755 sv = (SV*)POPPTR(ss,ix);
10756 TOPPTR(nss,ix) = sv_dup(sv, param);
10759 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
10767 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
10768 * flag to the result. This is done for each stash before cloning starts,
10769 * so we know which stashes want their objects cloned */
10772 do_mark_cloneable_stash(pTHX_ SV *sv)
10774 const HEK * const hvname = HvNAME_HEK((HV*)sv);
10776 GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
10777 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
10778 if (cloner && GvCV(cloner)) {
10785 XPUSHs(sv_2mortal(newSVhek(hvname)));
10787 call_sv((SV*)GvCV(cloner), G_SCALAR);
10794 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
10802 =for apidoc perl_clone
10804 Create and return a new interpreter by cloning the current one.
10806 perl_clone takes these flags as parameters:
10808 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10809 without it we only clone the data and zero the stacks,
10810 with it we copy the stacks and the new perl interpreter is
10811 ready to run at the exact same point as the previous one.
10812 The pseudo-fork code uses COPY_STACKS while the
10813 threads->new doesn't.
10815 CLONEf_KEEP_PTR_TABLE
10816 perl_clone keeps a ptr_table with the pointer of the old
10817 variable as a key and the new variable as a value,
10818 this allows it to check if something has been cloned and not
10819 clone it again but rather just use the value and increase the
10820 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10821 the ptr_table using the function
10822 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10823 reason to keep it around is if you want to dup some of your own
10824 variable who are outside the graph perl scans, example of this
10825 code is in threads.xs create
10828 This is a win32 thing, it is ignored on unix, it tells perls
10829 win32host code (which is c++) to clone itself, this is needed on
10830 win32 if you want to run two threads at the same time,
10831 if you just want to do some stuff in a separate perl interpreter
10832 and then throw it away and return to the original one,
10833 you don't need to do anything.
10838 /* XXX the above needs expanding by someone who actually understands it ! */
10839 EXTERN_C PerlInterpreter *
10840 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10843 perl_clone(PerlInterpreter *proto_perl, UV flags)
10846 #ifdef PERL_IMPLICIT_SYS
10848 /* perlhost.h so we need to call into it
10849 to clone the host, CPerlHost should have a c interface, sky */
10851 if (flags & CLONEf_CLONE_HOST) {
10852 return perl_clone_host(proto_perl,flags);
10854 return perl_clone_using(proto_perl, flags,
10856 proto_perl->IMemShared,
10857 proto_perl->IMemParse,
10859 proto_perl->IStdIO,
10863 proto_perl->IProc);
10867 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10868 struct IPerlMem* ipM, struct IPerlMem* ipMS,
10869 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10870 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10871 struct IPerlDir* ipD, struct IPerlSock* ipS,
10872 struct IPerlProc* ipP)
10874 /* XXX many of the string copies here can be optimized if they're
10875 * constants; they need to be allocated as common memory and just
10876 * their pointers copied. */
10879 CLONE_PARAMS clone_params;
10880 CLONE_PARAMS* param = &clone_params;
10882 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
10883 /* for each stash, determine whether its objects should be cloned */
10884 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10885 PERL_SET_THX(my_perl);
10888 Poison(my_perl, 1, PerlInterpreter);
10890 PL_curcop = (COP *)Nullop;
10894 PL_savestack_ix = 0;
10895 PL_savestack_max = -1;
10896 PL_sig_pending = 0;
10897 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10898 # else /* !DEBUGGING */
10899 Zero(my_perl, 1, PerlInterpreter);
10900 # endif /* DEBUGGING */
10902 /* host pointers */
10904 PL_MemShared = ipMS;
10905 PL_MemParse = ipMP;
10912 #else /* !PERL_IMPLICIT_SYS */
10914 CLONE_PARAMS clone_params;
10915 CLONE_PARAMS* param = &clone_params;
10916 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
10917 /* for each stash, determine whether its objects should be cloned */
10918 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10919 PERL_SET_THX(my_perl);
10922 Poison(my_perl, 1, PerlInterpreter);
10924 PL_curcop = (COP *)Nullop;
10928 PL_savestack_ix = 0;
10929 PL_savestack_max = -1;
10930 PL_sig_pending = 0;
10931 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10932 # else /* !DEBUGGING */
10933 Zero(my_perl, 1, PerlInterpreter);
10934 # endif /* DEBUGGING */
10935 #endif /* PERL_IMPLICIT_SYS */
10936 param->flags = flags;
10937 param->proto_perl = proto_perl;
10939 Zero(&PL_body_arenaroots, 1, PL_body_arenaroots);
10940 Zero(&PL_body_roots, 1, PL_body_roots);
10942 PL_he_arenaroot = NULL;
10945 PL_nice_chunk = NULL;
10946 PL_nice_chunk_size = 0;
10948 PL_sv_objcount = 0;
10949 PL_sv_root = Nullsv;
10950 PL_sv_arenaroot = Nullsv;
10952 PL_debug = proto_perl->Idebug;
10954 PL_hash_seed = proto_perl->Ihash_seed;
10955 PL_rehash_seed = proto_perl->Irehash_seed;
10957 #ifdef USE_REENTRANT_API
10958 /* XXX: things like -Dm will segfault here in perlio, but doing
10959 * PERL_SET_CONTEXT(proto_perl);
10960 * breaks too many other things
10962 Perl_reentrant_init(aTHX);
10965 /* create SV map for pointer relocation */
10966 PL_ptr_table = ptr_table_new();
10968 /* initialize these special pointers as early as possible */
10969 SvANY(&PL_sv_undef) = NULL;
10970 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
10971 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
10972 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
10974 SvANY(&PL_sv_no) = new_XPVNV();
10975 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
10976 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10977 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10978 SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
10979 SvCUR_set(&PL_sv_no, 0);
10980 SvLEN_set(&PL_sv_no, 1);
10981 SvIV_set(&PL_sv_no, 0);
10982 SvNV_set(&PL_sv_no, 0);
10983 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
10985 SvANY(&PL_sv_yes) = new_XPVNV();
10986 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
10987 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10988 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10989 SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
10990 SvCUR_set(&PL_sv_yes, 1);
10991 SvLEN_set(&PL_sv_yes, 2);
10992 SvIV_set(&PL_sv_yes, 1);
10993 SvNV_set(&PL_sv_yes, 1);
10994 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
10996 /* create (a non-shared!) shared string table */
10997 PL_strtab = newHV();
10998 HvSHAREKEYS_off(PL_strtab);
10999 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11000 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11002 PL_compiling = proto_perl->Icompiling;
11004 /* These two PVs will be free'd special way so must set them same way op.c does */
11005 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11006 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11008 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
11009 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11011 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11012 if (!specialWARN(PL_compiling.cop_warnings))
11013 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
11014 if (!specialCopIO(PL_compiling.cop_io))
11015 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
11016 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
11018 /* pseudo environmental stuff */
11019 PL_origargc = proto_perl->Iorigargc;
11020 PL_origargv = proto_perl->Iorigargv;
11022 param->stashes = newAV(); /* Setup array of objects to call clone on */
11024 /* Set tainting stuff before PerlIO_debug can possibly get called */
11025 PL_tainting = proto_perl->Itainting;
11026 PL_taint_warn = proto_perl->Itaint_warn;
11028 #ifdef PERLIO_LAYERS
11029 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11030 PerlIO_clone(aTHX_ proto_perl, param);
11033 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
11034 PL_incgv = gv_dup(proto_perl->Iincgv, param);
11035 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
11036 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
11037 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
11038 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
11041 PL_minus_c = proto_perl->Iminus_c;
11042 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
11043 PL_localpatches = proto_perl->Ilocalpatches;
11044 PL_splitstr = proto_perl->Isplitstr;
11045 PL_preprocess = proto_perl->Ipreprocess;
11046 PL_minus_n = proto_perl->Iminus_n;
11047 PL_minus_p = proto_perl->Iminus_p;
11048 PL_minus_l = proto_perl->Iminus_l;
11049 PL_minus_a = proto_perl->Iminus_a;
11050 PL_minus_F = proto_perl->Iminus_F;
11051 PL_doswitches = proto_perl->Idoswitches;
11052 PL_dowarn = proto_perl->Idowarn;
11053 PL_doextract = proto_perl->Idoextract;
11054 PL_sawampersand = proto_perl->Isawampersand;
11055 PL_unsafe = proto_perl->Iunsafe;
11056 PL_inplace = SAVEPV(proto_perl->Iinplace);
11057 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
11058 PL_perldb = proto_perl->Iperldb;
11059 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11060 PL_exit_flags = proto_perl->Iexit_flags;
11062 /* magical thingies */
11063 /* XXX time(&PL_basetime) when asked for? */
11064 PL_basetime = proto_perl->Ibasetime;
11065 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
11067 PL_maxsysfd = proto_perl->Imaxsysfd;
11068 PL_multiline = proto_perl->Imultiline;
11069 PL_statusvalue = proto_perl->Istatusvalue;
11071 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
11073 PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
11075 PL_encoding = sv_dup(proto_perl->Iencoding, param);
11077 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
11078 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
11079 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
11081 /* Clone the regex array */
11082 PL_regex_padav = newAV();
11084 const I32 len = av_len((AV*)proto_perl->Iregex_padav);
11085 SV** const regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
11087 av_push(PL_regex_padav,
11088 sv_dup_inc(regexen[0],param));
11089 for(i = 1; i <= len; i++) {
11090 if(SvREPADTMP(regexen[i])) {
11091 av_push(PL_regex_padav, sv_dup_inc(regexen[i], param));
11093 av_push(PL_regex_padav,
11095 newSViv(PTR2IV(re_dup(INT2PTR(REGEXP *,
11096 SvIVX(regexen[i])), param)))
11101 PL_regex_pad = AvARRAY(PL_regex_padav);
11103 /* shortcuts to various I/O objects */
11104 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11105 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11106 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11107 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11108 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11109 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
11111 /* shortcuts to regexp stuff */
11112 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
11114 /* shortcuts to misc objects */
11115 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
11117 /* shortcuts to debugging objects */
11118 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
11119 PL_DBline = gv_dup(proto_perl->IDBline, param);
11120 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
11121 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
11122 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
11123 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
11124 PL_DBassertion = sv_dup(proto_perl->IDBassertion, param);
11125 PL_lineary = av_dup(proto_perl->Ilineary, param);
11126 PL_dbargs = av_dup(proto_perl->Idbargs, param);
11128 /* symbol tables */
11129 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
11130 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
11131 PL_debstash = hv_dup(proto_perl->Idebstash, param);
11132 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
11133 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
11135 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
11136 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
11137 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
11138 PL_endav = av_dup_inc(proto_perl->Iendav, param);
11139 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
11140 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
11142 PL_sub_generation = proto_perl->Isub_generation;
11144 /* funky return mechanisms */
11145 PL_forkprocess = proto_perl->Iforkprocess;
11147 /* subprocess state */
11148 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
11150 /* internal state */
11151 PL_maxo = proto_perl->Imaxo;
11152 if (proto_perl->Iop_mask)
11153 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11155 PL_op_mask = Nullch;
11156 /* PL_asserting = proto_perl->Iasserting; */
11158 /* current interpreter roots */
11159 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
11160 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
11161 PL_main_start = proto_perl->Imain_start;
11162 PL_eval_root = proto_perl->Ieval_root;
11163 PL_eval_start = proto_perl->Ieval_start;
11165 /* runtime control stuff */
11166 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11167 PL_copline = proto_perl->Icopline;
11169 PL_filemode = proto_perl->Ifilemode;
11170 PL_lastfd = proto_perl->Ilastfd;
11171 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11174 PL_gensym = proto_perl->Igensym;
11175 PL_preambled = proto_perl->Ipreambled;
11176 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11177 PL_laststatval = proto_perl->Ilaststatval;
11178 PL_laststype = proto_perl->Ilaststype;
11179 PL_mess_sv = Nullsv;
11181 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11183 /* interpreter atexit processing */
11184 PL_exitlistlen = proto_perl->Iexitlistlen;
11185 if (PL_exitlistlen) {
11186 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11187 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11190 PL_exitlist = (PerlExitListEntry*)NULL;
11191 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
11192 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
11193 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11195 PL_profiledata = NULL;
11196 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
11197 /* PL_rsfp_filters entries have fake IoDIRP() */
11198 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
11200 PL_compcv = cv_dup(proto_perl->Icompcv, param);
11202 PAD_CLONE_VARS(proto_perl, param);
11204 #ifdef HAVE_INTERP_INTERN
11205 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11208 /* more statics moved here */
11209 PL_generation = proto_perl->Igeneration;
11210 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
11212 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11213 PL_in_clean_all = proto_perl->Iin_clean_all;
11215 PL_uid = proto_perl->Iuid;
11216 PL_euid = proto_perl->Ieuid;
11217 PL_gid = proto_perl->Igid;
11218 PL_egid = proto_perl->Iegid;
11219 PL_nomemok = proto_perl->Inomemok;
11220 PL_an = proto_perl->Ian;
11221 PL_evalseq = proto_perl->Ievalseq;
11222 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11223 PL_origalen = proto_perl->Iorigalen;
11224 #ifdef PERL_USES_PL_PIDSTATUS
11225 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11227 PL_osname = SAVEPV(proto_perl->Iosname);
11228 PL_sighandlerp = proto_perl->Isighandlerp;
11230 PL_runops = proto_perl->Irunops;
11232 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
11235 PL_cshlen = proto_perl->Icshlen;
11236 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
11239 PL_lex_state = proto_perl->Ilex_state;
11240 PL_lex_defer = proto_perl->Ilex_defer;
11241 PL_lex_expect = proto_perl->Ilex_expect;
11242 PL_lex_formbrack = proto_perl->Ilex_formbrack;
11243 PL_lex_dojoin = proto_perl->Ilex_dojoin;
11244 PL_lex_starts = proto_perl->Ilex_starts;
11245 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff, param);
11246 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl, param);
11247 PL_lex_op = proto_perl->Ilex_op;
11248 PL_lex_inpat = proto_perl->Ilex_inpat;
11249 PL_lex_inwhat = proto_perl->Ilex_inwhat;
11250 PL_lex_brackets = proto_perl->Ilex_brackets;
11251 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
11252 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
11253 PL_lex_casemods = proto_perl->Ilex_casemods;
11254 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
11255 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
11257 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
11258 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
11259 PL_nexttoke = proto_perl->Inexttoke;
11261 /* XXX This is probably masking the deeper issue of why
11262 * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
11263 * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
11264 * (A little debugging with a watchpoint on it may help.)
11266 if (SvANY(proto_perl->Ilinestr)) {
11267 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
11268 i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr);
11269 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11270 i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr);
11271 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11272 i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr);
11273 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11274 i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr);
11275 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11278 PL_linestr = NEWSV(65,79);
11279 sv_upgrade(PL_linestr,SVt_PVIV);
11280 sv_setpvn(PL_linestr,"",0);
11281 PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
11283 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
11284 PL_pending_ident = proto_perl->Ipending_ident;
11285 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
11287 PL_expect = proto_perl->Iexpect;
11289 PL_multi_start = proto_perl->Imulti_start;
11290 PL_multi_end = proto_perl->Imulti_end;
11291 PL_multi_open = proto_perl->Imulti_open;
11292 PL_multi_close = proto_perl->Imulti_close;
11294 PL_error_count = proto_perl->Ierror_count;
11295 PL_subline = proto_perl->Isubline;
11296 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
11298 /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
11299 if (SvANY(proto_perl->Ilinestr)) {
11300 i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr);
11301 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11302 i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr);
11303 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11304 PL_last_lop_op = proto_perl->Ilast_lop_op;
11307 PL_last_uni = SvPVX(PL_linestr);
11308 PL_last_lop = SvPVX(PL_linestr);
11309 PL_last_lop_op = 0;
11311 PL_in_my = proto_perl->Iin_my;
11312 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
11314 PL_cryptseen = proto_perl->Icryptseen;
11317 PL_hints = proto_perl->Ihints;
11319 PL_amagic_generation = proto_perl->Iamagic_generation;
11321 #ifdef USE_LOCALE_COLLATE
11322 PL_collation_ix = proto_perl->Icollation_ix;
11323 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11324 PL_collation_standard = proto_perl->Icollation_standard;
11325 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11326 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11327 #endif /* USE_LOCALE_COLLATE */
11329 #ifdef USE_LOCALE_NUMERIC
11330 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11331 PL_numeric_standard = proto_perl->Inumeric_standard;
11332 PL_numeric_local = proto_perl->Inumeric_local;
11333 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11334 #endif /* !USE_LOCALE_NUMERIC */
11336 /* utf8 character classes */
11337 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11338 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11339 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11340 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11341 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11342 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11343 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11344 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11345 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11346 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11347 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11348 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11349 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11350 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11351 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11352 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11353 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11354 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11355 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11356 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11358 /* Did the locale setup indicate UTF-8? */
11359 PL_utf8locale = proto_perl->Iutf8locale;
11360 /* Unicode features (see perlrun/-C) */
11361 PL_unicode = proto_perl->Iunicode;
11363 /* Pre-5.8 signals control */
11364 PL_signals = proto_perl->Isignals;
11366 /* times() ticks per second */
11367 PL_clocktick = proto_perl->Iclocktick;
11369 /* Recursion stopper for PerlIO_find_layer */
11370 PL_in_load_module = proto_perl->Iin_load_module;
11372 /* sort() routine */
11373 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
11375 /* Not really needed/useful since the reenrant_retint is "volatile",
11376 * but do it for consistency's sake. */
11377 PL_reentrant_retint = proto_perl->Ireentrant_retint;
11379 /* Hooks to shared SVs and locks. */
11380 PL_sharehook = proto_perl->Isharehook;
11381 PL_lockhook = proto_perl->Ilockhook;
11382 PL_unlockhook = proto_perl->Iunlockhook;
11383 PL_threadhook = proto_perl->Ithreadhook;
11385 PL_runops_std = proto_perl->Irunops_std;
11386 PL_runops_dbg = proto_perl->Irunops_dbg;
11388 #ifdef THREADS_HAVE_PIDS
11389 PL_ppid = proto_perl->Ippid;
11393 PL_last_swash_hv = Nullhv; /* reinits on demand */
11394 PL_last_swash_klen = 0;
11395 PL_last_swash_key[0]= '\0';
11396 PL_last_swash_tmps = (U8*)NULL;
11397 PL_last_swash_slen = 0;
11399 PL_glob_index = proto_perl->Iglob_index;
11400 PL_srand_called = proto_perl->Isrand_called;
11401 PL_uudmap['M'] = 0; /* reinits on demand */
11402 PL_bitcount = Nullch; /* reinits on demand */
11404 if (proto_perl->Ipsig_pend) {
11405 Newxz(PL_psig_pend, SIG_SIZE, int);
11408 PL_psig_pend = (int*)NULL;
11411 if (proto_perl->Ipsig_ptr) {
11412 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
11413 Newxz(PL_psig_name, SIG_SIZE, SV*);
11414 for (i = 1; i < SIG_SIZE; i++) {
11415 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11416 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11420 PL_psig_ptr = (SV**)NULL;
11421 PL_psig_name = (SV**)NULL;
11424 /* thrdvar.h stuff */
11426 if (flags & CLONEf_COPY_STACKS) {
11427 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11428 PL_tmps_ix = proto_perl->Ttmps_ix;
11429 PL_tmps_max = proto_perl->Ttmps_max;
11430 PL_tmps_floor = proto_perl->Ttmps_floor;
11431 Newxz(PL_tmps_stack, PL_tmps_max, SV*);
11433 while (i <= PL_tmps_ix) {
11434 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
11438 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11439 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
11440 Newxz(PL_markstack, i, I32);
11441 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
11442 - proto_perl->Tmarkstack);
11443 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
11444 - proto_perl->Tmarkstack);
11445 Copy(proto_perl->Tmarkstack, PL_markstack,
11446 PL_markstack_ptr - PL_markstack + 1, I32);
11448 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11449 * NOTE: unlike the others! */
11450 PL_scopestack_ix = proto_perl->Tscopestack_ix;
11451 PL_scopestack_max = proto_perl->Tscopestack_max;
11452 Newxz(PL_scopestack, PL_scopestack_max, I32);
11453 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
11455 /* NOTE: si_dup() looks at PL_markstack */
11456 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
11458 /* PL_curstack = PL_curstackinfo->si_stack; */
11459 PL_curstack = av_dup(proto_perl->Tcurstack, param);
11460 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
11462 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11463 PL_stack_base = AvARRAY(PL_curstack);
11464 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
11465 - proto_perl->Tstack_base);
11466 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
11468 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11469 * NOTE: unlike the others! */
11470 PL_savestack_ix = proto_perl->Tsavestack_ix;
11471 PL_savestack_max = proto_perl->Tsavestack_max;
11472 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
11473 PL_savestack = ss_dup(proto_perl, param);
11477 ENTER; /* perl_destruct() wants to LEAVE; */
11480 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
11481 PL_top_env = &PL_start_env;
11483 PL_op = proto_perl->Top;
11486 PL_Xpv = (XPV*)NULL;
11487 PL_na = proto_perl->Tna;
11489 PL_statbuf = proto_perl->Tstatbuf;
11490 PL_statcache = proto_perl->Tstatcache;
11491 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
11492 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
11494 PL_timesbuf = proto_perl->Ttimesbuf;
11497 PL_tainted = proto_perl->Ttainted;
11498 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
11499 PL_rs = sv_dup_inc(proto_perl->Trs, param);
11500 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
11501 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
11502 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
11503 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
11504 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
11505 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
11506 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
11508 PL_restartop = proto_perl->Trestartop;
11509 PL_in_eval = proto_perl->Tin_eval;
11510 PL_delaymagic = proto_perl->Tdelaymagic;
11511 PL_dirty = proto_perl->Tdirty;
11512 PL_localizing = proto_perl->Tlocalizing;
11514 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
11515 PL_hv_fetch_ent_mh = Nullhe;
11516 PL_modcount = proto_perl->Tmodcount;
11517 PL_lastgotoprobe = Nullop;
11518 PL_dumpindent = proto_perl->Tdumpindent;
11520 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
11521 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
11522 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
11523 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
11524 PL_efloatbuf = Nullch; /* reinits on demand */
11525 PL_efloatsize = 0; /* reinits on demand */
11529 PL_screamfirst = NULL;
11530 PL_screamnext = NULL;
11531 PL_maxscream = -1; /* reinits on demand */
11532 PL_lastscream = Nullsv;
11534 PL_watchaddr = NULL;
11535 PL_watchok = Nullch;
11537 PL_regdummy = proto_perl->Tregdummy;
11538 PL_regprecomp = Nullch;
11541 PL_colorset = 0; /* reinits PL_colors[] */
11542 /*PL_colors[6] = {0,0,0,0,0,0};*/
11543 PL_reginput = Nullch;
11544 PL_regbol = Nullch;
11545 PL_regeol = Nullch;
11546 PL_regstartp = (I32*)NULL;
11547 PL_regendp = (I32*)NULL;
11548 PL_reglastparen = (U32*)NULL;
11549 PL_reglastcloseparen = (U32*)NULL;
11550 PL_regtill = Nullch;
11551 PL_reg_start_tmp = (char**)NULL;
11552 PL_reg_start_tmpl = 0;
11553 PL_regdata = (struct reg_data*)NULL;
11556 PL_reg_eval_set = 0;
11558 PL_regprogram = (regnode*)NULL;
11560 PL_regcc = (CURCUR*)NULL;
11561 PL_reg_call_cc = (struct re_cc_state*)NULL;
11562 PL_reg_re = (regexp*)NULL;
11563 PL_reg_ganch = Nullch;
11564 PL_reg_sv = Nullsv;
11565 PL_reg_match_utf8 = FALSE;
11566 PL_reg_magic = (MAGIC*)NULL;
11568 PL_reg_oldcurpm = (PMOP*)NULL;
11569 PL_reg_curpm = (PMOP*)NULL;
11570 PL_reg_oldsaved = Nullch;
11571 PL_reg_oldsavedlen = 0;
11572 #ifdef PERL_OLD_COPY_ON_WRITE
11575 PL_reg_maxiter = 0;
11576 PL_reg_leftiter = 0;
11577 PL_reg_poscache = Nullch;
11578 PL_reg_poscache_size= 0;
11580 /* RE engine - function pointers */
11581 PL_regcompp = proto_perl->Tregcompp;
11582 PL_regexecp = proto_perl->Tregexecp;
11583 PL_regint_start = proto_perl->Tregint_start;
11584 PL_regint_string = proto_perl->Tregint_string;
11585 PL_regfree = proto_perl->Tregfree;
11587 PL_reginterp_cnt = 0;
11588 PL_reg_starttry = 0;
11590 /* Pluggable optimizer */
11591 PL_peepp = proto_perl->Tpeepp;
11593 PL_stashcache = newHV();
11595 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11596 ptr_table_free(PL_ptr_table);
11597 PL_ptr_table = NULL;
11600 /* Call the ->CLONE method, if it exists, for each of the stashes
11601 identified by sv_dup() above.
11603 while(av_len(param->stashes) != -1) {
11604 HV* const stash = (HV*) av_shift(param->stashes);
11605 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11606 if (cloner && GvCV(cloner)) {
11611 XPUSHs(sv_2mortal(newSVhek(HvNAME_HEK(stash))));
11613 call_sv((SV*)GvCV(cloner), G_DISCARD);
11619 SvREFCNT_dec(param->stashes);
11621 /* orphaned? eg threads->new inside BEGIN or use */
11622 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
11623 (void)SvREFCNT_inc(PL_compcv);
11624 SAVEFREESV(PL_compcv);
11630 #endif /* USE_ITHREADS */
11633 =head1 Unicode Support
11635 =for apidoc sv_recode_to_utf8
11637 The encoding is assumed to be an Encode object, on entry the PV
11638 of the sv is assumed to be octets in that encoding, and the sv
11639 will be converted into Unicode (and UTF-8).
11641 If the sv already is UTF-8 (or if it is not POK), or if the encoding
11642 is not a reference, nothing is done to the sv. If the encoding is not
11643 an C<Encode::XS> Encoding object, bad things will happen.
11644 (See F<lib/encoding.pm> and L<Encode>).
11646 The PV of the sv is returned.
11651 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11654 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11668 Passing sv_yes is wrong - it needs to be or'ed set of constants
11669 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11670 remove converted chars from source.
11672 Both will default the value - let them.
11674 XPUSHs(&PL_sv_yes);
11677 call_method("decode", G_SCALAR);
11681 s = SvPV_const(uni, len);
11682 if (s != SvPVX_const(sv)) {
11683 SvGROW(sv, len + 1);
11684 Move(s, SvPVX(sv), len + 1, char);
11685 SvCUR_set(sv, len);
11692 return SvPOKp(sv) ? SvPVX(sv) : NULL;
11696 =for apidoc sv_cat_decode
11698 The encoding is assumed to be an Encode object, the PV of the ssv is
11699 assumed to be octets in that encoding and decoding the input starts
11700 from the position which (PV + *offset) pointed to. The dsv will be
11701 concatenated the decoded UTF-8 string from ssv. Decoding will terminate
11702 when the string tstr appears in decoding output or the input ends on
11703 the PV of the ssv. The value which the offset points will be modified
11704 to the last input position on the ssv.
11706 Returns TRUE if the terminator was found, else returns FALSE.
11711 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11712 SV *ssv, int *offset, char *tstr, int tlen)
11716 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11727 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11728 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11730 call_method("cat_decode", G_SCALAR);
11732 ret = SvTRUE(TOPs);
11733 *offset = SvIV(offsv);
11739 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
11745 * c-indentation-style: bsd
11746 * c-basic-offset: 4
11747 * indent-tabs-mode: t
11750 * ex: set ts=8 sts=4 sw=4 noet: