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_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 Normally, this allocation is done using arenas, which are approximately
67 1K chunks of memory parcelled up into N heads or bodies. The first slot
68 in each arena is reserved, and is used to hold a link to the next arena.
69 In the case of heads, the unused first slot also contains some flags and
70 a note of the number of slots. Snaked through each arena chain is a
71 linked list of free items; when this becomes empty, an extra arena is
72 allocated and divided up into N items which are threaded into the free
75 The following global variables are associated with arenas:
77 PL_sv_arenaroot pointer to list of SV arenas
78 PL_sv_root pointer to list of free SV structures
80 PL_foo_arenaroot pointer to list of foo arenas,
81 PL_foo_root pointer to list of free foo bodies
82 ... for foo in xiv, xnv, xrv, xpv etc.
84 Note that some of the larger and more rarely used body types (eg xpvio)
85 are not allocated using arenas, but are instead just malloc()/free()ed as
86 required. Also, if PURIFY is defined, arenas are abandoned altogether,
87 with all items individually malloc()ed. In addition, a few SV heads are
88 not allocated from an arena, but are instead directly created as static
89 or auto variables, eg PL_sv_undef.
91 The SV arena serves the secondary purpose of allowing still-live SVs
92 to be located and destroyed during final cleanup.
94 At the lowest level, the macros new_SV() and del_SV() grab and free
95 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
96 to return the SV to the free list with error checking.) new_SV() calls
97 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
98 SVs in the free list have their SvTYPE field set to all ones.
100 Similarly, there are macros new_XIV()/del_XIV(), new_XNV()/del_XNV() etc
101 that allocate and return individual body types. Normally these are mapped
102 to the arena-manipulating functions new_xiv()/del_xiv() etc, but may be
103 instead mapped directly to malloc()/free() if PURIFY is defined. The
104 new/del functions remove from, or add to, the appropriate PL_foo_root
105 list, and call more_xiv() etc to add a new arena if the list is empty.
107 At the time of very final cleanup, sv_free_arenas() is called from
108 perl_destruct() to physically free all the arenas allocated since the
109 start of the interpreter. Note that this also clears PL_he_arenaroot,
110 which is otherwise dealt with in hv.c.
112 Manipulation of any of the PL_*root pointers is protected by enclosing
113 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
114 if threads are enabled.
116 The function visit() scans the SV arenas list, and calls a specified
117 function for each SV it finds which is still live - ie which has an SvTYPE
118 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
119 following functions (specified as [function that calls visit()] / [function
120 called by visit() for each SV]):
122 sv_report_used() / do_report_used()
123 dump all remaining SVs (debugging aid)
125 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
126 Attempt to free all objects pointed to by RVs,
127 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
128 try to do the same for all objects indirectly
129 referenced by typeglobs too. Called once from
130 perl_destruct(), prior to calling sv_clean_all()
133 sv_clean_all() / do_clean_all()
134 SvREFCNT_dec(sv) each remaining SV, possibly
135 triggering an sv_free(). It also sets the
136 SVf_BREAK flag on the SV to indicate that the
137 refcnt has been artificially lowered, and thus
138 stopping sv_free() from giving spurious warnings
139 about SVs which unexpectedly have a refcnt
140 of zero. called repeatedly from perl_destruct()
141 until there are no SVs left.
145 Private API to rest of sv.c
149 new_XIV(), del_XIV(),
150 new_XNV(), del_XNV(),
155 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
160 ============================================================================ */
165 * "A time to plant, and a time to uproot what was planted..."
168 #ifdef DEBUG_LEAKING_SCALARS
170 # define FREE_SV_DEBUG_FILE(sv) PerlMemfree((sv)->sv_debug_file)
172 # define FREE_SV_DEBUG_FILE(sv) PerlMemShared_free((sv)->sv_debug_file)
175 # define FREE_SV_DEBUG_FILE(sv)
178 #define plant_SV(p) \
180 FREE_SV_DEBUG_FILE(p); \
181 SvANY(p) = (void *)PL_sv_root; \
182 SvFLAGS(p) = SVTYPEMASK; \
187 /* sv_mutex must be held while calling uproot_SV() */
188 #define uproot_SV(p) \
191 PL_sv_root = (SV*)SvANY(p); \
196 /* new_SV(): return a new, empty SV head */
198 #ifdef DEBUG_LEAKING_SCALARS
199 /* provide a real function for a debugger to play with */
214 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
215 sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
216 (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
217 sv->sv_debug_inpad = 0;
218 sv->sv_debug_cloned = 0;
220 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
222 sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
227 # define new_SV(p) (p)=S_new_SV(aTHX)
245 /* del_SV(): return an empty SV head to the free list */
260 S_del_sv(pTHX_ SV *p)
267 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
269 svend = &sva[SvREFCNT(sva)];
270 if (p >= sv && p < svend)
274 if (ckWARN_d(WARN_INTERNAL))
275 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
276 "Attempt to free non-arena SV: 0x%"UVxf
277 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
284 #else /* ! DEBUGGING */
286 #define del_SV(p) plant_SV(p)
288 #endif /* DEBUGGING */
292 =head1 SV Manipulation Functions
294 =for apidoc sv_add_arena
296 Given a chunk of memory, link it to the head of the list of arenas,
297 and split it into a list of free SVs.
303 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
309 /* The first SV in an arena isn't an SV. */
310 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
311 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
312 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
314 PL_sv_arenaroot = sva;
315 PL_sv_root = sva + 1;
317 svend = &sva[SvREFCNT(sva) - 1];
320 SvANY(sv) = (void *)(SV*)(sv + 1);
322 SvFLAGS(sv) = SVTYPEMASK;
326 SvFLAGS(sv) = SVTYPEMASK;
329 /* make some more SVs by adding another arena */
331 /* sv_mutex must be held while calling more_sv() */
338 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
339 PL_nice_chunk = Nullch;
340 PL_nice_chunk_size = 0;
343 char *chunk; /* must use New here to match call to */
344 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
345 sv_add_arena(chunk, 1008, 0);
351 /* visit(): call the named function for each non-free SV in the arenas
352 * whose flags field matches the flags/mask args. */
355 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
362 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
363 svend = &sva[SvREFCNT(sva)];
364 for (sv = sva + 1; sv < svend; ++sv) {
365 if (SvTYPE(sv) != SVTYPEMASK
366 && (sv->sv_flags & mask) == flags
379 /* called by sv_report_used() for each live SV */
382 do_report_used(pTHX_ SV *sv)
384 if (SvTYPE(sv) != SVTYPEMASK) {
385 PerlIO_printf(Perl_debug_log, "****\n");
392 =for apidoc sv_report_used
394 Dump the contents of all SVs not yet freed. (Debugging aid).
400 Perl_sv_report_used(pTHX)
403 visit(do_report_used, 0, 0);
407 /* called by sv_clean_objs() for each live SV */
410 do_clean_objs(pTHX_ SV *sv)
414 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
415 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
427 /* XXX Might want to check arrays, etc. */
430 /* called by sv_clean_objs() for each live SV */
432 #ifndef DISABLE_DESTRUCTOR_KLUDGE
434 do_clean_named_objs(pTHX_ SV *sv)
436 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
437 if ( SvOBJECT(GvSV(sv)) ||
438 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
439 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
440 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
441 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
443 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
444 SvFLAGS(sv) |= SVf_BREAK;
452 =for apidoc sv_clean_objs
454 Attempt to destroy all objects not yet freed
460 Perl_sv_clean_objs(pTHX)
462 PL_in_clean_objs = TRUE;
463 visit(do_clean_objs, SVf_ROK, SVf_ROK);
464 #ifndef DISABLE_DESTRUCTOR_KLUDGE
465 /* some barnacles may yet remain, clinging to typeglobs */
466 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
468 PL_in_clean_objs = FALSE;
471 /* called by sv_clean_all() for each live SV */
474 do_clean_all(pTHX_ SV *sv)
476 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
477 SvFLAGS(sv) |= SVf_BREAK;
478 if (PL_comppad == (AV*)sv) {
480 PL_curpad = Null(SV**);
486 =for apidoc sv_clean_all
488 Decrement the refcnt of each remaining SV, possibly triggering a
489 cleanup. This function may have to be called multiple times to free
490 SVs which are in complex self-referential hierarchies.
496 Perl_sv_clean_all(pTHX)
499 PL_in_clean_all = TRUE;
500 cleaned = visit(do_clean_all, 0,0);
501 PL_in_clean_all = FALSE;
506 =for apidoc sv_free_arenas
508 Deallocate the memory used by all arenas. Note that all the individual SV
509 heads and bodies within the arenas must already have been freed.
515 Perl_sv_free_arenas(pTHX)
519 XPV *arena, *arenanext;
521 /* Free arenas here, but be careful about fake ones. (We assume
522 contiguity of the fake ones with the corresponding real ones.) */
524 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
525 svanext = (SV*) SvANY(sva);
526 while (svanext && SvFAKE(svanext))
527 svanext = (SV*) SvANY(svanext);
530 Safefree((void *)sva);
533 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
534 arenanext = (XPV*)arena->xpv_pv;
537 PL_xiv_arenaroot = 0;
540 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
541 arenanext = (XPV*)arena->xpv_pv;
544 PL_xnv_arenaroot = 0;
547 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
548 arenanext = (XPV*)arena->xpv_pv;
551 PL_xrv_arenaroot = 0;
554 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
555 arenanext = (XPV*)arena->xpv_pv;
558 PL_xpv_arenaroot = 0;
561 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
562 arenanext = (XPV*)arena->xpv_pv;
565 PL_xpviv_arenaroot = 0;
568 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
569 arenanext = (XPV*)arena->xpv_pv;
572 PL_xpvnv_arenaroot = 0;
575 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
576 arenanext = (XPV*)arena->xpv_pv;
579 PL_xpvcv_arenaroot = 0;
582 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
583 arenanext = (XPV*)arena->xpv_pv;
586 PL_xpvav_arenaroot = 0;
589 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
590 arenanext = (XPV*)arena->xpv_pv;
593 PL_xpvhv_arenaroot = 0;
596 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
597 arenanext = (XPV*)arena->xpv_pv;
600 PL_xpvmg_arenaroot = 0;
603 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
604 arenanext = (XPV*)arena->xpv_pv;
607 PL_xpvlv_arenaroot = 0;
610 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
611 arenanext = (XPV*)arena->xpv_pv;
614 PL_xpvbm_arenaroot = 0;
617 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
618 arenanext = (XPV*)arena->xpv_pv;
625 Safefree(PL_nice_chunk);
626 PL_nice_chunk = Nullch;
627 PL_nice_chunk_size = 0;
632 /* ---------------------------------------------------------------------
634 * support functions for report_uninit()
637 /* the maxiumum size of array or hash where we will scan looking
638 * for the undefined element that triggered the warning */
640 #define FUV_MAX_SEARCH_SIZE 1000
642 /* Look for an entry in the hash whose value has the same SV as val;
643 * If so, return a mortal copy of the key. */
646 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
652 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
653 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
658 for (i=HvMAX(hv); i>0; i--) {
659 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
660 if (HeVAL(entry) != val)
662 if ( HeVAL(entry) == &PL_sv_undef ||
663 HeVAL(entry) == &PL_sv_placeholder)
667 if (HeKLEN(entry) == HEf_SVKEY)
668 return sv_mortalcopy(HeKEY_sv(entry));
669 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
675 /* Look for an entry in the array whose value has the same SV as val;
676 * If so, return the index, otherwise return -1. */
679 S_find_array_subscript(pTHX_ AV *av, SV* val)
683 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
684 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
688 for (i=AvFILLp(av); i>=0; i--) {
689 if (svp[i] == val && svp[i] != &PL_sv_undef)
695 /* S_varname(): return the name of a variable, optionally with a subscript.
696 * If gv is non-zero, use the name of that global, along with gvtype (one
697 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
698 * targ. Depending on the value of the subscript_type flag, return:
701 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
702 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
703 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
704 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
707 S_varname(pTHX_ GV *gv, const char *gvtype, PADOFFSET targ,
708 SV* keyname, I32 aindex, int subscript_type)
714 name = sv_newmortal();
717 /* simulate gv_fullname4(), but add literal '^' for $^FOO names
718 * XXX get rid of all this if gv_fullnameX() ever supports this
722 HV *hv = GvSTASH(gv);
723 sv_setpv(name, gvtype);
726 else if (!(p=HvNAME(hv)))
728 if (strNE(p, "main")) {
730 sv_catpvn(name,"::", 2);
732 if (GvNAMELEN(gv)>= 1 &&
733 ((unsigned int)*GvNAME(gv)) <= 26)
735 Perl_sv_catpvf(aTHX_ name,"^%c", *GvNAME(gv) + 'A' - 1);
736 sv_catpvn(name,GvNAME(gv)+1,GvNAMELEN(gv)-1);
739 sv_catpvn(name,GvNAME(gv),GvNAMELEN(gv));
743 CV *cv = find_runcv(&u);
744 if (!cv || !CvPADLIST(cv))
746 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
747 sv = *av_fetch(av, targ, FALSE);
748 /* SvLEN in a pad name is not to be trusted */
749 sv_setpv(name, SvPV_nolen(sv));
752 if (subscript_type == FUV_SUBSCRIPT_HASH) {
755 Perl_sv_catpvf(aTHX_ name, "{%s}",
756 pv_display(sv,SvPVX(keyname), SvCUR(keyname), 0, 32));
759 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
761 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
763 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
764 sv_insert(name, 0, 0, "within ", 7);
771 =for apidoc find_uninit_var
773 Find the name of the undefined variable (if any) that caused the operator o
774 to issue a "Use of uninitialized value" warning.
775 If match is true, only return a name if it's value matches uninit_sv.
776 So roughly speaking, if a unary operator (such as OP_COS) generates a
777 warning, then following the direct child of the op may yield an
778 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
779 other hand, with OP_ADD there are two branches to follow, so we only print
780 the variable name if we get an exact match.
782 The name is returned as a mortal SV.
784 Assumes that PL_op is the op that originally triggered the error, and that
785 PL_comppad/PL_curpad points to the currently executing pad.
791 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
799 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
800 uninit_sv == &PL_sv_placeholder)))
803 switch (obase->op_type) {
810 bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
811 bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
814 int subscript_type = FUV_SUBSCRIPT_WITHIN;
816 if (pad) { /* @lex, %lex */
817 sv = PAD_SVl(obase->op_targ);
821 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
822 /* @global, %global */
823 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
826 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
828 else /* @{expr}, %{expr} */
829 return find_uninit_var(cUNOPx(obase)->op_first,
833 /* attempt to find a match within the aggregate */
835 keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
837 subscript_type = FUV_SUBSCRIPT_HASH;
840 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
842 subscript_type = FUV_SUBSCRIPT_ARRAY;
845 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
848 return S_varname(aTHX_ gv, hash ? "%" : "@", obase->op_targ,
849 keysv, index, subscript_type);
853 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
855 return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
856 Nullsv, 0, FUV_SUBSCRIPT_NONE);
859 gv = cGVOPx_gv(obase);
860 if (!gv || (match && GvSV(gv) != uninit_sv))
862 return S_varname(aTHX_ gv, "$", 0, Nullsv, 0, FUV_SUBSCRIPT_NONE);
865 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
867 av = (AV*)PAD_SV(obase->op_targ);
868 if (!av || SvRMAGICAL(av))
870 svp = av_fetch(av, (I32)obase->op_private, FALSE);
871 if (!svp || *svp != uninit_sv)
874 return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
875 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
878 gv = cGVOPx_gv(obase);
883 if (!av || SvRMAGICAL(av))
885 svp = av_fetch(av, (I32)obase->op_private, FALSE);
886 if (!svp || *svp != uninit_sv)
889 return S_varname(aTHX_ gv, "$", 0,
890 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
895 o = cUNOPx(obase)->op_first;
896 if (!o || o->op_type != OP_NULL ||
897 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
899 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
904 /* $a[uninit_expr] or $h{uninit_expr} */
905 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
908 o = cBINOPx(obase)->op_first;
909 kid = cBINOPx(obase)->op_last;
911 /* get the av or hv, and optionally the gv */
913 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
914 sv = PAD_SV(o->op_targ);
916 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
917 && cUNOPo->op_first->op_type == OP_GV)
919 gv = cGVOPx_gv(cUNOPo->op_first);
922 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
927 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
928 /* index is constant */
932 if (obase->op_type == OP_HELEM) {
933 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
934 if (!he || HeVAL(he) != uninit_sv)
938 svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
939 if (!svp || *svp != uninit_sv)
943 if (obase->op_type == OP_HELEM)
944 return S_varname(aTHX_ gv, "%", o->op_targ,
945 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
947 return S_varname(aTHX_ gv, "@", o->op_targ, Nullsv,
948 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
952 /* index is an expression;
953 * attempt to find a match within the aggregate */
954 if (obase->op_type == OP_HELEM) {
955 SV *keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
957 return S_varname(aTHX_ gv, "%", o->op_targ,
958 keysv, 0, FUV_SUBSCRIPT_HASH);
961 I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
963 return S_varname(aTHX_ gv, "@", o->op_targ,
964 Nullsv, index, FUV_SUBSCRIPT_ARRAY);
968 return S_varname(aTHX_ gv,
969 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
971 o->op_targ, Nullsv, 0, FUV_SUBSCRIPT_WITHIN);
977 /* only examine RHS */
978 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
981 o = cUNOPx(obase)->op_first;
982 if (o->op_type == OP_PUSHMARK)
985 if (!o->op_sibling) {
986 /* one-arg version of open is highly magical */
988 if (o->op_type == OP_GV) { /* open FOO; */
990 if (match && GvSV(gv) != uninit_sv)
992 return S_varname(aTHX_ gv, "$", 0,
993 Nullsv, 0, FUV_SUBSCRIPT_NONE);
995 /* other possibilities not handled are:
996 * open $x; or open my $x; should return '${*$x}'
997 * open expr; should return '$'.expr ideally
1003 /* ops where $_ may be an implicit arg */
1007 if ( !(obase->op_flags & OPf_STACKED)) {
1008 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
1009 ? PAD_SVl(obase->op_targ)
1012 sv = sv_newmortal();
1021 /* skip filehandle as it can't produce 'undef' warning */
1022 o = cUNOPx(obase)->op_first;
1023 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
1024 o = o->op_sibling->op_sibling;
1031 match = 1; /* XS or custom code could trigger random warnings */
1036 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
1037 return sv_2mortal(newSVpv("${$/}", 0));
1042 if (!(obase->op_flags & OPf_KIDS))
1044 o = cUNOPx(obase)->op_first;
1050 /* if all except one arg are constant, or have no side-effects,
1051 * or are optimized away, then it's unambiguous */
1053 for (kid=o; kid; kid = kid->op_sibling) {
1055 ( (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
1056 || (kid->op_type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
1057 || (kid->op_type == OP_PUSHMARK)
1061 if (o2) { /* more than one found */
1068 return find_uninit_var(o2, uninit_sv, match);
1072 sv = find_uninit_var(o, uninit_sv, 1);
1084 =for apidoc report_uninit
1086 Print appropriate "Use of uninitialized variable" warning
1092 Perl_report_uninit(pTHX_ SV* uninit_sv)
1095 SV* varname = Nullsv;
1097 varname = find_uninit_var(PL_op, uninit_sv,0);
1099 sv_insert(varname, 0, 0, " ", 1);
1101 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1102 varname ? SvPV_nolen(varname) : "",
1103 " in ", OP_DESC(PL_op));
1106 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1110 /* grab a new IV body from the free list, allocating more if necessary */
1121 * See comment in more_xiv() -- RAM.
1123 PL_xiv_root = *(IV**)xiv;
1125 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
1128 /* return an IV body to the free list */
1131 S_del_xiv(pTHX_ XPVIV *p)
1133 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
1135 *(IV**)xiv = PL_xiv_root;
1140 /* allocate another arena's worth of IV bodies */
1146 register IV* xivend;
1148 New(705, ptr, 1008/sizeof(XPV), XPV);
1149 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
1150 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
1153 xivend = &xiv[1008 / sizeof(IV) - 1];
1154 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
1156 while (xiv < xivend) {
1157 *(IV**)xiv = (IV *)(xiv + 1);
1163 /* grab a new NV body from the free list, allocating more if necessary */
1173 PL_xnv_root = *(NV**)xnv;
1175 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
1178 /* return an NV body to the free list */
1181 S_del_xnv(pTHX_ XPVNV *p)
1183 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
1185 *(NV**)xnv = PL_xnv_root;
1190 /* allocate another arena's worth of NV bodies */
1196 register NV* xnvend;
1198 New(711, ptr, 1008/sizeof(XPV), XPV);
1199 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
1200 PL_xnv_arenaroot = ptr;
1203 xnvend = &xnv[1008 / sizeof(NV) - 1];
1204 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
1206 while (xnv < xnvend) {
1207 *(NV**)xnv = (NV*)(xnv + 1);
1213 /* grab a new struct xrv from the free list, allocating more if necessary */
1223 PL_xrv_root = (XRV*)xrv->xrv_rv;
1228 /* return a struct xrv to the free list */
1231 S_del_xrv(pTHX_ XRV *p)
1234 p->xrv_rv = (SV*)PL_xrv_root;
1239 /* allocate another arena's worth of struct xrv */
1245 register XRV* xrvend;
1247 New(712, ptr, 1008/sizeof(XPV), XPV);
1248 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
1249 PL_xrv_arenaroot = ptr;
1252 xrvend = &xrv[1008 / sizeof(XRV) - 1];
1253 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
1255 while (xrv < xrvend) {
1256 xrv->xrv_rv = (SV*)(xrv + 1);
1262 /* grab a new struct xpv from the free list, allocating more if necessary */
1272 PL_xpv_root = (XPV*)xpv->xpv_pv;
1277 /* return a struct xpv to the free list */
1280 S_del_xpv(pTHX_ XPV *p)
1283 p->xpv_pv = (char*)PL_xpv_root;
1288 /* allocate another arena's worth of struct xpv */
1294 register XPV* xpvend;
1295 New(713, xpv, 1008/sizeof(XPV), XPV);
1296 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
1297 PL_xpv_arenaroot = xpv;
1299 xpvend = &xpv[1008 / sizeof(XPV) - 1];
1300 PL_xpv_root = ++xpv;
1301 while (xpv < xpvend) {
1302 xpv->xpv_pv = (char*)(xpv + 1);
1308 /* grab a new struct xpviv from the free list, allocating more if necessary */
1317 xpviv = PL_xpviv_root;
1318 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
1323 /* return a struct xpviv to the free list */
1326 S_del_xpviv(pTHX_ XPVIV *p)
1329 p->xpv_pv = (char*)PL_xpviv_root;
1334 /* allocate another arena's worth of struct xpviv */
1339 register XPVIV* xpviv;
1340 register XPVIV* xpvivend;
1341 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
1342 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
1343 PL_xpviv_arenaroot = xpviv;
1345 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
1346 PL_xpviv_root = ++xpviv;
1347 while (xpviv < xpvivend) {
1348 xpviv->xpv_pv = (char*)(xpviv + 1);
1354 /* grab a new struct xpvnv from the free list, allocating more if necessary */
1363 xpvnv = PL_xpvnv_root;
1364 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
1369 /* return a struct xpvnv to the free list */
1372 S_del_xpvnv(pTHX_ XPVNV *p)
1375 p->xpv_pv = (char*)PL_xpvnv_root;
1380 /* allocate another arena's worth of struct xpvnv */
1385 register XPVNV* xpvnv;
1386 register XPVNV* xpvnvend;
1387 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
1388 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
1389 PL_xpvnv_arenaroot = xpvnv;
1391 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
1392 PL_xpvnv_root = ++xpvnv;
1393 while (xpvnv < xpvnvend) {
1394 xpvnv->xpv_pv = (char*)(xpvnv + 1);
1400 /* grab a new struct xpvcv from the free list, allocating more if necessary */
1409 xpvcv = PL_xpvcv_root;
1410 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
1415 /* return a struct xpvcv to the free list */
1418 S_del_xpvcv(pTHX_ XPVCV *p)
1421 p->xpv_pv = (char*)PL_xpvcv_root;
1426 /* allocate another arena's worth of struct xpvcv */
1431 register XPVCV* xpvcv;
1432 register XPVCV* xpvcvend;
1433 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
1434 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
1435 PL_xpvcv_arenaroot = xpvcv;
1437 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
1438 PL_xpvcv_root = ++xpvcv;
1439 while (xpvcv < xpvcvend) {
1440 xpvcv->xpv_pv = (char*)(xpvcv + 1);
1446 /* grab a new struct xpvav from the free list, allocating more if necessary */
1455 xpvav = PL_xpvav_root;
1456 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
1461 /* return a struct xpvav to the free list */
1464 S_del_xpvav(pTHX_ XPVAV *p)
1467 p->xav_array = (char*)PL_xpvav_root;
1472 /* allocate another arena's worth of struct xpvav */
1477 register XPVAV* xpvav;
1478 register XPVAV* xpvavend;
1479 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
1480 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
1481 PL_xpvav_arenaroot = xpvav;
1483 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
1484 PL_xpvav_root = ++xpvav;
1485 while (xpvav < xpvavend) {
1486 xpvav->xav_array = (char*)(xpvav + 1);
1489 xpvav->xav_array = 0;
1492 /* grab a new struct xpvhv from the free list, allocating more if necessary */
1501 xpvhv = PL_xpvhv_root;
1502 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
1507 /* return a struct xpvhv to the free list */
1510 S_del_xpvhv(pTHX_ XPVHV *p)
1513 p->xhv_array = (char*)PL_xpvhv_root;
1518 /* allocate another arena's worth of struct xpvhv */
1523 register XPVHV* xpvhv;
1524 register XPVHV* xpvhvend;
1525 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
1526 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
1527 PL_xpvhv_arenaroot = xpvhv;
1529 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
1530 PL_xpvhv_root = ++xpvhv;
1531 while (xpvhv < xpvhvend) {
1532 xpvhv->xhv_array = (char*)(xpvhv + 1);
1535 xpvhv->xhv_array = 0;
1538 /* grab a new struct xpvmg from the free list, allocating more if necessary */
1547 xpvmg = PL_xpvmg_root;
1548 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
1553 /* return a struct xpvmg to the free list */
1556 S_del_xpvmg(pTHX_ XPVMG *p)
1559 p->xpv_pv = (char*)PL_xpvmg_root;
1564 /* allocate another arena's worth of struct xpvmg */
1569 register XPVMG* xpvmg;
1570 register XPVMG* xpvmgend;
1571 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
1572 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
1573 PL_xpvmg_arenaroot = xpvmg;
1575 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
1576 PL_xpvmg_root = ++xpvmg;
1577 while (xpvmg < xpvmgend) {
1578 xpvmg->xpv_pv = (char*)(xpvmg + 1);
1584 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1593 xpvlv = PL_xpvlv_root;
1594 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
1599 /* return a struct xpvlv to the free list */
1602 S_del_xpvlv(pTHX_ XPVLV *p)
1605 p->xpv_pv = (char*)PL_xpvlv_root;
1610 /* allocate another arena's worth of struct xpvlv */
1615 register XPVLV* xpvlv;
1616 register XPVLV* xpvlvend;
1617 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
1618 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
1619 PL_xpvlv_arenaroot = xpvlv;
1621 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
1622 PL_xpvlv_root = ++xpvlv;
1623 while (xpvlv < xpvlvend) {
1624 xpvlv->xpv_pv = (char*)(xpvlv + 1);
1630 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1639 xpvbm = PL_xpvbm_root;
1640 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
1645 /* return a struct xpvbm to the free list */
1648 S_del_xpvbm(pTHX_ XPVBM *p)
1651 p->xpv_pv = (char*)PL_xpvbm_root;
1656 /* allocate another arena's worth of struct xpvbm */
1661 register XPVBM* xpvbm;
1662 register XPVBM* xpvbmend;
1663 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
1664 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
1665 PL_xpvbm_arenaroot = xpvbm;
1667 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
1668 PL_xpvbm_root = ++xpvbm;
1669 while (xpvbm < xpvbmend) {
1670 xpvbm->xpv_pv = (char*)(xpvbm + 1);
1676 #define my_safemalloc(s) (void*)safemalloc(s)
1677 #define my_safefree(p) safefree((char*)p)
1681 #define new_XIV() my_safemalloc(sizeof(XPVIV))
1682 #define del_XIV(p) my_safefree(p)
1684 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1685 #define del_XNV(p) my_safefree(p)
1687 #define new_XRV() my_safemalloc(sizeof(XRV))
1688 #define del_XRV(p) my_safefree(p)
1690 #define new_XPV() my_safemalloc(sizeof(XPV))
1691 #define del_XPV(p) my_safefree(p)
1693 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1694 #define del_XPVIV(p) my_safefree(p)
1696 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1697 #define del_XPVNV(p) my_safefree(p)
1699 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1700 #define del_XPVCV(p) my_safefree(p)
1702 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1703 #define del_XPVAV(p) my_safefree(p)
1705 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1706 #define del_XPVHV(p) my_safefree(p)
1708 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1709 #define del_XPVMG(p) my_safefree(p)
1711 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1712 #define del_XPVLV(p) my_safefree(p)
1714 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1715 #define del_XPVBM(p) my_safefree(p)
1719 #define new_XIV() (void*)new_xiv()
1720 #define del_XIV(p) del_xiv((XPVIV*) p)
1722 #define new_XNV() (void*)new_xnv()
1723 #define del_XNV(p) del_xnv((XPVNV*) p)
1725 #define new_XRV() (void*)new_xrv()
1726 #define del_XRV(p) del_xrv((XRV*) p)
1728 #define new_XPV() (void*)new_xpv()
1729 #define del_XPV(p) del_xpv((XPV *)p)
1731 #define new_XPVIV() (void*)new_xpviv()
1732 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
1734 #define new_XPVNV() (void*)new_xpvnv()
1735 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
1737 #define new_XPVCV() (void*)new_xpvcv()
1738 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
1740 #define new_XPVAV() (void*)new_xpvav()
1741 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
1743 #define new_XPVHV() (void*)new_xpvhv()
1744 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
1746 #define new_XPVMG() (void*)new_xpvmg()
1747 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
1749 #define new_XPVLV() (void*)new_xpvlv()
1750 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
1752 #define new_XPVBM() (void*)new_xpvbm()
1753 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
1757 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1758 #define del_XPVGV(p) my_safefree(p)
1760 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1761 #define del_XPVFM(p) my_safefree(p)
1763 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1764 #define del_XPVIO(p) my_safefree(p)
1767 =for apidoc sv_upgrade
1769 Upgrade an SV to a more complex form. Generally adds a new body type to the
1770 SV, then copies across as much information as possible from the old body.
1771 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1777 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1788 if (mt != SVt_PV && SvIsCOW(sv)) {
1789 sv_force_normal_flags(sv, 0);
1792 if (SvTYPE(sv) == mt)
1796 (void)SvOOK_off(sv);
1806 switch (SvTYPE(sv)) {
1814 else if (mt < SVt_PVIV)
1824 pv = (char*)SvRV(sv);
1834 else if (mt == SVt_NV)
1842 del_XPVIV(SvANY(sv));
1850 del_XPVNV(SvANY(sv));
1858 magic = SvMAGIC(sv);
1859 stash = SvSTASH(sv);
1860 del_XPVMG(SvANY(sv));
1863 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1866 SvFLAGS(sv) &= ~SVTYPEMASK;
1871 Perl_croak(aTHX_ "Can't upgrade to undef");
1873 SvANY(sv) = new_XIV();
1877 SvANY(sv) = new_XNV();
1881 SvANY(sv) = new_XRV();
1882 SvRV_set(sv, (SV*)pv);
1885 SvANY(sv) = new_XPVHV();
1892 HvTOTALKEYS(sv) = 0;
1893 HvPLACEHOLDERS(sv) = 0;
1895 /* Fall through... */
1898 SvANY(sv) = new_XPVAV();
1903 AvFLAGS(sv) = AVf_REAL;
1910 SvPV_set(sv, (char*)0);
1911 SvMAGIC_set(sv, magic);
1912 SvSTASH_set(sv, stash);
1916 SvANY(sv) = new_XPVIO();
1917 Zero(SvANY(sv), 1, XPVIO);
1918 IoPAGE_LEN(sv) = 60;
1919 goto set_magic_common;
1921 SvANY(sv) = new_XPVFM();
1922 Zero(SvANY(sv), 1, XPVFM);
1923 goto set_magic_common;
1925 SvANY(sv) = new_XPVBM();
1929 goto set_magic_common;
1931 SvANY(sv) = new_XPVGV();
1937 goto set_magic_common;
1939 SvANY(sv) = new_XPVCV();
1940 Zero(SvANY(sv), 1, XPVCV);
1941 goto set_magic_common;
1943 SvANY(sv) = new_XPVLV();
1956 SvANY(sv) = new_XPVMG();
1959 SvMAGIC_set(sv, magic);
1960 SvSTASH_set(sv, stash);
1964 SvANY(sv) = new_XPVNV();
1970 SvANY(sv) = new_XPVIV();
1979 SvANY(sv) = new_XPV();
1990 =for apidoc sv_backoff
1992 Remove any string offset. You should normally use the C<SvOOK_off> macro
1999 Perl_sv_backoff(pTHX_ register SV *sv)
2003 char *s = SvPVX(sv);
2004 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
2005 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
2007 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
2009 SvFLAGS(sv) &= ~SVf_OOK;
2016 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
2017 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
2018 Use the C<SvGROW> wrapper instead.
2024 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
2028 #ifdef HAS_64K_LIMIT
2029 if (newlen >= 0x10000) {
2030 PerlIO_printf(Perl_debug_log,
2031 "Allocation too large: %"UVxf"\n", (UV)newlen);
2034 #endif /* HAS_64K_LIMIT */
2037 if (SvTYPE(sv) < SVt_PV) {
2038 sv_upgrade(sv, SVt_PV);
2041 else if (SvOOK(sv)) { /* pv is offset? */
2044 if (newlen > SvLEN(sv))
2045 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
2046 #ifdef HAS_64K_LIMIT
2047 if (newlen >= 0x10000)
2054 if (newlen > SvLEN(sv)) { /* need more room? */
2055 if (SvLEN(sv) && s) {
2057 STRLEN l = malloced_size((void*)SvPVX(sv));
2063 Renew(s,newlen,char);
2066 New(703, s, newlen, char);
2067 if (SvPVX(sv) && SvCUR(sv)) {
2068 Move(SvPVX(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
2072 SvLEN_set(sv, newlen);
2078 =for apidoc sv_setiv
2080 Copies an integer into the given SV, upgrading first if necessary.
2081 Does not handle 'set' magic. See also C<sv_setiv_mg>.
2087 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
2089 SV_CHECK_THINKFIRST_COW_DROP(sv);
2090 switch (SvTYPE(sv)) {
2092 sv_upgrade(sv, SVt_IV);
2095 sv_upgrade(sv, SVt_PVNV);
2099 sv_upgrade(sv, SVt_PVIV);
2108 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
2111 (void)SvIOK_only(sv); /* validate number */
2117 =for apidoc sv_setiv_mg
2119 Like C<sv_setiv>, but also handles 'set' magic.
2125 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
2132 =for apidoc sv_setuv
2134 Copies an unsigned integer into the given SV, upgrading first if necessary.
2135 Does not handle 'set' magic. See also C<sv_setuv_mg>.
2141 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
2143 /* With these two if statements:
2144 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
2147 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
2149 If you wish to remove them, please benchmark to see what the effect is
2151 if (u <= (UV)IV_MAX) {
2152 sv_setiv(sv, (IV)u);
2161 =for apidoc sv_setuv_mg
2163 Like C<sv_setuv>, but also handles 'set' magic.
2169 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
2171 /* With these two if statements:
2172 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
2175 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
2177 If you wish to remove them, please benchmark to see what the effect is
2179 if (u <= (UV)IV_MAX) {
2180 sv_setiv(sv, (IV)u);
2190 =for apidoc sv_setnv
2192 Copies a double into the given SV, upgrading first if necessary.
2193 Does not handle 'set' magic. See also C<sv_setnv_mg>.
2199 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
2201 SV_CHECK_THINKFIRST_COW_DROP(sv);
2202 switch (SvTYPE(sv)) {
2205 sv_upgrade(sv, SVt_NV);
2210 sv_upgrade(sv, SVt_PVNV);
2219 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
2223 (void)SvNOK_only(sv); /* validate number */
2228 =for apidoc sv_setnv_mg
2230 Like C<sv_setnv>, but also handles 'set' magic.
2236 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
2242 /* Print an "isn't numeric" warning, using a cleaned-up,
2243 * printable version of the offending string
2247 S_not_a_number(pTHX_ SV *sv)
2254 dsv = sv_2mortal(newSVpv("", 0));
2255 pv = sv_uni_display(dsv, sv, 10, 0);
2258 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
2259 /* each *s can expand to 4 chars + "...\0",
2260 i.e. need room for 8 chars */
2263 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
2265 if (ch & 128 && !isPRINT_LC(ch)) {
2274 else if (ch == '\r') {
2278 else if (ch == '\f') {
2282 else if (ch == '\\') {
2286 else if (ch == '\0') {
2290 else if (isPRINT_LC(ch))
2307 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2308 "Argument \"%s\" isn't numeric in %s", pv,
2311 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2312 "Argument \"%s\" isn't numeric", pv);
2316 =for apidoc looks_like_number
2318 Test if the content of an SV looks like a number (or is a number).
2319 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
2320 non-numeric warning), even if your atof() doesn't grok them.
2326 Perl_looks_like_number(pTHX_ SV *sv)
2328 register char *sbegin;
2335 else if (SvPOKp(sv))
2336 sbegin = SvPV(sv, len);
2338 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
2339 return grok_number(sbegin, len, NULL);
2342 /* Actually, ISO C leaves conversion of UV to IV undefined, but
2343 until proven guilty, assume that things are not that bad... */
2348 As 64 bit platforms often have an NV that doesn't preserve all bits of
2349 an IV (an assumption perl has been based on to date) it becomes necessary
2350 to remove the assumption that the NV always carries enough precision to
2351 recreate the IV whenever needed, and that the NV is the canonical form.
2352 Instead, IV/UV and NV need to be given equal rights. So as to not lose
2353 precision as a side effect of conversion (which would lead to insanity
2354 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
2355 1) to distinguish between IV/UV/NV slots that have cached a valid
2356 conversion where precision was lost and IV/UV/NV slots that have a
2357 valid conversion which has lost no precision
2358 2) to ensure that if a numeric conversion to one form is requested that
2359 would lose precision, the precise conversion (or differently
2360 imprecise conversion) is also performed and cached, to prevent
2361 requests for different numeric formats on the same SV causing
2362 lossy conversion chains. (lossless conversion chains are perfectly
2367 SvIOKp is true if the IV slot contains a valid value
2368 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
2369 SvNOKp is true if the NV slot contains a valid value
2370 SvNOK is true only if the NV value is accurate
2373 while converting from PV to NV, check to see if converting that NV to an
2374 IV(or UV) would lose accuracy over a direct conversion from PV to
2375 IV(or UV). If it would, cache both conversions, return NV, but mark
2376 SV as IOK NOKp (ie not NOK).
2378 While converting from PV to IV, check to see if converting that IV to an
2379 NV would lose accuracy over a direct conversion from PV to NV. If it
2380 would, cache both conversions, flag similarly.
2382 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2383 correctly because if IV & NV were set NV *always* overruled.
2384 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2385 changes - now IV and NV together means that the two are interchangeable:
2386 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2388 The benefit of this is that operations such as pp_add know that if
2389 SvIOK is true for both left and right operands, then integer addition
2390 can be used instead of floating point (for cases where the result won't
2391 overflow). Before, floating point was always used, which could lead to
2392 loss of precision compared with integer addition.
2394 * making IV and NV equal status should make maths accurate on 64 bit
2396 * may speed up maths somewhat if pp_add and friends start to use
2397 integers when possible instead of fp. (Hopefully the overhead in
2398 looking for SvIOK and checking for overflow will not outweigh the
2399 fp to integer speedup)
2400 * will slow down integer operations (callers of SvIV) on "inaccurate"
2401 values, as the change from SvIOK to SvIOKp will cause a call into
2402 sv_2iv each time rather than a macro access direct to the IV slot
2403 * should speed up number->string conversion on integers as IV is
2404 favoured when IV and NV are equally accurate
2406 ####################################################################
2407 You had better be using SvIOK_notUV if you want an IV for arithmetic:
2408 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2409 On the other hand, SvUOK is true iff UV.
2410 ####################################################################
2412 Your mileage will vary depending your CPU's relative fp to integer
2416 #ifndef NV_PRESERVES_UV
2417 # define IS_NUMBER_UNDERFLOW_IV 1
2418 # define IS_NUMBER_UNDERFLOW_UV 2
2419 # define IS_NUMBER_IV_AND_UV 2
2420 # define IS_NUMBER_OVERFLOW_IV 4
2421 # define IS_NUMBER_OVERFLOW_UV 5
2423 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2425 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2427 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2429 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2430 if (SvNVX(sv) < (NV)IV_MIN) {
2431 (void)SvIOKp_on(sv);
2433 SvIV_set(sv, IV_MIN);
2434 return IS_NUMBER_UNDERFLOW_IV;
2436 if (SvNVX(sv) > (NV)UV_MAX) {
2437 (void)SvIOKp_on(sv);
2440 SvUV_set(sv, UV_MAX);
2441 return IS_NUMBER_OVERFLOW_UV;
2443 (void)SvIOKp_on(sv);
2445 /* Can't use strtol etc to convert this string. (See truth table in
2447 if (SvNVX(sv) <= (UV)IV_MAX) {
2448 SvIV_set(sv, I_V(SvNVX(sv)));
2449 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2450 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2452 /* Integer is imprecise. NOK, IOKp */
2454 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2457 SvUV_set(sv, U_V(SvNVX(sv)));
2458 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2459 if (SvUVX(sv) == UV_MAX) {
2460 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2461 possibly be preserved by NV. Hence, it must be overflow.
2463 return IS_NUMBER_OVERFLOW_UV;
2465 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2467 /* Integer is imprecise. NOK, IOKp */
2469 return IS_NUMBER_OVERFLOW_IV;
2471 #endif /* !NV_PRESERVES_UV*/
2473 /* sv_2iv() is now a macro using Perl_sv_2iv_flags();
2474 * this function provided for binary compatibility only
2478 Perl_sv_2iv(pTHX_ register SV *sv)
2480 return sv_2iv_flags(sv, SV_GMAGIC);
2484 =for apidoc sv_2iv_flags
2486 Return the integer value of an SV, doing any necessary string
2487 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2488 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2494 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2498 if (SvGMAGICAL(sv)) {
2499 if (flags & SV_GMAGIC)
2504 return I_V(SvNVX(sv));
2506 if (SvPOKp(sv) && SvLEN(sv))
2509 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2510 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2516 if (SvTHINKFIRST(sv)) {
2519 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2520 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2521 return SvIV(tmpstr);
2522 return PTR2IV(SvRV(sv));
2525 sv_force_normal_flags(sv, 0);
2527 if (SvREADONLY(sv) && !SvOK(sv)) {
2528 if (ckWARN(WARN_UNINITIALIZED))
2535 return (IV)(SvUVX(sv));
2542 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2543 * without also getting a cached IV/UV from it at the same time
2544 * (ie PV->NV conversion should detect loss of accuracy and cache
2545 * IV or UV at same time to avoid this. NWC */
2547 if (SvTYPE(sv) == SVt_NV)
2548 sv_upgrade(sv, SVt_PVNV);
2550 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2551 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2552 certainly cast into the IV range at IV_MAX, whereas the correct
2553 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2555 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2556 SvIV_set(sv, I_V(SvNVX(sv)));
2557 if (SvNVX(sv) == (NV) SvIVX(sv)
2558 #ifndef NV_PRESERVES_UV
2559 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2560 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2561 /* Don't flag it as "accurately an integer" if the number
2562 came from a (by definition imprecise) NV operation, and
2563 we're outside the range of NV integer precision */
2566 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2567 DEBUG_c(PerlIO_printf(Perl_debug_log,
2568 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2574 /* IV not precise. No need to convert from PV, as NV
2575 conversion would already have cached IV if it detected
2576 that PV->IV would be better than PV->NV->IV
2577 flags already correct - don't set public IOK. */
2578 DEBUG_c(PerlIO_printf(Perl_debug_log,
2579 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2584 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2585 but the cast (NV)IV_MIN rounds to a the value less (more
2586 negative) than IV_MIN which happens to be equal to SvNVX ??
2587 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2588 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2589 (NV)UVX == NVX are both true, but the values differ. :-(
2590 Hopefully for 2s complement IV_MIN is something like
2591 0x8000000000000000 which will be exact. NWC */
2594 SvUV_set(sv, U_V(SvNVX(sv)));
2596 (SvNVX(sv) == (NV) SvUVX(sv))
2597 #ifndef NV_PRESERVES_UV
2598 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2599 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2600 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2601 /* Don't flag it as "accurately an integer" if the number
2602 came from a (by definition imprecise) NV operation, and
2603 we're outside the range of NV integer precision */
2609 DEBUG_c(PerlIO_printf(Perl_debug_log,
2610 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2614 return (IV)SvUVX(sv);
2617 else if (SvPOKp(sv) && SvLEN(sv)) {
2619 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2620 /* We want to avoid a possible problem when we cache an IV which
2621 may be later translated to an NV, and the resulting NV is not
2622 the same as the direct translation of the initial string
2623 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2624 be careful to ensure that the value with the .456 is around if the
2625 NV value is requested in the future).
2627 This means that if we cache such an IV, we need to cache the
2628 NV as well. Moreover, we trade speed for space, and do not
2629 cache the NV if we are sure it's not needed.
2632 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2633 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2634 == IS_NUMBER_IN_UV) {
2635 /* It's definitely an integer, only upgrade to PVIV */
2636 if (SvTYPE(sv) < SVt_PVIV)
2637 sv_upgrade(sv, SVt_PVIV);
2639 } else if (SvTYPE(sv) < SVt_PVNV)
2640 sv_upgrade(sv, SVt_PVNV);
2642 /* If NV preserves UV then we only use the UV value if we know that
2643 we aren't going to call atof() below. If NVs don't preserve UVs
2644 then the value returned may have more precision than atof() will
2645 return, even though value isn't perfectly accurate. */
2646 if ((numtype & (IS_NUMBER_IN_UV
2647 #ifdef NV_PRESERVES_UV
2650 )) == IS_NUMBER_IN_UV) {
2651 /* This won't turn off the public IOK flag if it was set above */
2652 (void)SvIOKp_on(sv);
2654 if (!(numtype & IS_NUMBER_NEG)) {
2656 if (value <= (UV)IV_MAX) {
2657 SvIV_set(sv, (IV)value);
2659 SvUV_set(sv, value);
2663 /* 2s complement assumption */
2664 if (value <= (UV)IV_MIN) {
2665 SvIV_set(sv, -(IV)value);
2667 /* Too negative for an IV. This is a double upgrade, but
2668 I'm assuming it will be rare. */
2669 if (SvTYPE(sv) < SVt_PVNV)
2670 sv_upgrade(sv, SVt_PVNV);
2674 SvNV_set(sv, -(NV)value);
2675 SvIV_set(sv, IV_MIN);
2679 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2680 will be in the previous block to set the IV slot, and the next
2681 block to set the NV slot. So no else here. */
2683 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2684 != IS_NUMBER_IN_UV) {
2685 /* It wasn't an (integer that doesn't overflow the UV). */
2686 SvNV_set(sv, Atof(SvPVX(sv)));
2688 if (! numtype && ckWARN(WARN_NUMERIC))
2691 #if defined(USE_LONG_DOUBLE)
2692 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2693 PTR2UV(sv), SvNVX(sv)));
2695 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2696 PTR2UV(sv), SvNVX(sv)));
2700 #ifdef NV_PRESERVES_UV
2701 (void)SvIOKp_on(sv);
2703 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2704 SvIV_set(sv, I_V(SvNVX(sv)));
2705 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2708 /* Integer is imprecise. NOK, IOKp */
2710 /* UV will not work better than IV */
2712 if (SvNVX(sv) > (NV)UV_MAX) {
2714 /* Integer is inaccurate. NOK, IOKp, is UV */
2715 SvUV_set(sv, UV_MAX);
2718 SvUV_set(sv, U_V(SvNVX(sv)));
2719 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2720 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2724 /* Integer is imprecise. NOK, IOKp, is UV */
2730 #else /* NV_PRESERVES_UV */
2731 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2732 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2733 /* The IV slot will have been set from value returned by
2734 grok_number above. The NV slot has just been set using
2737 assert (SvIOKp(sv));
2739 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2740 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2741 /* Small enough to preserve all bits. */
2742 (void)SvIOKp_on(sv);
2744 SvIV_set(sv, I_V(SvNVX(sv)));
2745 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2747 /* Assumption: first non-preserved integer is < IV_MAX,
2748 this NV is in the preserved range, therefore: */
2749 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2751 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);
2755 0 0 already failed to read UV.
2756 0 1 already failed to read UV.
2757 1 0 you won't get here in this case. IV/UV
2758 slot set, public IOK, Atof() unneeded.
2759 1 1 already read UV.
2760 so there's no point in sv_2iuv_non_preserve() attempting
2761 to use atol, strtol, strtoul etc. */
2762 if (sv_2iuv_non_preserve (sv, numtype)
2763 >= IS_NUMBER_OVERFLOW_IV)
2767 #endif /* NV_PRESERVES_UV */
2770 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2772 if (SvTYPE(sv) < SVt_IV)
2773 /* Typically the caller expects that sv_any is not NULL now. */
2774 sv_upgrade(sv, SVt_IV);
2777 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2778 PTR2UV(sv),SvIVX(sv)));
2779 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2782 /* sv_2uv() is now a macro using Perl_sv_2uv_flags();
2783 * this function provided for binary compatibility only
2787 Perl_sv_2uv(pTHX_ register SV *sv)
2789 return sv_2uv_flags(sv, SV_GMAGIC);
2793 =for apidoc sv_2uv_flags
2795 Return the unsigned integer value of an SV, doing any necessary string
2796 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2797 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2803 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2807 if (SvGMAGICAL(sv)) {
2808 if (flags & SV_GMAGIC)
2813 return U_V(SvNVX(sv));
2814 if (SvPOKp(sv) && SvLEN(sv))
2817 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2818 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2824 if (SvTHINKFIRST(sv)) {
2827 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2828 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2829 return SvUV(tmpstr);
2830 return PTR2UV(SvRV(sv));
2833 sv_force_normal_flags(sv, 0);
2835 if (SvREADONLY(sv) && !SvOK(sv)) {
2836 if (ckWARN(WARN_UNINITIALIZED))
2846 return (UV)SvIVX(sv);
2850 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2851 * without also getting a cached IV/UV from it at the same time
2852 * (ie PV->NV conversion should detect loss of accuracy and cache
2853 * IV or UV at same time to avoid this. */
2854 /* IV-over-UV optimisation - choose to cache IV if possible */
2856 if (SvTYPE(sv) == SVt_NV)
2857 sv_upgrade(sv, SVt_PVNV);
2859 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2860 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2861 SvIV_set(sv, I_V(SvNVX(sv)));
2862 if (SvNVX(sv) == (NV) SvIVX(sv)
2863 #ifndef NV_PRESERVES_UV
2864 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2865 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2866 /* Don't flag it as "accurately an integer" if the number
2867 came from a (by definition imprecise) NV operation, and
2868 we're outside the range of NV integer precision */
2871 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2872 DEBUG_c(PerlIO_printf(Perl_debug_log,
2873 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2879 /* IV not precise. No need to convert from PV, as NV
2880 conversion would already have cached IV if it detected
2881 that PV->IV would be better than PV->NV->IV
2882 flags already correct - don't set public IOK. */
2883 DEBUG_c(PerlIO_printf(Perl_debug_log,
2884 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2889 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2890 but the cast (NV)IV_MIN rounds to a the value less (more
2891 negative) than IV_MIN which happens to be equal to SvNVX ??
2892 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2893 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2894 (NV)UVX == NVX are both true, but the values differ. :-(
2895 Hopefully for 2s complement IV_MIN is something like
2896 0x8000000000000000 which will be exact. NWC */
2899 SvUV_set(sv, U_V(SvNVX(sv)));
2901 (SvNVX(sv) == (NV) SvUVX(sv))
2902 #ifndef NV_PRESERVES_UV
2903 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2904 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2905 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2906 /* Don't flag it as "accurately an integer" if the number
2907 came from a (by definition imprecise) NV operation, and
2908 we're outside the range of NV integer precision */
2913 DEBUG_c(PerlIO_printf(Perl_debug_log,
2914 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2920 else if (SvPOKp(sv) && SvLEN(sv)) {
2922 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2924 /* We want to avoid a possible problem when we cache a UV which
2925 may be later translated to an NV, and the resulting NV is not
2926 the translation of the initial data.
2928 This means that if we cache such a UV, we need to cache the
2929 NV as well. Moreover, we trade speed for space, and do not
2930 cache the NV if not needed.
2933 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2934 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2935 == IS_NUMBER_IN_UV) {
2936 /* It's definitely an integer, only upgrade to PVIV */
2937 if (SvTYPE(sv) < SVt_PVIV)
2938 sv_upgrade(sv, SVt_PVIV);
2940 } else if (SvTYPE(sv) < SVt_PVNV)
2941 sv_upgrade(sv, SVt_PVNV);
2943 /* If NV preserves UV then we only use the UV value if we know that
2944 we aren't going to call atof() below. If NVs don't preserve UVs
2945 then the value returned may have more precision than atof() will
2946 return, even though it isn't accurate. */
2947 if ((numtype & (IS_NUMBER_IN_UV
2948 #ifdef NV_PRESERVES_UV
2951 )) == IS_NUMBER_IN_UV) {
2952 /* This won't turn off the public IOK flag if it was set above */
2953 (void)SvIOKp_on(sv);
2955 if (!(numtype & IS_NUMBER_NEG)) {
2957 if (value <= (UV)IV_MAX) {
2958 SvIV_set(sv, (IV)value);
2960 /* it didn't overflow, and it was positive. */
2961 SvUV_set(sv, value);
2965 /* 2s complement assumption */
2966 if (value <= (UV)IV_MIN) {
2967 SvIV_set(sv, -(IV)value);
2969 /* Too negative for an IV. This is a double upgrade, but
2970 I'm assuming it will be rare. */
2971 if (SvTYPE(sv) < SVt_PVNV)
2972 sv_upgrade(sv, SVt_PVNV);
2976 SvNV_set(sv, -(NV)value);
2977 SvIV_set(sv, IV_MIN);
2982 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2983 != IS_NUMBER_IN_UV) {
2984 /* It wasn't an integer, or it overflowed the UV. */
2985 SvNV_set(sv, Atof(SvPVX(sv)));
2987 if (! numtype && ckWARN(WARN_NUMERIC))
2990 #if defined(USE_LONG_DOUBLE)
2991 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2992 PTR2UV(sv), SvNVX(sv)));
2994 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
2995 PTR2UV(sv), SvNVX(sv)));
2998 #ifdef NV_PRESERVES_UV
2999 (void)SvIOKp_on(sv);
3001 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
3002 SvIV_set(sv, I_V(SvNVX(sv)));
3003 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
3006 /* Integer is imprecise. NOK, IOKp */
3008 /* UV will not work better than IV */
3010 if (SvNVX(sv) > (NV)UV_MAX) {
3012 /* Integer is inaccurate. NOK, IOKp, is UV */
3013 SvUV_set(sv, UV_MAX);
3016 SvUV_set(sv, U_V(SvNVX(sv)));
3017 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
3018 NV preservse UV so can do correct comparison. */
3019 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
3023 /* Integer is imprecise. NOK, IOKp, is UV */
3028 #else /* NV_PRESERVES_UV */
3029 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3030 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
3031 /* The UV slot will have been set from value returned by
3032 grok_number above. The NV slot has just been set using
3035 assert (SvIOKp(sv));
3037 if (((UV)1 << NV_PRESERVES_UV_BITS) >
3038 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
3039 /* Small enough to preserve all bits. */
3040 (void)SvIOKp_on(sv);
3042 SvIV_set(sv, I_V(SvNVX(sv)));
3043 if ((NV)(SvIVX(sv)) == SvNVX(sv))
3045 /* Assumption: first non-preserved integer is < IV_MAX,
3046 this NV is in the preserved range, therefore: */
3047 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
3049 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);
3052 sv_2iuv_non_preserve (sv, numtype);
3054 #endif /* NV_PRESERVES_UV */
3058 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3059 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3062 if (SvTYPE(sv) < SVt_IV)
3063 /* Typically the caller expects that sv_any is not NULL now. */
3064 sv_upgrade(sv, SVt_IV);
3068 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
3069 PTR2UV(sv),SvUVX(sv)));
3070 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
3076 Return the num value of an SV, doing any necessary string or integer
3077 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
3084 Perl_sv_2nv(pTHX_ register SV *sv)
3088 if (SvGMAGICAL(sv)) {
3092 if (SvPOKp(sv) && SvLEN(sv)) {
3093 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
3094 !grok_number(SvPVX(sv), SvCUR(sv), NULL))
3096 return Atof(SvPVX(sv));
3100 return (NV)SvUVX(sv);
3102 return (NV)SvIVX(sv);
3105 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3106 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3112 if (SvTHINKFIRST(sv)) {
3115 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
3116 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
3117 return SvNV(tmpstr);
3118 return PTR2NV(SvRV(sv));
3121 sv_force_normal_flags(sv, 0);
3123 if (SvREADONLY(sv) && !SvOK(sv)) {
3124 if (ckWARN(WARN_UNINITIALIZED))
3129 if (SvTYPE(sv) < SVt_NV) {
3130 if (SvTYPE(sv) == SVt_IV)
3131 sv_upgrade(sv, SVt_PVNV);
3133 sv_upgrade(sv, SVt_NV);
3134 #ifdef USE_LONG_DOUBLE
3136 STORE_NUMERIC_LOCAL_SET_STANDARD();
3137 PerlIO_printf(Perl_debug_log,
3138 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
3139 PTR2UV(sv), SvNVX(sv));
3140 RESTORE_NUMERIC_LOCAL();
3144 STORE_NUMERIC_LOCAL_SET_STANDARD();
3145 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
3146 PTR2UV(sv), SvNVX(sv));
3147 RESTORE_NUMERIC_LOCAL();
3151 else if (SvTYPE(sv) < SVt_PVNV)
3152 sv_upgrade(sv, SVt_PVNV);
3157 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
3158 #ifdef NV_PRESERVES_UV
3161 /* Only set the public NV OK flag if this NV preserves the IV */
3162 /* Check it's not 0xFFFFFFFFFFFFFFFF */
3163 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
3164 : (SvIVX(sv) == I_V(SvNVX(sv))))
3170 else if (SvPOKp(sv) && SvLEN(sv)) {
3172 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3173 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
3175 #ifdef NV_PRESERVES_UV
3176 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3177 == IS_NUMBER_IN_UV) {
3178 /* It's definitely an integer */
3179 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
3181 SvNV_set(sv, Atof(SvPVX(sv)));
3184 SvNV_set(sv, Atof(SvPVX(sv)));
3185 /* Only set the public NV OK flag if this NV preserves the value in
3186 the PV at least as well as an IV/UV would.
3187 Not sure how to do this 100% reliably. */
3188 /* if that shift count is out of range then Configure's test is
3189 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
3191 if (((UV)1 << NV_PRESERVES_UV_BITS) >
3192 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
3193 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
3194 } else if (!(numtype & IS_NUMBER_IN_UV)) {
3195 /* Can't use strtol etc to convert this string, so don't try.
3196 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
3199 /* value has been set. It may not be precise. */
3200 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
3201 /* 2s complement assumption for (UV)IV_MIN */
3202 SvNOK_on(sv); /* Integer is too negative. */
3207 if (numtype & IS_NUMBER_NEG) {
3208 SvIV_set(sv, -(IV)value);
3209 } else if (value <= (UV)IV_MAX) {
3210 SvIV_set(sv, (IV)value);
3212 SvUV_set(sv, value);
3216 if (numtype & IS_NUMBER_NOT_INT) {
3217 /* I believe that even if the original PV had decimals,
3218 they are lost beyond the limit of the FP precision.
3219 However, neither is canonical, so both only get p
3220 flags. NWC, 2000/11/25 */
3221 /* Both already have p flags, so do nothing */
3224 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
3225 if (SvIVX(sv) == I_V(nv)) {
3230 /* It had no "." so it must be integer. */
3233 /* between IV_MAX and NV(UV_MAX).
3234 Could be slightly > UV_MAX */
3236 if (numtype & IS_NUMBER_NOT_INT) {
3237 /* UV and NV both imprecise. */
3239 UV nv_as_uv = U_V(nv);
3241 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
3252 #endif /* NV_PRESERVES_UV */
3255 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3257 if (SvTYPE(sv) < SVt_NV)
3258 /* Typically the caller expects that sv_any is not NULL now. */
3259 /* XXX Ilya implies that this is a bug in callers that assume this
3260 and ideally should be fixed. */
3261 sv_upgrade(sv, SVt_NV);
3264 #if defined(USE_LONG_DOUBLE)
3266 STORE_NUMERIC_LOCAL_SET_STANDARD();
3267 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
3268 PTR2UV(sv), SvNVX(sv));
3269 RESTORE_NUMERIC_LOCAL();
3273 STORE_NUMERIC_LOCAL_SET_STANDARD();
3274 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
3275 PTR2UV(sv), SvNVX(sv));
3276 RESTORE_NUMERIC_LOCAL();
3282 /* asIV(): extract an integer from the string value of an SV.
3283 * Caller must validate PVX */
3286 S_asIV(pTHX_ SV *sv)
3289 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3291 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3292 == IS_NUMBER_IN_UV) {
3293 /* It's definitely an integer */
3294 if (numtype & IS_NUMBER_NEG) {
3295 if (value < (UV)IV_MIN)
3298 if (value < (UV)IV_MAX)
3303 if (ckWARN(WARN_NUMERIC))
3306 return I_V(Atof(SvPVX(sv)));
3309 /* asUV(): extract an unsigned integer from the string value of an SV
3310 * Caller must validate PVX */
3313 S_asUV(pTHX_ SV *sv)
3316 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3318 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3319 == IS_NUMBER_IN_UV) {
3320 /* It's definitely an integer */
3321 if (!(numtype & IS_NUMBER_NEG))
3325 if (ckWARN(WARN_NUMERIC))
3328 return U_V(Atof(SvPVX(sv)));
3332 =for apidoc sv_2pv_nolen
3334 Like C<sv_2pv()>, but doesn't return the length too. You should usually
3335 use the macro wrapper C<SvPV_nolen(sv)> instead.
3340 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
3343 return sv_2pv(sv, &n_a);
3346 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
3347 * UV as a string towards the end of buf, and return pointers to start and
3350 * We assume that buf is at least TYPE_CHARS(UV) long.
3354 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
3356 char *ptr = buf + TYPE_CHARS(UV);
3370 *--ptr = '0' + (char)(uv % 10);
3378 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
3379 * this function provided for binary compatibility only
3383 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
3385 return sv_2pv_flags(sv, lp, SV_GMAGIC);
3389 =for apidoc sv_2pv_flags
3391 Returns a pointer to the string value of an SV, and sets *lp to its length.
3392 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
3394 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
3395 usually end up here too.
3401 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
3406 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
3407 char *tmpbuf = tbuf;
3413 if (SvGMAGICAL(sv)) {
3414 if (flags & SV_GMAGIC)
3422 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
3424 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
3429 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
3434 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3435 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3442 if (SvTHINKFIRST(sv)) {
3445 register const char *typestr;
3446 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3447 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3448 char *pv = SvPV(tmpstr, *lp);
3458 typestr = "NULLREF";
3462 switch (SvTYPE(sv)) {
3464 if ( ((SvFLAGS(sv) &
3465 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3466 == (SVs_OBJECT|SVs_SMG))
3467 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3468 const regexp *re = (regexp *)mg->mg_obj;
3471 const char *fptr = "msix";
3476 char need_newline = 0;
3477 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3479 while((ch = *fptr++)) {
3481 reflags[left++] = ch;
3484 reflags[right--] = ch;
3489 reflags[left] = '-';
3493 mg->mg_len = re->prelen + 4 + left;
3495 * If /x was used, we have to worry about a regex
3496 * ending with a comment later being embedded
3497 * within another regex. If so, we don't want this
3498 * regex's "commentization" to leak out to the
3499 * right part of the enclosing regex, we must cap
3500 * it with a newline.
3502 * So, if /x was used, we scan backwards from the
3503 * end of the regex. If we find a '#' before we
3504 * find a newline, we need to add a newline
3505 * ourself. If we find a '\n' first (or if we
3506 * don't find '#' or '\n'), we don't need to add
3507 * anything. -jfriedl
3509 if (PMf_EXTENDED & re->reganch)
3511 const char *endptr = re->precomp + re->prelen;
3512 while (endptr >= re->precomp)
3514 const char c = *(endptr--);
3516 break; /* don't need another */
3518 /* we end while in a comment, so we
3520 mg->mg_len++; /* save space for it */
3521 need_newline = 1; /* note to add it */
3527 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3528 Copy("(?", mg->mg_ptr, 2, char);
3529 Copy(reflags, mg->mg_ptr+2, left, char);
3530 Copy(":", mg->mg_ptr+left+2, 1, char);
3531 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3533 mg->mg_ptr[mg->mg_len - 2] = '\n';
3534 mg->mg_ptr[mg->mg_len - 1] = ')';
3535 mg->mg_ptr[mg->mg_len] = 0;
3537 PL_reginterp_cnt += re->program[0].next_off;
3539 if (re->reganch & ROPT_UTF8)
3554 case SVt_PVBM: typestr = SvROK(sv) ? "REF" : "SCALAR"; break;
3555 case SVt_PVLV: typestr = SvROK(sv) ? "REF"
3556 /* tied lvalues should appear to be
3557 * scalars for backwards compatitbility */
3558 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3559 ? "SCALAR" : "LVALUE"; break;
3560 case SVt_PVAV: typestr = "ARRAY"; break;
3561 case SVt_PVHV: typestr = "HASH"; break;
3562 case SVt_PVCV: typestr = "CODE"; break;
3563 case SVt_PVGV: typestr = "GLOB"; break;
3564 case SVt_PVFM: typestr = "FORMAT"; break;
3565 case SVt_PVIO: typestr = "IO"; break;
3566 default: typestr = "UNKNOWN"; break;
3570 const char *name = HvNAME(SvSTASH(sv));
3571 Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
3572 name ? name : "__ANON__" , typestr, PTR2UV(sv));
3575 Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, PTR2UV(sv));
3578 *lp = strlen(typestr);
3579 return (char *)typestr;
3581 if (SvREADONLY(sv) && !SvOK(sv)) {
3582 if (ckWARN(WARN_UNINITIALIZED))
3588 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3589 /* I'm assuming that if both IV and NV are equally valid then
3590 converting the IV is going to be more efficient */
3591 const U32 isIOK = SvIOK(sv);
3592 const U32 isUIOK = SvIsUV(sv);
3593 char buf[TYPE_CHARS(UV)];
3596 if (SvTYPE(sv) < SVt_PVIV)
3597 sv_upgrade(sv, SVt_PVIV);
3599 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3601 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3602 SvGROW(sv, (STRLEN)(ebuf - ptr + 1)); /* inlined from sv_setpvn */
3603 Move(ptr,SvPVX(sv),ebuf - ptr,char);
3604 SvCUR_set(sv, ebuf - ptr);
3614 else if (SvNOKp(sv)) {
3615 if (SvTYPE(sv) < SVt_PVNV)
3616 sv_upgrade(sv, SVt_PVNV);
3617 /* The +20 is pure guesswork. Configure test needed. --jhi */
3618 SvGROW(sv, NV_DIG + 20);
3620 olderrno = errno; /* some Xenix systems wipe out errno here */
3622 if (SvNVX(sv) == 0.0)
3623 (void)strcpy(s,"0");
3627 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3630 #ifdef FIXNEGATIVEZERO
3631 if (*s == '-' && s[1] == '0' && !s[2])
3641 if (ckWARN(WARN_UNINITIALIZED)
3642 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3645 if (SvTYPE(sv) < SVt_PV)
3646 /* Typically the caller expects that sv_any is not NULL now. */
3647 sv_upgrade(sv, SVt_PV);
3650 *lp = s - SvPVX(sv);
3653 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3654 PTR2UV(sv),SvPVX(sv)));
3658 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3659 /* Sneaky stuff here */
3663 tsv = newSVpv(tmpbuf, 0);
3679 len = strlen(tmpbuf);
3681 #ifdef FIXNEGATIVEZERO
3682 if (len == 2 && t[0] == '-' && t[1] == '0') {
3687 (void)SvUPGRADE(sv, SVt_PV);
3689 s = SvGROW(sv, len + 1);
3692 return strcpy(s, t);
3697 =for apidoc sv_copypv
3699 Copies a stringified representation of the source SV into the
3700 destination SV. Automatically performs any necessary mg_get and
3701 coercion of numeric values into strings. Guaranteed to preserve
3702 UTF-8 flag even from overloaded objects. Similar in nature to
3703 sv_2pv[_flags] but operates directly on an SV instead of just the
3704 string. Mostly uses sv_2pv_flags to do its work, except when that
3705 would lose the UTF-8'ness of the PV.
3711 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3716 sv_setpvn(dsv,s,len);
3724 =for apidoc sv_2pvbyte_nolen
3726 Return a pointer to the byte-encoded representation of the SV.
3727 May cause the SV to be downgraded from UTF-8 as a side-effect.
3729 Usually accessed via the C<SvPVbyte_nolen> macro.
3735 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3738 return sv_2pvbyte(sv, &n_a);
3742 =for apidoc sv_2pvbyte
3744 Return a pointer to the byte-encoded representation of the SV, and set *lp
3745 to its length. May cause the SV to be downgraded from UTF-8 as a
3748 Usually accessed via the C<SvPVbyte> macro.
3754 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3756 sv_utf8_downgrade(sv,0);
3757 return SvPV(sv,*lp);
3761 =for apidoc sv_2pvutf8_nolen
3763 Return a pointer to the UTF-8-encoded representation of the SV.
3764 May cause the SV to be upgraded to UTF-8 as a side-effect.
3766 Usually accessed via the C<SvPVutf8_nolen> macro.
3772 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3775 return sv_2pvutf8(sv, &n_a);
3779 =for apidoc sv_2pvutf8
3781 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3782 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3784 Usually accessed via the C<SvPVutf8> macro.
3790 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3792 sv_utf8_upgrade(sv);
3793 return SvPV(sv,*lp);
3797 =for apidoc sv_2bool
3799 This function is only called on magical items, and is only used by
3800 sv_true() or its macro equivalent.
3806 Perl_sv_2bool(pTHX_ register SV *sv)
3815 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3816 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3817 return (bool)SvTRUE(tmpsv);
3818 return SvRV(sv) != 0;
3821 register XPV* Xpvtmp;
3822 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3823 (*Xpvtmp->xpv_pv > '0' ||
3824 Xpvtmp->xpv_cur > 1 ||
3825 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
3832 return SvIVX(sv) != 0;
3835 return SvNVX(sv) != 0.0;
3842 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3843 * this function provided for binary compatibility only
3848 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3850 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3854 =for apidoc sv_utf8_upgrade
3856 Converts the PV of an SV to its UTF-8-encoded form.
3857 Forces the SV to string form if it is not already.
3858 Always sets the SvUTF8 flag to avoid future validity checks even
3859 if all the bytes have hibit clear.
3861 This is not as a general purpose byte encoding to Unicode interface:
3862 use the Encode extension for that.
3864 =for apidoc sv_utf8_upgrade_flags
3866 Converts the PV of an SV to its UTF-8-encoded form.
3867 Forces the SV to string form if it is not already.
3868 Always sets the SvUTF8 flag to avoid future validity checks even
3869 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3870 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3871 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3873 This is not as a general purpose byte encoding to Unicode interface:
3874 use the Encode extension for that.
3880 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3885 if (sv == &PL_sv_undef)
3889 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3890 (void) sv_2pv_flags(sv,&len, flags);
3894 (void) SvPV_force(sv,len);
3903 sv_force_normal_flags(sv, 0);
3906 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3907 sv_recode_to_utf8(sv, PL_encoding);
3908 else { /* Assume Latin-1/EBCDIC */
3909 /* This function could be much more efficient if we
3910 * had a FLAG in SVs to signal if there are any hibit
3911 * chars in the PV. Given that there isn't such a flag
3912 * make the loop as fast as possible. */
3913 s = (U8 *) SvPVX(sv);
3914 e = (U8 *) SvEND(sv);
3918 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3923 (void)SvOOK_off(sv);
3925 len = SvCUR(sv) + 1; /* Plus the \0 */
3926 SvPV_set(sv, (char*)bytes_to_utf8((U8*)s, &len));
3927 SvCUR_set(sv, len - 1);
3929 Safefree(s); /* No longer using what was there before. */
3930 SvLEN_set(sv, len); /* No longer know the real size. */
3932 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3939 =for apidoc sv_utf8_downgrade
3941 Attempts to convert the PV of an SV from characters to bytes.
3942 If the PV contains a character beyond byte, this conversion will fail;
3943 in this case, either returns false or, if C<fail_ok> is not
3946 This is not as a general purpose Unicode to byte encoding interface:
3947 use the Encode extension for that.
3953 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3955 if (SvPOKp(sv) && SvUTF8(sv)) {
3961 sv_force_normal_flags(sv, 0);
3963 s = (U8 *) SvPV(sv, len);
3964 if (!utf8_to_bytes(s, &len)) {
3969 Perl_croak(aTHX_ "Wide character in %s",
3972 Perl_croak(aTHX_ "Wide character");
3983 =for apidoc sv_utf8_encode
3985 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3986 flag off so that it looks like octets again.
3992 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3994 (void) sv_utf8_upgrade(sv);
3996 sv_force_normal_flags(sv, 0);
3998 if (SvREADONLY(sv)) {
3999 Perl_croak(aTHX_ PL_no_modify);
4005 =for apidoc sv_utf8_decode
4007 If the PV of the SV is an octet sequence in UTF-8
4008 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
4009 so that it looks like a character. If the PV contains only single-byte
4010 characters, the C<SvUTF8> flag stays being off.
4011 Scans PV for validity and returns false if the PV is invalid UTF-8.
4017 Perl_sv_utf8_decode(pTHX_ register SV *sv)
4023 /* The octets may have got themselves encoded - get them back as
4026 if (!sv_utf8_downgrade(sv, TRUE))
4029 /* it is actually just a matter of turning the utf8 flag on, but
4030 * we want to make sure everything inside is valid utf8 first.
4032 c = (U8 *) SvPVX(sv);
4033 if (!is_utf8_string(c, SvCUR(sv)+1))
4035 e = (U8 *) SvEND(sv);
4038 if (!UTF8_IS_INVARIANT(ch)) {
4047 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
4048 * this function provided for binary compatibility only
4052 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
4054 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
4058 =for apidoc sv_setsv
4060 Copies the contents of the source SV C<ssv> into the destination SV
4061 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
4062 function if the source SV needs to be reused. Does not handle 'set' magic.
4063 Loosely speaking, it performs a copy-by-value, obliterating any previous
4064 content of the destination.
4066 You probably want to use one of the assortment of wrappers, such as
4067 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4068 C<SvSetMagicSV_nosteal>.
4070 =for apidoc sv_setsv_flags
4072 Copies the contents of the source SV C<ssv> into the destination SV
4073 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
4074 function if the source SV needs to be reused. Does not handle 'set' magic.
4075 Loosely speaking, it performs a copy-by-value, obliterating any previous
4076 content of the destination.
4077 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
4078 C<ssv> if appropriate, else not. If the C<flags> parameter has the
4079 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
4080 and C<sv_setsv_nomg> are implemented in terms of this function.
4082 You probably want to use one of the assortment of wrappers, such as
4083 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4084 C<SvSetMagicSV_nosteal>.
4086 This is the primary function for copying scalars, and most other
4087 copy-ish functions and macros use this underneath.
4093 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
4095 register U32 sflags;
4101 SV_CHECK_THINKFIRST_COW_DROP(dstr);
4103 sstr = &PL_sv_undef;
4104 stype = SvTYPE(sstr);
4105 dtype = SvTYPE(dstr);
4110 /* need to nuke the magic */
4112 SvRMAGICAL_off(dstr);
4115 /* There's a lot of redundancy below but we're going for speed here */
4120 if (dtype != SVt_PVGV) {
4121 (void)SvOK_off(dstr);
4129 sv_upgrade(dstr, SVt_IV);
4132 sv_upgrade(dstr, SVt_PVNV);
4136 sv_upgrade(dstr, SVt_PVIV);
4139 (void)SvIOK_only(dstr);
4140 SvIV_set(dstr, SvIVX(sstr));
4143 if (SvTAINTED(sstr))
4154 sv_upgrade(dstr, SVt_NV);
4159 sv_upgrade(dstr, SVt_PVNV);
4162 SvNV_set(dstr, SvNVX(sstr));
4163 (void)SvNOK_only(dstr);
4164 if (SvTAINTED(sstr))
4172 sv_upgrade(dstr, SVt_RV);
4173 else if (dtype == SVt_PVGV &&
4174 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
4177 if (GvIMPORTED(dstr) != GVf_IMPORTED
4178 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4180 GvIMPORTED_on(dstr);
4189 #ifdef PERL_COPY_ON_WRITE
4190 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4191 if (dtype < SVt_PVIV)
4192 sv_upgrade(dstr, SVt_PVIV);
4199 sv_upgrade(dstr, SVt_PV);
4202 if (dtype < SVt_PVIV)
4203 sv_upgrade(dstr, SVt_PVIV);
4206 if (dtype < SVt_PVNV)
4207 sv_upgrade(dstr, SVt_PVNV);
4214 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
4217 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
4221 if (dtype <= SVt_PVGV) {
4223 if (dtype != SVt_PVGV) {
4224 char *name = GvNAME(sstr);
4225 STRLEN len = GvNAMELEN(sstr);
4226 /* don't upgrade SVt_PVLV: it can hold a glob */
4227 if (dtype != SVt_PVLV)
4228 sv_upgrade(dstr, SVt_PVGV);
4229 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
4230 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
4231 GvNAME(dstr) = savepvn(name, len);
4232 GvNAMELEN(dstr) = len;
4233 SvFAKE_on(dstr); /* can coerce to non-glob */
4235 /* ahem, death to those who redefine active sort subs */
4236 else if (PL_curstackinfo->si_type == PERLSI_SORT
4237 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
4238 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
4241 #ifdef GV_UNIQUE_CHECK
4242 if (GvUNIQUE((GV*)dstr)) {
4243 Perl_croak(aTHX_ PL_no_modify);
4247 (void)SvOK_off(dstr);
4248 GvINTRO_off(dstr); /* one-shot flag */
4250 GvGP(dstr) = gp_ref(GvGP(sstr));
4251 if (SvTAINTED(sstr))
4253 if (GvIMPORTED(dstr) != GVf_IMPORTED
4254 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4256 GvIMPORTED_on(dstr);
4264 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4266 if ((int)SvTYPE(sstr) != stype) {
4267 stype = SvTYPE(sstr);
4268 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
4272 if (stype == SVt_PVLV)
4273 (void)SvUPGRADE(dstr, SVt_PVNV);
4275 (void)SvUPGRADE(dstr, (U32)stype);
4278 sflags = SvFLAGS(sstr);
4280 if (sflags & SVf_ROK) {
4281 if (dtype >= SVt_PV) {
4282 if (dtype == SVt_PVGV) {
4283 SV *sref = SvREFCNT_inc(SvRV(sstr));
4285 int intro = GvINTRO(dstr);
4287 #ifdef GV_UNIQUE_CHECK
4288 if (GvUNIQUE((GV*)dstr)) {
4289 Perl_croak(aTHX_ PL_no_modify);
4294 GvINTRO_off(dstr); /* one-shot flag */
4295 GvLINE(dstr) = CopLINE(PL_curcop);
4296 GvEGV(dstr) = (GV*)dstr;
4299 switch (SvTYPE(sref)) {
4302 SAVEGENERICSV(GvAV(dstr));
4304 dref = (SV*)GvAV(dstr);
4305 GvAV(dstr) = (AV*)sref;
4306 if (!GvIMPORTED_AV(dstr)
4307 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4309 GvIMPORTED_AV_on(dstr);
4314 SAVEGENERICSV(GvHV(dstr));
4316 dref = (SV*)GvHV(dstr);
4317 GvHV(dstr) = (HV*)sref;
4318 if (!GvIMPORTED_HV(dstr)
4319 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4321 GvIMPORTED_HV_on(dstr);
4326 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
4327 SvREFCNT_dec(GvCV(dstr));
4328 GvCV(dstr) = Nullcv;
4329 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4330 PL_sub_generation++;
4332 SAVEGENERICSV(GvCV(dstr));
4335 dref = (SV*)GvCV(dstr);
4336 if (GvCV(dstr) != (CV*)sref) {
4337 CV* cv = GvCV(dstr);
4339 if (!GvCVGEN((GV*)dstr) &&
4340 (CvROOT(cv) || CvXSUB(cv)))
4342 /* ahem, death to those who redefine
4343 * active sort subs */
4344 if (PL_curstackinfo->si_type == PERLSI_SORT &&
4345 PL_sortcop == CvSTART(cv))
4347 "Can't redefine active sort subroutine %s",
4348 GvENAME((GV*)dstr));
4349 /* Redefining a sub - warning is mandatory if
4350 it was a const and its value changed. */
4351 if (ckWARN(WARN_REDEFINE)
4353 && (!CvCONST((CV*)sref)
4354 || sv_cmp(cv_const_sv(cv),
4355 cv_const_sv((CV*)sref)))))
4357 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4359 ? "Constant subroutine %s::%s redefined"
4360 : "Subroutine %s::%s redefined",
4361 HvNAME(GvSTASH((GV*)dstr)),
4362 GvENAME((GV*)dstr));
4366 cv_ckproto(cv, (GV*)dstr,
4367 SvPOK(sref) ? SvPVX(sref) : Nullch);
4369 GvCV(dstr) = (CV*)sref;
4370 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4371 GvASSUMECV_on(dstr);
4372 PL_sub_generation++;
4374 if (!GvIMPORTED_CV(dstr)
4375 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4377 GvIMPORTED_CV_on(dstr);
4382 SAVEGENERICSV(GvIOp(dstr));
4384 dref = (SV*)GvIOp(dstr);
4385 GvIOp(dstr) = (IO*)sref;
4389 SAVEGENERICSV(GvFORM(dstr));
4391 dref = (SV*)GvFORM(dstr);
4392 GvFORM(dstr) = (CV*)sref;
4396 SAVEGENERICSV(GvSV(dstr));
4398 dref = (SV*)GvSV(dstr);
4400 if (!GvIMPORTED_SV(dstr)
4401 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4403 GvIMPORTED_SV_on(dstr);
4409 if (SvTAINTED(sstr))
4414 (void)SvOOK_off(dstr); /* backoff */
4416 Safefree(SvPVX(dstr));
4421 (void)SvOK_off(dstr);
4422 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4424 if (sflags & SVp_NOK) {
4426 /* Only set the public OK flag if the source has public OK. */
4427 if (sflags & SVf_NOK)
4428 SvFLAGS(dstr) |= SVf_NOK;
4429 SvNV_set(dstr, SvNVX(sstr));
4431 if (sflags & SVp_IOK) {
4432 (void)SvIOKp_on(dstr);
4433 if (sflags & SVf_IOK)
4434 SvFLAGS(dstr) |= SVf_IOK;
4435 if (sflags & SVf_IVisUV)
4437 SvIV_set(dstr, SvIVX(sstr));
4439 if (SvAMAGIC(sstr)) {
4443 else if (sflags & SVp_POK) {
4447 * Check to see if we can just swipe the string. If so, it's a
4448 * possible small lose on short strings, but a big win on long ones.
4449 * It might even be a win on short strings if SvPVX(dstr)
4450 * has to be allocated and SvPVX(sstr) has to be freed.
4453 /* Whichever path we take through the next code, we want this true,
4454 and doing it now facilitates the COW check. */
4455 (void)SvPOK_only(dstr);
4458 #ifdef PERL_COPY_ON_WRITE
4459 (sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
4463 (sflags & SVs_TEMP) && /* slated for free anyway? */
4464 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4465 (!(flags & SV_NOSTEAL)) &&
4466 /* and we're allowed to steal temps */
4467 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4468 SvLEN(sstr) && /* and really is a string */
4469 /* and won't be needed again, potentially */
4470 !(PL_op && PL_op->op_type == OP_AASSIGN))
4471 #ifdef PERL_COPY_ON_WRITE
4472 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4473 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4474 && SvTYPE(sstr) >= SVt_PVIV)
4477 /* Failed the swipe test, and it's not a shared hash key either.
4478 Have to copy the string. */
4479 STRLEN len = SvCUR(sstr);
4480 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4481 Move(SvPVX(sstr),SvPVX(dstr),len,char);
4482 SvCUR_set(dstr, len);
4483 *SvEND(dstr) = '\0';
4485 /* If PERL_COPY_ON_WRITE is not defined, then isSwipe will always
4487 #ifdef PERL_COPY_ON_WRITE
4488 /* Either it's a shared hash key, or it's suitable for
4489 copy-on-write or we can swipe the string. */
4491 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4496 /* I believe I should acquire a global SV mutex if
4497 it's a COW sv (not a shared hash key) to stop
4498 it going un copy-on-write.
4499 If the source SV has gone un copy on write between up there
4500 and down here, then (assert() that) it is of the correct
4501 form to make it copy on write again */
4502 if ((sflags & (SVf_FAKE | SVf_READONLY))
4503 != (SVf_FAKE | SVf_READONLY)) {
4504 SvREADONLY_on(sstr);
4506 /* Make the source SV into a loop of 1.
4507 (about to become 2) */
4508 SV_COW_NEXT_SV_SET(sstr, sstr);
4512 /* Initial code is common. */
4513 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
4515 SvFLAGS(dstr) &= ~SVf_OOK;
4516 Safefree(SvPVX(dstr) - SvIVX(dstr));
4518 else if (SvLEN(dstr))
4519 Safefree(SvPVX(dstr));
4522 #ifdef PERL_COPY_ON_WRITE
4524 /* making another shared SV. */
4525 STRLEN cur = SvCUR(sstr);
4526 STRLEN len = SvLEN(sstr);
4527 assert (SvTYPE(dstr) >= SVt_PVIV);
4529 /* SvIsCOW_normal */
4530 /* splice us in between source and next-after-source. */
4531 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4532 SV_COW_NEXT_SV_SET(sstr, dstr);
4533 SvPV_set(dstr, SvPVX(sstr));
4535 /* SvIsCOW_shared_hash */
4536 UV hash = SvUVX(sstr);
4537 DEBUG_C(PerlIO_printf(Perl_debug_log,
4538 "Copy on write: Sharing hash\n"));
4540 sharepvn(SvPVX(sstr),
4541 (sflags & SVf_UTF8?-cur:cur), hash));
4542 SvUV_set(dstr, hash);
4544 SvLEN_set(dstr, len);
4545 SvCUR_set(dstr, cur);
4546 SvREADONLY_on(dstr);
4548 /* Relesase a global SV mutex. */
4552 { /* Passes the swipe test. */
4553 SvPV_set(dstr, SvPVX(sstr));
4554 SvLEN_set(dstr, SvLEN(sstr));
4555 SvCUR_set(dstr, SvCUR(sstr));
4558 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4559 SvPV_set(sstr, Nullch);
4565 if (sflags & SVf_UTF8)
4568 if (sflags & SVp_NOK) {
4570 if (sflags & SVf_NOK)
4571 SvFLAGS(dstr) |= SVf_NOK;
4572 SvNV_set(dstr, SvNVX(sstr));
4574 if (sflags & SVp_IOK) {
4575 (void)SvIOKp_on(dstr);
4576 if (sflags & SVf_IOK)
4577 SvFLAGS(dstr) |= SVf_IOK;
4578 if (sflags & SVf_IVisUV)
4580 SvIV_set(dstr, SvIVX(sstr));
4583 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4584 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4585 smg->mg_ptr, smg->mg_len);
4586 SvRMAGICAL_on(dstr);
4589 else if (sflags & SVp_IOK) {
4590 if (sflags & SVf_IOK)
4591 (void)SvIOK_only(dstr);
4593 (void)SvOK_off(dstr);
4594 (void)SvIOKp_on(dstr);
4596 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4597 if (sflags & SVf_IVisUV)
4599 SvIV_set(dstr, SvIVX(sstr));
4600 if (sflags & SVp_NOK) {
4601 if (sflags & SVf_NOK)
4602 (void)SvNOK_on(dstr);
4604 (void)SvNOKp_on(dstr);
4605 SvNV_set(dstr, SvNVX(sstr));
4608 else if (sflags & SVp_NOK) {
4609 if (sflags & SVf_NOK)
4610 (void)SvNOK_only(dstr);
4612 (void)SvOK_off(dstr);
4615 SvNV_set(dstr, SvNVX(sstr));
4618 if (dtype == SVt_PVGV) {
4619 if (ckWARN(WARN_MISC))
4620 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4623 (void)SvOK_off(dstr);
4625 if (SvTAINTED(sstr))
4630 =for apidoc sv_setsv_mg
4632 Like C<sv_setsv>, but also handles 'set' magic.
4638 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4640 sv_setsv(dstr,sstr);
4644 #ifdef PERL_COPY_ON_WRITE
4646 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4648 STRLEN cur = SvCUR(sstr);
4649 STRLEN len = SvLEN(sstr);
4650 register char *new_pv;
4653 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4661 if (SvTHINKFIRST(dstr))
4662 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4663 else if (SvPVX(dstr))
4664 Safefree(SvPVX(dstr));
4668 (void)SvUPGRADE (dstr, SVt_PVIV);
4670 assert (SvPOK(sstr));
4671 assert (SvPOKp(sstr));
4672 assert (!SvIOK(sstr));
4673 assert (!SvIOKp(sstr));
4674 assert (!SvNOK(sstr));
4675 assert (!SvNOKp(sstr));
4677 if (SvIsCOW(sstr)) {
4679 if (SvLEN(sstr) == 0) {
4680 /* source is a COW shared hash key. */
4681 UV hash = SvUVX(sstr);
4682 DEBUG_C(PerlIO_printf(Perl_debug_log,
4683 "Fast copy on write: Sharing hash\n"));
4684 SvUV_set(dstr, hash);
4685 new_pv = sharepvn(SvPVX(sstr), (SvUTF8(sstr)?-cur:cur), hash);
4688 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4690 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4691 (void)SvUPGRADE (sstr, SVt_PVIV);
4692 SvREADONLY_on(sstr);
4694 DEBUG_C(PerlIO_printf(Perl_debug_log,
4695 "Fast copy on write: Converting sstr to COW\n"));
4696 SV_COW_NEXT_SV_SET(dstr, sstr);
4698 SV_COW_NEXT_SV_SET(sstr, dstr);
4699 new_pv = SvPVX(sstr);
4702 SvPV_set(dstr, new_pv);
4703 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4706 SvLEN_set(dstr, len);
4707 SvCUR_set(dstr, cur);
4716 =for apidoc sv_setpvn
4718 Copies a string into an SV. The C<len> parameter indicates the number of
4719 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4720 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4726 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4728 register char *dptr;
4730 SV_CHECK_THINKFIRST_COW_DROP(sv);
4736 /* len is STRLEN which is unsigned, need to copy to signed */
4739 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");