3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 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) SvUVX(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 #define plant_SV(p) \
170 SvANY(p) = (void *)PL_sv_root; \
171 SvFLAGS(p) = SVTYPEMASK; \
176 /* sv_mutex must be held while calling uproot_SV() */
177 #define uproot_SV(p) \
180 PL_sv_root = (SV*)SvANY(p); \
185 /* new_SV(): return a new, empty SV head */
187 #ifdef DEBUG_LEAKING_SCALARS
188 /* provide a real function for a debugger to play with */
205 # define new_SV(p) (p)=S_new_SV(aTHX)
223 /* del_SV(): return an empty SV head to the free list */
238 S_del_sv(pTHX_ SV *p)
245 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
247 svend = &sva[SvREFCNT(sva)];
248 if (p >= sv && p < svend)
252 if (ckWARN_d(WARN_INTERNAL))
253 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
254 "Attempt to free non-arena SV: 0x%"UVxf
255 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
262 #else /* ! DEBUGGING */
264 #define del_SV(p) plant_SV(p)
266 #endif /* DEBUGGING */
270 =head1 SV Manipulation Functions
272 =for apidoc sv_add_arena
274 Given a chunk of memory, link it to the head of the list of arenas,
275 and split it into a list of free SVs.
281 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
287 /* The first SV in an arena isn't an SV. */
288 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
289 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
290 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
292 PL_sv_arenaroot = sva;
293 PL_sv_root = sva + 1;
295 svend = &sva[SvREFCNT(sva) - 1];
298 SvANY(sv) = (void *)(SV*)(sv + 1);
300 SvFLAGS(sv) = SVTYPEMASK;
304 SvFLAGS(sv) = SVTYPEMASK;
307 /* make some more SVs by adding another arena */
309 /* sv_mutex must be held while calling more_sv() */
316 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
317 PL_nice_chunk = Nullch;
318 PL_nice_chunk_size = 0;
321 char *chunk; /* must use New here to match call to */
322 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
323 sv_add_arena(chunk, 1008, 0);
329 /* visit(): call the named function for each non-free SV in the arenas
330 * whose flags field matches the flags/mask args. */
333 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
340 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
341 svend = &sva[SvREFCNT(sva)];
342 for (sv = sva + 1; sv < svend; ++sv) {
343 if (SvTYPE(sv) != SVTYPEMASK
344 && (sv->sv_flags & mask) == flags
357 /* called by sv_report_used() for each live SV */
360 do_report_used(pTHX_ SV *sv)
362 if (SvTYPE(sv) != SVTYPEMASK) {
363 PerlIO_printf(Perl_debug_log, "****\n");
370 =for apidoc sv_report_used
372 Dump the contents of all SVs not yet freed. (Debugging aid).
378 Perl_sv_report_used(pTHX)
381 visit(do_report_used, 0, 0);
385 /* called by sv_clean_objs() for each live SV */
388 do_clean_objs(pTHX_ SV *sv)
392 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
393 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
405 /* XXX Might want to check arrays, etc. */
408 /* called by sv_clean_objs() for each live SV */
410 #ifndef DISABLE_DESTRUCTOR_KLUDGE
412 do_clean_named_objs(pTHX_ SV *sv)
414 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
415 if ( SvOBJECT(GvSV(sv)) ||
416 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
417 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
418 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
419 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
421 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
422 SvFLAGS(sv) |= SVf_BREAK;
430 =for apidoc sv_clean_objs
432 Attempt to destroy all objects not yet freed
438 Perl_sv_clean_objs(pTHX)
440 PL_in_clean_objs = TRUE;
441 visit(do_clean_objs, SVf_ROK, SVf_ROK);
442 #ifndef DISABLE_DESTRUCTOR_KLUDGE
443 /* some barnacles may yet remain, clinging to typeglobs */
444 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
446 PL_in_clean_objs = FALSE;
449 /* called by sv_clean_all() for each live SV */
452 do_clean_all(pTHX_ SV *sv)
454 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
455 SvFLAGS(sv) |= SVf_BREAK;
456 if (PL_comppad == (AV*)sv) {
458 PL_curpad = Null(SV**);
464 =for apidoc sv_clean_all
466 Decrement the refcnt of each remaining SV, possibly triggering a
467 cleanup. This function may have to be called multiple times to free
468 SVs which are in complex self-referential hierarchies.
474 Perl_sv_clean_all(pTHX)
477 PL_in_clean_all = TRUE;
478 cleaned = visit(do_clean_all, 0,0);
479 PL_in_clean_all = FALSE;
484 =for apidoc sv_free_arenas
486 Deallocate the memory used by all arenas. Note that all the individual SV
487 heads and bodies within the arenas must already have been freed.
493 Perl_sv_free_arenas(pTHX)
497 XPV *arena, *arenanext;
499 /* Free arenas here, but be careful about fake ones. (We assume
500 contiguity of the fake ones with the corresponding real ones.) */
502 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
503 svanext = (SV*) SvANY(sva);
504 while (svanext && SvFAKE(svanext))
505 svanext = (SV*) SvANY(svanext);
508 Safefree((void *)sva);
511 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
512 arenanext = (XPV*)arena->xpv_pv;
515 PL_xiv_arenaroot = 0;
518 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
519 arenanext = (XPV*)arena->xpv_pv;
522 PL_xnv_arenaroot = 0;
525 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
526 arenanext = (XPV*)arena->xpv_pv;
529 PL_xrv_arenaroot = 0;
532 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
533 arenanext = (XPV*)arena->xpv_pv;
536 PL_xpv_arenaroot = 0;
539 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
540 arenanext = (XPV*)arena->xpv_pv;
543 PL_xpviv_arenaroot = 0;
546 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
547 arenanext = (XPV*)arena->xpv_pv;
550 PL_xpvnv_arenaroot = 0;
553 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
554 arenanext = (XPV*)arena->xpv_pv;
557 PL_xpvcv_arenaroot = 0;
560 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
561 arenanext = (XPV*)arena->xpv_pv;
564 PL_xpvav_arenaroot = 0;
567 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
568 arenanext = (XPV*)arena->xpv_pv;
571 PL_xpvhv_arenaroot = 0;
574 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
575 arenanext = (XPV*)arena->xpv_pv;
578 PL_xpvmg_arenaroot = 0;
581 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
582 arenanext = (XPV*)arena->xpv_pv;
585 PL_xpvlv_arenaroot = 0;
588 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
589 arenanext = (XPV*)arena->xpv_pv;
592 PL_xpvbm_arenaroot = 0;
595 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
596 arenanext = (XPV*)arena->xpv_pv;
603 Safefree(PL_nice_chunk);
604 PL_nice_chunk = Nullch;
605 PL_nice_chunk_size = 0;
610 /* ---------------------------------------------------------------------
612 * support functions for report_uninit()
615 /* the maxiumum size of array or hash where we will scan looking
616 * for the undefined element that triggered the warning */
618 #define FUV_MAX_SEARCH_SIZE 1000
620 /* Look for an entry in the hash whose value has the same SV as val;
621 * If so, return a mortal copy of the key. */
624 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
630 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
631 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
636 for (i=HvMAX(hv); i>0; i--) {
637 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
638 if (HeVAL(entry) != val)
640 if ( HeVAL(entry) == &PL_sv_undef ||
641 HeVAL(entry) == &PL_sv_placeholder)
645 if (HeKLEN(entry) == HEf_SVKEY)
646 return sv_mortalcopy(HeKEY_sv(entry));
647 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
653 /* Look for an entry in the array whose value has the same SV as val;
654 * If so, return the index, otherwise return -1. */
657 S_find_array_subscript(pTHX_ AV *av, SV* val)
661 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
662 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
666 for (i=AvFILLp(av); i>=0; i--) {
667 if (svp[i] == val && svp[i] != &PL_sv_undef)
673 /* S_varname(): return the name of a variable, optionally with a subscript.
674 * If gv is non-zero, use the name of that global, along with gvtype (one
675 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
676 * targ. Depending on the value of the subscript_type flag, return:
679 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
680 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
681 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
682 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
685 S_varname(pTHX_ GV *gv, char *gvtype, PADOFFSET targ,
686 SV* keyname, I32 aindex, int subscript_type)
692 name = sv_newmortal();
695 /* simulate gv_fullname4(), but add literal '^' for $^FOO names
696 * XXX get rid of all this if gv_fullnameX() ever supports this
700 HV *hv = GvSTASH(gv);
701 sv_setpv(name, gvtype);
704 else if (!HvNAME(hv))
708 if (strNE(p, "main")) {
710 sv_catpvn(name,"::", 2);
712 if (GvNAMELEN(gv)>= 1 &&
713 ((unsigned int)*GvNAME(gv)) <= 26)
715 Perl_sv_catpvf(aTHX_ name,"^%c", *GvNAME(gv) + 'A' - 1);
716 sv_catpvn(name,GvNAME(gv)+1,GvNAMELEN(gv)-1);
719 sv_catpvn(name,GvNAME(gv),GvNAMELEN(gv));
723 CV *cv = find_runcv(&u);
724 if (!cv || !CvPADLIST(cv))
726 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
727 sv = *av_fetch(av, targ, FALSE);
728 /* SvLEN in a pad name is not to be trusted */
729 sv_setpv(name, SvPV_nolen(sv));
732 if (subscript_type == FUV_SUBSCRIPT_HASH) {
735 Perl_sv_catpvf(aTHX_ name, "{%s}",
736 pv_display(sv,SvPVX(keyname), SvCUR(keyname), 0, 32));
739 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
741 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
743 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
744 sv_insert(name, 0, 0, "within ", 7);
751 =for apidoc find_uninit_var
753 Find the name of the undefined variable (if any) that caused the operator o
754 to issue a "Use of uninitialized value" warning.
755 If match is true, only return a name if it's value matches uninit_sv.
756 So roughly speaking, if a unary operator (such as OP_COS) generates a
757 warning, then following the direct child of the op may yield an
758 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
759 other hand, with OP_ADD there are two branches to follow, so we only print
760 the variable name if we get an exact match.
762 The name is returned as a mortal SV.
764 Assumes that PL_op is the op that originally triggered the error, and that
765 PL_comppad/PL_curpad points to the currently executing pad.
771 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
779 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
780 uninit_sv == &PL_sv_placeholder)))
783 switch (obase->op_type) {
790 bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
791 bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
794 int subscript_type = FUV_SUBSCRIPT_WITHIN;
796 if (pad) { /* @lex, %lex */
797 sv = PAD_SVl(obase->op_targ);
801 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
802 /* @global, %global */
803 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
806 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
808 else /* @{expr}, %{expr} */
809 return find_uninit_var(cUNOPx(obase)->op_first,
813 /* attempt to find a match within the aggregate */
815 keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
817 subscript_type = FUV_SUBSCRIPT_HASH;
820 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
822 subscript_type = FUV_SUBSCRIPT_ARRAY;
825 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
828 return S_varname(aTHX_ gv, hash ? "%" : "@", obase->op_targ,
829 keysv, index, subscript_type);
833 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
835 return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
836 Nullsv, 0, FUV_SUBSCRIPT_NONE);
839 gv = cGVOPx_gv(obase);
840 if (!gv || (match && GvSV(gv) != uninit_sv))
842 return S_varname(aTHX_ gv, "$", 0, Nullsv, 0, FUV_SUBSCRIPT_NONE);
845 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
847 av = (AV*)PAD_SV(obase->op_targ);
848 if (!av || SvRMAGICAL(av))
850 svp = av_fetch(av, (I32)obase->op_private, FALSE);
851 if (!svp || *svp != uninit_sv)
854 return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
855 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
858 gv = cGVOPx_gv(obase);
863 if (!av || SvRMAGICAL(av))
865 svp = av_fetch(av, (I32)obase->op_private, FALSE);
866 if (!svp || *svp != uninit_sv)
869 return S_varname(aTHX_ gv, "$", 0,
870 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
875 o = cUNOPx(obase)->op_first;
876 if (!o || o->op_type != OP_NULL ||
877 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
879 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
884 /* $a[uninit_expr] or $h{uninit_expr} */
885 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
888 o = cBINOPx(obase)->op_first;
889 kid = cBINOPx(obase)->op_last;
891 /* get the av or hv, and optionally the gv */
893 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
894 sv = PAD_SV(o->op_targ);
896 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
897 && cUNOPo->op_first->op_type == OP_GV)
899 gv = cGVOPx_gv(cUNOPo->op_first);
902 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
907 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
908 /* index is constant */
912 if (obase->op_type == OP_HELEM) {
913 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
914 if (!he || HeVAL(he) != uninit_sv)
918 svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
919 if (!svp || *svp != uninit_sv)
923 if (obase->op_type == OP_HELEM)
924 return S_varname(aTHX_ gv, "%", o->op_targ,
925 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
927 return S_varname(aTHX_ gv, "@", o->op_targ, Nullsv,
928 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
932 /* index is an expression;
933 * attempt to find a match within the aggregate */
934 if (obase->op_type == OP_HELEM) {
935 SV *keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
937 return S_varname(aTHX_ gv, "%", o->op_targ,
938 keysv, 0, FUV_SUBSCRIPT_HASH);
941 I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
943 return S_varname(aTHX_ gv, "@", o->op_targ,
944 Nullsv, index, FUV_SUBSCRIPT_ARRAY);
948 return S_varname(aTHX_ gv,
949 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
951 o->op_targ, Nullsv, 0, FUV_SUBSCRIPT_WITHIN);
957 /* only examine RHS */
958 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
961 o = cUNOPx(obase)->op_first;
962 if (o->op_type == OP_PUSHMARK)
965 if (!o->op_sibling) {
966 /* one-arg version of open is highly magical */
968 if (o->op_type == OP_GV) { /* open FOO; */
970 if (match && GvSV(gv) != uninit_sv)
972 return S_varname(aTHX_ gv, "$", 0,
973 Nullsv, 0, FUV_SUBSCRIPT_NONE);
975 /* other possibilities not handled are:
976 * open $x; or open my $x; should return '${*$x}'
977 * open expr; should return '$'.expr ideally
983 /* ops where $_ may be an implicit arg */
987 if ( !(obase->op_flags & OPf_STACKED)) {
988 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
989 ? PAD_SVl(obase->op_targ)
1001 /* skip filehandle as it can't produce 'undef' warning */
1002 o = cUNOPx(obase)->op_first;
1003 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
1004 o = o->op_sibling->op_sibling;
1011 match = 1; /* XS or custom code could trigger random warnings */
1016 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
1017 return sv_2mortal(newSVpv("${$/}", 0));
1022 if (!(obase->op_flags & OPf_KIDS))
1024 o = cUNOPx(obase)->op_first;
1030 /* if all except one arg are constant, or have no side-effects,
1031 * or are optimized away, then it's unambiguous */
1033 for (kid=o; kid; kid = kid->op_sibling) {
1035 ( (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
1036 || (kid->op_type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
1037 || (kid->op_type == OP_PUSHMARK)
1041 if (o2) { /* more than one found */
1048 return find_uninit_var(o2, uninit_sv, match);
1052 sv = find_uninit_var(o, uninit_sv, 1);
1064 =for apidoc report_uninit
1066 Print appropriate "Use of uninitialized variable" warning
1072 Perl_report_uninit(pTHX_ SV* uninit_sv)
1077 varname = find_uninit_var(PL_op, uninit_sv,0);
1079 sv_insert(varname, 0, 0, " ", 1);
1081 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1082 varname ? SvPV_nolen(varname) : "",
1083 " in ", OP_DESC(PL_op));
1086 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1090 /* grab a new IV body from the free list, allocating more if necessary */
1101 * See comment in more_xiv() -- RAM.
1103 PL_xiv_root = *(IV**)xiv;
1105 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
1108 /* return an IV body to the free list */
1111 S_del_xiv(pTHX_ XPVIV *p)
1113 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
1115 *(IV**)xiv = PL_xiv_root;
1120 /* allocate another arena's worth of IV bodies */
1126 register IV* xivend;
1128 New(705, ptr, 1008/sizeof(XPV), XPV);
1129 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
1130 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
1133 xivend = &xiv[1008 / sizeof(IV) - 1];
1134 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
1136 while (xiv < xivend) {
1137 *(IV**)xiv = (IV *)(xiv + 1);
1143 /* grab a new NV body from the free list, allocating more if necessary */
1153 PL_xnv_root = *(NV**)xnv;
1155 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
1158 /* return an NV body to the free list */
1161 S_del_xnv(pTHX_ XPVNV *p)
1163 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
1165 *(NV**)xnv = PL_xnv_root;
1170 /* allocate another arena's worth of NV bodies */
1176 register NV* xnvend;
1178 New(711, ptr, 1008/sizeof(XPV), XPV);
1179 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
1180 PL_xnv_arenaroot = ptr;
1183 xnvend = &xnv[1008 / sizeof(NV) - 1];
1184 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
1186 while (xnv < xnvend) {
1187 *(NV**)xnv = (NV*)(xnv + 1);
1193 /* grab a new struct xrv from the free list, allocating more if necessary */
1203 PL_xrv_root = (XRV*)xrv->xrv_rv;
1208 /* return a struct xrv to the free list */
1211 S_del_xrv(pTHX_ XRV *p)
1214 p->xrv_rv = (SV*)PL_xrv_root;
1219 /* allocate another arena's worth of struct xrv */
1225 register XRV* xrvend;
1227 New(712, ptr, 1008/sizeof(XPV), XPV);
1228 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
1229 PL_xrv_arenaroot = ptr;
1232 xrvend = &xrv[1008 / sizeof(XRV) - 1];
1233 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
1235 while (xrv < xrvend) {
1236 xrv->xrv_rv = (SV*)(xrv + 1);
1242 /* grab a new struct xpv from the free list, allocating more if necessary */
1252 PL_xpv_root = (XPV*)xpv->xpv_pv;
1257 /* return a struct xpv to the free list */
1260 S_del_xpv(pTHX_ XPV *p)
1263 p->xpv_pv = (char*)PL_xpv_root;
1268 /* allocate another arena's worth of struct xpv */
1274 register XPV* xpvend;
1275 New(713, xpv, 1008/sizeof(XPV), XPV);
1276 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
1277 PL_xpv_arenaroot = xpv;
1279 xpvend = &xpv[1008 / sizeof(XPV) - 1];
1280 PL_xpv_root = ++xpv;
1281 while (xpv < xpvend) {
1282 xpv->xpv_pv = (char*)(xpv + 1);
1288 /* grab a new struct xpviv from the free list, allocating more if necessary */
1297 xpviv = PL_xpviv_root;
1298 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
1303 /* return a struct xpviv to the free list */
1306 S_del_xpviv(pTHX_ XPVIV *p)
1309 p->xpv_pv = (char*)PL_xpviv_root;
1314 /* allocate another arena's worth of struct xpviv */
1319 register XPVIV* xpviv;
1320 register XPVIV* xpvivend;
1321 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
1322 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
1323 PL_xpviv_arenaroot = xpviv;
1325 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
1326 PL_xpviv_root = ++xpviv;
1327 while (xpviv < xpvivend) {
1328 xpviv->xpv_pv = (char*)(xpviv + 1);
1334 /* grab a new struct xpvnv from the free list, allocating more if necessary */
1343 xpvnv = PL_xpvnv_root;
1344 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
1349 /* return a struct xpvnv to the free list */
1352 S_del_xpvnv(pTHX_ XPVNV *p)
1355 p->xpv_pv = (char*)PL_xpvnv_root;
1360 /* allocate another arena's worth of struct xpvnv */
1365 register XPVNV* xpvnv;
1366 register XPVNV* xpvnvend;
1367 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
1368 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
1369 PL_xpvnv_arenaroot = xpvnv;
1371 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
1372 PL_xpvnv_root = ++xpvnv;
1373 while (xpvnv < xpvnvend) {
1374 xpvnv->xpv_pv = (char*)(xpvnv + 1);
1380 /* grab a new struct xpvcv from the free list, allocating more if necessary */
1389 xpvcv = PL_xpvcv_root;
1390 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
1395 /* return a struct xpvcv to the free list */
1398 S_del_xpvcv(pTHX_ XPVCV *p)
1401 p->xpv_pv = (char*)PL_xpvcv_root;
1406 /* allocate another arena's worth of struct xpvcv */
1411 register XPVCV* xpvcv;
1412 register XPVCV* xpvcvend;
1413 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
1414 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
1415 PL_xpvcv_arenaroot = xpvcv;
1417 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
1418 PL_xpvcv_root = ++xpvcv;
1419 while (xpvcv < xpvcvend) {
1420 xpvcv->xpv_pv = (char*)(xpvcv + 1);
1426 /* grab a new struct xpvav from the free list, allocating more if necessary */
1435 xpvav = PL_xpvav_root;
1436 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
1441 /* return a struct xpvav to the free list */
1444 S_del_xpvav(pTHX_ XPVAV *p)
1447 p->xav_array = (char*)PL_xpvav_root;
1452 /* allocate another arena's worth of struct xpvav */
1457 register XPVAV* xpvav;
1458 register XPVAV* xpvavend;
1459 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
1460 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
1461 PL_xpvav_arenaroot = xpvav;
1463 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
1464 PL_xpvav_root = ++xpvav;
1465 while (xpvav < xpvavend) {
1466 xpvav->xav_array = (char*)(xpvav + 1);
1469 xpvav->xav_array = 0;
1472 /* grab a new struct xpvhv from the free list, allocating more if necessary */
1481 xpvhv = PL_xpvhv_root;
1482 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
1487 /* return a struct xpvhv to the free list */
1490 S_del_xpvhv(pTHX_ XPVHV *p)
1493 p->xhv_array = (char*)PL_xpvhv_root;
1498 /* allocate another arena's worth of struct xpvhv */
1503 register XPVHV* xpvhv;
1504 register XPVHV* xpvhvend;
1505 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
1506 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
1507 PL_xpvhv_arenaroot = xpvhv;
1509 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
1510 PL_xpvhv_root = ++xpvhv;
1511 while (xpvhv < xpvhvend) {
1512 xpvhv->xhv_array = (char*)(xpvhv + 1);
1515 xpvhv->xhv_array = 0;
1518 /* grab a new struct xpvmg from the free list, allocating more if necessary */
1527 xpvmg = PL_xpvmg_root;
1528 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
1533 /* return a struct xpvmg to the free list */
1536 S_del_xpvmg(pTHX_ XPVMG *p)
1539 p->xpv_pv = (char*)PL_xpvmg_root;
1544 /* allocate another arena's worth of struct xpvmg */
1549 register XPVMG* xpvmg;
1550 register XPVMG* xpvmgend;
1551 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
1552 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
1553 PL_xpvmg_arenaroot = xpvmg;
1555 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
1556 PL_xpvmg_root = ++xpvmg;
1557 while (xpvmg < xpvmgend) {
1558 xpvmg->xpv_pv = (char*)(xpvmg + 1);
1564 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1573 xpvlv = PL_xpvlv_root;
1574 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
1579 /* return a struct xpvlv to the free list */
1582 S_del_xpvlv(pTHX_ XPVLV *p)
1585 p->xpv_pv = (char*)PL_xpvlv_root;
1590 /* allocate another arena's worth of struct xpvlv */
1595 register XPVLV* xpvlv;
1596 register XPVLV* xpvlvend;
1597 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
1598 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
1599 PL_xpvlv_arenaroot = xpvlv;
1601 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
1602 PL_xpvlv_root = ++xpvlv;
1603 while (xpvlv < xpvlvend) {
1604 xpvlv->xpv_pv = (char*)(xpvlv + 1);
1610 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1619 xpvbm = PL_xpvbm_root;
1620 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
1625 /* return a struct xpvbm to the free list */
1628 S_del_xpvbm(pTHX_ XPVBM *p)
1631 p->xpv_pv = (char*)PL_xpvbm_root;
1636 /* allocate another arena's worth of struct xpvbm */
1641 register XPVBM* xpvbm;
1642 register XPVBM* xpvbmend;
1643 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
1644 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
1645 PL_xpvbm_arenaroot = xpvbm;
1647 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
1648 PL_xpvbm_root = ++xpvbm;
1649 while (xpvbm < xpvbmend) {
1650 xpvbm->xpv_pv = (char*)(xpvbm + 1);
1656 #define my_safemalloc(s) (void*)safemalloc(s)
1657 #define my_safefree(p) safefree((char*)p)
1661 #define new_XIV() my_safemalloc(sizeof(XPVIV))
1662 #define del_XIV(p) my_safefree(p)
1664 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1665 #define del_XNV(p) my_safefree(p)
1667 #define new_XRV() my_safemalloc(sizeof(XRV))
1668 #define del_XRV(p) my_safefree(p)
1670 #define new_XPV() my_safemalloc(sizeof(XPV))
1671 #define del_XPV(p) my_safefree(p)
1673 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1674 #define del_XPVIV(p) my_safefree(p)
1676 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1677 #define del_XPVNV(p) my_safefree(p)
1679 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1680 #define del_XPVCV(p) my_safefree(p)
1682 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1683 #define del_XPVAV(p) my_safefree(p)
1685 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1686 #define del_XPVHV(p) my_safefree(p)
1688 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1689 #define del_XPVMG(p) my_safefree(p)
1691 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1692 #define del_XPVLV(p) my_safefree(p)
1694 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1695 #define del_XPVBM(p) my_safefree(p)
1699 #define new_XIV() (void*)new_xiv()
1700 #define del_XIV(p) del_xiv((XPVIV*) p)
1702 #define new_XNV() (void*)new_xnv()
1703 #define del_XNV(p) del_xnv((XPVNV*) p)
1705 #define new_XRV() (void*)new_xrv()
1706 #define del_XRV(p) del_xrv((XRV*) p)
1708 #define new_XPV() (void*)new_xpv()
1709 #define del_XPV(p) del_xpv((XPV *)p)
1711 #define new_XPVIV() (void*)new_xpviv()
1712 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
1714 #define new_XPVNV() (void*)new_xpvnv()
1715 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
1717 #define new_XPVCV() (void*)new_xpvcv()
1718 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
1720 #define new_XPVAV() (void*)new_xpvav()
1721 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
1723 #define new_XPVHV() (void*)new_xpvhv()
1724 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
1726 #define new_XPVMG() (void*)new_xpvmg()
1727 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
1729 #define new_XPVLV() (void*)new_xpvlv()
1730 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
1732 #define new_XPVBM() (void*)new_xpvbm()
1733 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
1737 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1738 #define del_XPVGV(p) my_safefree(p)
1740 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1741 #define del_XPVFM(p) my_safefree(p)
1743 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1744 #define del_XPVIO(p) my_safefree(p)
1747 =for apidoc sv_upgrade
1749 Upgrade an SV to a more complex form. Generally adds a new body type to the
1750 SV, then copies across as much information as possible from the old body.
1751 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1757 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1764 MAGIC* magic = NULL;
1767 if (mt != SVt_PV && SvIsCOW(sv)) {
1768 sv_force_normal_flags(sv, 0);
1771 if (SvTYPE(sv) == mt)
1775 (void)SvOOK_off(sv);
1777 switch (SvTYPE(sv)) {
1798 else if (mt < SVt_PVIV)
1815 pv = (char*)SvRV(sv);
1835 else if (mt == SVt_NV)
1846 del_XPVIV(SvANY(sv));
1856 del_XPVNV(SvANY(sv));
1864 magic = SvMAGIC(sv);
1865 stash = SvSTASH(sv);
1866 del_XPVMG(SvANY(sv));
1869 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1872 SvFLAGS(sv) &= ~SVTYPEMASK;
1877 Perl_croak(aTHX_ "Can't upgrade to undef");
1879 SvANY(sv) = new_XIV();
1883 SvANY(sv) = new_XNV();
1887 SvANY(sv) = new_XRV();
1891 SvANY(sv) = new_XPV();
1897 SvANY(sv) = new_XPVIV();
1907 SvANY(sv) = new_XPVNV();
1915 SvANY(sv) = new_XPVMG();
1921 SvMAGIC(sv) = magic;
1922 SvSTASH(sv) = stash;
1925 SvANY(sv) = new_XPVLV();
1931 SvMAGIC(sv) = magic;
1932 SvSTASH(sv) = stash;
1944 SvANY(sv) = new_XPVAV();
1952 SvMAGIC(sv) = magic;
1953 SvSTASH(sv) = stash;
1959 SvANY(sv) = new_XPVHV();
1965 HvTOTALKEYS(sv) = 0;
1966 HvPLACEHOLDERS(sv) = 0;
1967 SvMAGIC(sv) = magic;
1968 SvSTASH(sv) = stash;
1975 SvANY(sv) = new_XPVCV();
1976 Zero(SvANY(sv), 1, XPVCV);
1982 SvMAGIC(sv) = magic;
1983 SvSTASH(sv) = stash;
1986 SvANY(sv) = new_XPVGV();
1992 SvMAGIC(sv) = magic;
1993 SvSTASH(sv) = stash;
2001 SvANY(sv) = new_XPVBM();
2007 SvMAGIC(sv) = magic;
2008 SvSTASH(sv) = stash;
2014 SvANY(sv) = new_XPVFM();
2015 Zero(SvANY(sv), 1, XPVFM);
2021 SvMAGIC(sv) = magic;
2022 SvSTASH(sv) = stash;
2025 SvANY(sv) = new_XPVIO();
2026 Zero(SvANY(sv), 1, XPVIO);
2032 SvMAGIC(sv) = magic;
2033 SvSTASH(sv) = stash;
2034 IoPAGE_LEN(sv) = 60;
2041 =for apidoc sv_backoff
2043 Remove any string offset. You should normally use the C<SvOOK_off> macro
2050 Perl_sv_backoff(pTHX_ register SV *sv)
2054 char *s = SvPVX(sv);
2055 SvLEN(sv) += SvIVX(sv);
2056 SvPVX(sv) -= SvIVX(sv);
2058 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
2060 SvFLAGS(sv) &= ~SVf_OOK;
2067 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
2068 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
2069 Use the C<SvGROW> wrapper instead.
2075 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
2079 #ifdef HAS_64K_LIMIT
2080 if (newlen >= 0x10000) {
2081 PerlIO_printf(Perl_debug_log,
2082 "Allocation too large: %"UVxf"\n", (UV)newlen);
2085 #endif /* HAS_64K_LIMIT */
2088 if (SvTYPE(sv) < SVt_PV) {
2089 sv_upgrade(sv, SVt_PV);
2092 else if (SvOOK(sv)) { /* pv is offset? */
2095 if (newlen > SvLEN(sv))
2096 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
2097 #ifdef HAS_64K_LIMIT
2098 if (newlen >= 0x10000)
2105 if (newlen > SvLEN(sv)) { /* need more room? */
2106 if (SvLEN(sv) && s) {
2108 STRLEN l = malloced_size((void*)SvPVX(sv));
2114 Renew(s,newlen,char);
2117 New(703, s, newlen, char);
2118 if (SvPVX(sv) && SvCUR(sv)) {
2119 Move(SvPVX(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
2123 SvLEN_set(sv, newlen);
2129 =for apidoc sv_setiv
2131 Copies an integer into the given SV, upgrading first if necessary.
2132 Does not handle 'set' magic. See also C<sv_setiv_mg>.
2138 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
2140 SV_CHECK_THINKFIRST_COW_DROP(sv);
2141 switch (SvTYPE(sv)) {
2143 sv_upgrade(sv, SVt_IV);
2146 sv_upgrade(sv, SVt_PVNV);
2150 sv_upgrade(sv, SVt_PVIV);
2159 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
2162 (void)SvIOK_only(sv); /* validate number */
2168 =for apidoc sv_setiv_mg
2170 Like C<sv_setiv>, but also handles 'set' magic.
2176 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
2183 =for apidoc sv_setuv
2185 Copies an unsigned integer into the given SV, upgrading first if necessary.
2186 Does not handle 'set' magic. See also C<sv_setuv_mg>.
2192 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
2194 /* With these two if statements:
2195 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
2198 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
2200 If you wish to remove them, please benchmark to see what the effect is
2202 if (u <= (UV)IV_MAX) {
2203 sv_setiv(sv, (IV)u);
2212 =for apidoc sv_setuv_mg
2214 Like C<sv_setuv>, but also handles 'set' magic.
2220 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
2222 /* With these two if statements:
2223 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
2226 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
2228 If you wish to remove them, please benchmark to see what the effect is
2230 if (u <= (UV)IV_MAX) {
2231 sv_setiv(sv, (IV)u);
2241 =for apidoc sv_setnv
2243 Copies a double into the given SV, upgrading first if necessary.
2244 Does not handle 'set' magic. See also C<sv_setnv_mg>.
2250 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
2252 SV_CHECK_THINKFIRST_COW_DROP(sv);
2253 switch (SvTYPE(sv)) {
2256 sv_upgrade(sv, SVt_NV);
2261 sv_upgrade(sv, SVt_PVNV);
2270 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
2274 (void)SvNOK_only(sv); /* validate number */
2279 =for apidoc sv_setnv_mg
2281 Like C<sv_setnv>, but also handles 'set' magic.
2287 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
2293 /* Print an "isn't numeric" warning, using a cleaned-up,
2294 * printable version of the offending string
2298 S_not_a_number(pTHX_ SV *sv)
2305 dsv = sv_2mortal(newSVpv("", 0));
2306 pv = sv_uni_display(dsv, sv, 10, 0);
2309 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
2310 /* each *s can expand to 4 chars + "...\0",
2311 i.e. need room for 8 chars */
2314 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
2316 if (ch & 128 && !isPRINT_LC(ch)) {
2325 else if (ch == '\r') {
2329 else if (ch == '\f') {
2333 else if (ch == '\\') {
2337 else if (ch == '\0') {
2341 else if (isPRINT_LC(ch))
2358 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2359 "Argument \"%s\" isn't numeric in %s", pv,
2362 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2363 "Argument \"%s\" isn't numeric", pv);
2367 =for apidoc looks_like_number
2369 Test if the content of an SV looks like a number (or is a number).
2370 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
2371 non-numeric warning), even if your atof() doesn't grok them.
2377 Perl_looks_like_number(pTHX_ SV *sv)
2379 register char *sbegin;
2386 else if (SvPOKp(sv))
2387 sbegin = SvPV(sv, len);
2389 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
2390 return grok_number(sbegin, len, NULL);
2393 /* Actually, ISO C leaves conversion of UV to IV undefined, but
2394 until proven guilty, assume that things are not that bad... */
2399 As 64 bit platforms often have an NV that doesn't preserve all bits of
2400 an IV (an assumption perl has been based on to date) it becomes necessary
2401 to remove the assumption that the NV always carries enough precision to
2402 recreate the IV whenever needed, and that the NV is the canonical form.
2403 Instead, IV/UV and NV need to be given equal rights. So as to not lose
2404 precision as a side effect of conversion (which would lead to insanity
2405 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
2406 1) to distinguish between IV/UV/NV slots that have cached a valid
2407 conversion where precision was lost and IV/UV/NV slots that have a
2408 valid conversion which has lost no precision
2409 2) to ensure that if a numeric conversion to one form is requested that
2410 would lose precision, the precise conversion (or differently
2411 imprecise conversion) is also performed and cached, to prevent
2412 requests for different numeric formats on the same SV causing
2413 lossy conversion chains. (lossless conversion chains are perfectly
2418 SvIOKp is true if the IV slot contains a valid value
2419 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
2420 SvNOKp is true if the NV slot contains a valid value
2421 SvNOK is true only if the NV value is accurate
2424 while converting from PV to NV, check to see if converting that NV to an
2425 IV(or UV) would lose accuracy over a direct conversion from PV to
2426 IV(or UV). If it would, cache both conversions, return NV, but mark
2427 SV as IOK NOKp (ie not NOK).
2429 While converting from PV to IV, check to see if converting that IV to an
2430 NV would lose accuracy over a direct conversion from PV to NV. If it
2431 would, cache both conversions, flag similarly.
2433 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2434 correctly because if IV & NV were set NV *always* overruled.
2435 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2436 changes - now IV and NV together means that the two are interchangeable:
2437 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2439 The benefit of this is that operations such as pp_add know that if
2440 SvIOK is true for both left and right operands, then integer addition
2441 can be used instead of floating point (for cases where the result won't
2442 overflow). Before, floating point was always used, which could lead to
2443 loss of precision compared with integer addition.
2445 * making IV and NV equal status should make maths accurate on 64 bit
2447 * may speed up maths somewhat if pp_add and friends start to use
2448 integers when possible instead of fp. (Hopefully the overhead in
2449 looking for SvIOK and checking for overflow will not outweigh the
2450 fp to integer speedup)
2451 * will slow down integer operations (callers of SvIV) on "inaccurate"
2452 values, as the change from SvIOK to SvIOKp will cause a call into
2453 sv_2iv each time rather than a macro access direct to the IV slot
2454 * should speed up number->string conversion on integers as IV is
2455 favoured when IV and NV are equally accurate
2457 ####################################################################
2458 You had better be using SvIOK_notUV if you want an IV for arithmetic:
2459 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2460 On the other hand, SvUOK is true iff UV.
2461 ####################################################################
2463 Your mileage will vary depending your CPU's relative fp to integer
2467 #ifndef NV_PRESERVES_UV
2468 # define IS_NUMBER_UNDERFLOW_IV 1
2469 # define IS_NUMBER_UNDERFLOW_UV 2
2470 # define IS_NUMBER_IV_AND_UV 2
2471 # define IS_NUMBER_OVERFLOW_IV 4
2472 # define IS_NUMBER_OVERFLOW_UV 5
2474 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2476 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2478 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2480 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));
2481 if (SvNVX(sv) < (NV)IV_MIN) {
2482 (void)SvIOKp_on(sv);
2485 return IS_NUMBER_UNDERFLOW_IV;
2487 if (SvNVX(sv) > (NV)UV_MAX) {
2488 (void)SvIOKp_on(sv);
2492 return IS_NUMBER_OVERFLOW_UV;
2494 (void)SvIOKp_on(sv);
2496 /* Can't use strtol etc to convert this string. (See truth table in
2498 if (SvNVX(sv) <= (UV)IV_MAX) {
2499 SvIVX(sv) = I_V(SvNVX(sv));
2500 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2501 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2503 /* Integer is imprecise. NOK, IOKp */
2505 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2508 SvUVX(sv) = U_V(SvNVX(sv));
2509 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2510 if (SvUVX(sv) == UV_MAX) {
2511 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2512 possibly be preserved by NV. Hence, it must be overflow.
2514 return IS_NUMBER_OVERFLOW_UV;
2516 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2518 /* Integer is imprecise. NOK, IOKp */
2520 return IS_NUMBER_OVERFLOW_IV;
2522 #endif /* !NV_PRESERVES_UV*/
2524 /* sv_2iv() is now a macro using Perl_sv_2iv_flags();
2525 * this function provided for binary compatibility only
2529 Perl_sv_2iv(pTHX_ register SV *sv)
2531 return sv_2iv_flags(sv, SV_GMAGIC);
2535 =for apidoc sv_2iv_flags
2537 Return the integer value of an SV, doing any necessary string
2538 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2539 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2545 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2549 if (SvGMAGICAL(sv)) {
2550 if (flags & SV_GMAGIC)
2555 return I_V(SvNVX(sv));
2557 if (SvPOKp(sv) && SvLEN(sv))
2560 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2561 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2567 if (SvTHINKFIRST(sv)) {
2570 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2571 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2572 return SvIV(tmpstr);
2573 return PTR2IV(SvRV(sv));
2576 sv_force_normal_flags(sv, 0);
2578 if (SvREADONLY(sv) && !SvOK(sv)) {
2579 if (ckWARN(WARN_UNINITIALIZED))
2586 return (IV)(SvUVX(sv));
2593 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2594 * without also getting a cached IV/UV from it at the same time
2595 * (ie PV->NV conversion should detect loss of accuracy and cache
2596 * IV or UV at same time to avoid this. NWC */
2598 if (SvTYPE(sv) == SVt_NV)
2599 sv_upgrade(sv, SVt_PVNV);
2601 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2602 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2603 certainly cast into the IV range at IV_MAX, whereas the correct
2604 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2606 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2607 SvIVX(sv) = I_V(SvNVX(sv));
2608 if (SvNVX(sv) == (NV) SvIVX(sv)
2609 #ifndef NV_PRESERVES_UV
2610 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2611 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2612 /* Don't flag it as "accurately an integer" if the number
2613 came from a (by definition imprecise) NV operation, and
2614 we're outside the range of NV integer precision */
2617 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2618 DEBUG_c(PerlIO_printf(Perl_debug_log,
2619 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2625 /* IV not precise. No need to convert from PV, as NV
2626 conversion would already have cached IV if it detected
2627 that PV->IV would be better than PV->NV->IV
2628 flags already correct - don't set public IOK. */
2629 DEBUG_c(PerlIO_printf(Perl_debug_log,
2630 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2635 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2636 but the cast (NV)IV_MIN rounds to a the value less (more
2637 negative) than IV_MIN which happens to be equal to SvNVX ??
2638 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2639 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2640 (NV)UVX == NVX are both true, but the values differ. :-(
2641 Hopefully for 2s complement IV_MIN is something like
2642 0x8000000000000000 which will be exact. NWC */
2645 SvUVX(sv) = U_V(SvNVX(sv));
2647 (SvNVX(sv) == (NV) SvUVX(sv))
2648 #ifndef NV_PRESERVES_UV
2649 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2650 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2651 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2652 /* Don't flag it as "accurately an integer" if the number
2653 came from a (by definition imprecise) NV operation, and
2654 we're outside the range of NV integer precision */
2660 DEBUG_c(PerlIO_printf(Perl_debug_log,
2661 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2665 return (IV)SvUVX(sv);
2668 else if (SvPOKp(sv) && SvLEN(sv)) {
2670 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2671 /* We want to avoid a possible problem when we cache an IV which
2672 may be later translated to an NV, and the resulting NV is not
2673 the same as the direct translation of the initial string
2674 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2675 be careful to ensure that the value with the .456 is around if the
2676 NV value is requested in the future).
2678 This means that if we cache such an IV, we need to cache the
2679 NV as well. Moreover, we trade speed for space, and do not
2680 cache the NV if we are sure it's not needed.
2683 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2684 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2685 == IS_NUMBER_IN_UV) {
2686 /* It's definitely an integer, only upgrade to PVIV */
2687 if (SvTYPE(sv) < SVt_PVIV)
2688 sv_upgrade(sv, SVt_PVIV);
2690 } else if (SvTYPE(sv) < SVt_PVNV)
2691 sv_upgrade(sv, SVt_PVNV);
2693 /* If NV preserves UV then we only use the UV value if we know that
2694 we aren't going to call atof() below. If NVs don't preserve UVs
2695 then the value returned may have more precision than atof() will
2696 return, even though value isn't perfectly accurate. */
2697 if ((numtype & (IS_NUMBER_IN_UV
2698 #ifdef NV_PRESERVES_UV
2701 )) == IS_NUMBER_IN_UV) {
2702 /* This won't turn off the public IOK flag if it was set above */
2703 (void)SvIOKp_on(sv);
2705 if (!(numtype & IS_NUMBER_NEG)) {
2707 if (value <= (UV)IV_MAX) {
2708 SvIVX(sv) = (IV)value;
2714 /* 2s complement assumption */
2715 if (value <= (UV)IV_MIN) {
2716 SvIVX(sv) = -(IV)value;
2718 /* Too negative for an IV. This is a double upgrade, but
2719 I'm assuming it will be rare. */
2720 if (SvTYPE(sv) < SVt_PVNV)
2721 sv_upgrade(sv, SVt_PVNV);
2725 SvNVX(sv) = -(NV)value;
2730 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2731 will be in the previous block to set the IV slot, and the next
2732 block to set the NV slot. So no else here. */
2734 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2735 != IS_NUMBER_IN_UV) {
2736 /* It wasn't an (integer that doesn't overflow the UV). */
2737 SvNVX(sv) = Atof(SvPVX(sv));
2739 if (! numtype && ckWARN(WARN_NUMERIC))
2742 #if defined(USE_LONG_DOUBLE)
2743 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2744 PTR2UV(sv), SvNVX(sv)));
2746 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2747 PTR2UV(sv), SvNVX(sv)));
2751 #ifdef NV_PRESERVES_UV
2752 (void)SvIOKp_on(sv);
2754 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2755 SvIVX(sv) = I_V(SvNVX(sv));
2756 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2759 /* Integer is imprecise. NOK, IOKp */
2761 /* UV will not work better than IV */
2763 if (SvNVX(sv) > (NV)UV_MAX) {
2765 /* Integer is inaccurate. NOK, IOKp, is UV */
2769 SvUVX(sv) = U_V(SvNVX(sv));
2770 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2771 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2775 /* Integer is imprecise. NOK, IOKp, is UV */
2781 #else /* NV_PRESERVES_UV */
2782 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2783 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2784 /* The IV slot will have been set from value returned by
2785 grok_number above. The NV slot has just been set using
2788 assert (SvIOKp(sv));
2790 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2791 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2792 /* Small enough to preserve all bits. */
2793 (void)SvIOKp_on(sv);
2795 SvIVX(sv) = I_V(SvNVX(sv));
2796 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2798 /* Assumption: first non-preserved integer is < IV_MAX,
2799 this NV is in the preserved range, therefore: */
2800 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2802 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);
2806 0 0 already failed to read UV.
2807 0 1 already failed to read UV.
2808 1 0 you won't get here in this case. IV/UV
2809 slot set, public IOK, Atof() unneeded.
2810 1 1 already read UV.
2811 so there's no point in sv_2iuv_non_preserve() attempting
2812 to use atol, strtol, strtoul etc. */
2813 if (sv_2iuv_non_preserve (sv, numtype)
2814 >= IS_NUMBER_OVERFLOW_IV)
2818 #endif /* NV_PRESERVES_UV */
2821 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2823 if (SvTYPE(sv) < SVt_IV)
2824 /* Typically the caller expects that sv_any is not NULL now. */
2825 sv_upgrade(sv, SVt_IV);
2828 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2829 PTR2UV(sv),SvIVX(sv)));
2830 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2833 /* sv_2uv() is now a macro using Perl_sv_2uv_flags();
2834 * this function provided for binary compatibility only
2838 Perl_sv_2uv(pTHX_ register SV *sv)
2840 return sv_2uv_flags(sv, SV_GMAGIC);
2844 =for apidoc sv_2uv_flags
2846 Return the unsigned integer value of an SV, doing any necessary string
2847 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2848 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2854 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2858 if (SvGMAGICAL(sv)) {
2859 if (flags & SV_GMAGIC)
2864 return U_V(SvNVX(sv));
2865 if (SvPOKp(sv) && SvLEN(sv))
2868 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2869 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2875 if (SvTHINKFIRST(sv)) {
2878 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2879 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2880 return SvUV(tmpstr);
2881 return PTR2UV(SvRV(sv));
2884 sv_force_normal_flags(sv, 0);
2886 if (SvREADONLY(sv) && !SvOK(sv)) {
2887 if (ckWARN(WARN_UNINITIALIZED))
2897 return (UV)SvIVX(sv);
2901 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2902 * without also getting a cached IV/UV from it at the same time
2903 * (ie PV->NV conversion should detect loss of accuracy and cache
2904 * IV or UV at same time to avoid this. */
2905 /* IV-over-UV optimisation - choose to cache IV if possible */
2907 if (SvTYPE(sv) == SVt_NV)
2908 sv_upgrade(sv, SVt_PVNV);
2910 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2911 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2912 SvIVX(sv) = I_V(SvNVX(sv));
2913 if (SvNVX(sv) == (NV) SvIVX(sv)
2914 #ifndef NV_PRESERVES_UV
2915 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2916 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2917 /* Don't flag it as "accurately an integer" if the number
2918 came from a (by definition imprecise) NV operation, and
2919 we're outside the range of NV integer precision */
2922 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2923 DEBUG_c(PerlIO_printf(Perl_debug_log,
2924 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2930 /* IV not precise. No need to convert from PV, as NV
2931 conversion would already have cached IV if it detected
2932 that PV->IV would be better than PV->NV->IV
2933 flags already correct - don't set public IOK. */
2934 DEBUG_c(PerlIO_printf(Perl_debug_log,
2935 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2940 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2941 but the cast (NV)IV_MIN rounds to a the value less (more
2942 negative) than IV_MIN which happens to be equal to SvNVX ??
2943 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2944 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2945 (NV)UVX == NVX are both true, but the values differ. :-(
2946 Hopefully for 2s complement IV_MIN is something like
2947 0x8000000000000000 which will be exact. NWC */
2950 SvUVX(sv) = U_V(SvNVX(sv));
2952 (SvNVX(sv) == (NV) SvUVX(sv))
2953 #ifndef NV_PRESERVES_UV
2954 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2955 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2956 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2957 /* Don't flag it as "accurately an integer" if the number
2958 came from a (by definition imprecise) NV operation, and
2959 we're outside the range of NV integer precision */
2964 DEBUG_c(PerlIO_printf(Perl_debug_log,
2965 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2971 else if (SvPOKp(sv) && SvLEN(sv)) {
2973 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2975 /* We want to avoid a possible problem when we cache a UV which
2976 may be later translated to an NV, and the resulting NV is not
2977 the translation of the initial data.
2979 This means that if we cache such a UV, we need to cache the
2980 NV as well. Moreover, we trade speed for space, and do not
2981 cache the NV if not needed.
2984 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2985 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2986 == IS_NUMBER_IN_UV) {
2987 /* It's definitely an integer, only upgrade to PVIV */
2988 if (SvTYPE(sv) < SVt_PVIV)
2989 sv_upgrade(sv, SVt_PVIV);
2991 } else if (SvTYPE(sv) < SVt_PVNV)
2992 sv_upgrade(sv, SVt_PVNV);
2994 /* If NV preserves UV then we only use the UV value if we know that
2995 we aren't going to call atof() below. If NVs don't preserve UVs
2996 then the value returned may have more precision than atof() will
2997 return, even though it isn't accurate. */
2998 if ((numtype & (IS_NUMBER_IN_UV
2999 #ifdef NV_PRESERVES_UV
3002 )) == IS_NUMBER_IN_UV) {
3003 /* This won't turn off the public IOK flag if it was set above */
3004 (void)SvIOKp_on(sv);
3006 if (!(numtype & IS_NUMBER_NEG)) {
3008 if (value <= (UV)IV_MAX) {
3009 SvIVX(sv) = (IV)value;
3011 /* it didn't overflow, and it was positive. */
3016 /* 2s complement assumption */
3017 if (value <= (UV)IV_MIN) {
3018 SvIVX(sv) = -(IV)value;
3020 /* Too negative for an IV. This is a double upgrade, but
3021 I'm assuming it will be rare. */
3022 if (SvTYPE(sv) < SVt_PVNV)
3023 sv_upgrade(sv, SVt_PVNV);
3027 SvNVX(sv) = -(NV)value;
3033 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3034 != IS_NUMBER_IN_UV) {
3035 /* It wasn't an integer, or it overflowed the UV. */
3036 SvNVX(sv) = Atof(SvPVX(sv));
3038 if (! numtype && ckWARN(WARN_NUMERIC))
3041 #if defined(USE_LONG_DOUBLE)
3042 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
3043 PTR2UV(sv), SvNVX(sv)));
3045 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
3046 PTR2UV(sv), SvNVX(sv)));
3049 #ifdef NV_PRESERVES_UV
3050 (void)SvIOKp_on(sv);
3052 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
3053 SvIVX(sv) = I_V(SvNVX(sv));
3054 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
3057 /* Integer is imprecise. NOK, IOKp */
3059 /* UV will not work better than IV */
3061 if (SvNVX(sv) > (NV)UV_MAX) {
3063 /* Integer is inaccurate. NOK, IOKp, is UV */
3067 SvUVX(sv) = U_V(SvNVX(sv));
3068 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
3069 NV preservse UV so can do correct comparison. */
3070 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
3074 /* Integer is imprecise. NOK, IOKp, is UV */
3079 #else /* NV_PRESERVES_UV */
3080 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3081 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
3082 /* The UV slot will have been set from value returned by
3083 grok_number above. The NV slot has just been set using
3086 assert (SvIOKp(sv));
3088 if (((UV)1 << NV_PRESERVES_UV_BITS) >
3089 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
3090 /* Small enough to preserve all bits. */
3091 (void)SvIOKp_on(sv);
3093 SvIVX(sv) = I_V(SvNVX(sv));
3094 if ((NV)(SvIVX(sv)) == SvNVX(sv))
3096 /* Assumption: first non-preserved integer is < IV_MAX,
3097 this NV is in the preserved range, therefore: */
3098 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
3100 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);
3103 sv_2iuv_non_preserve (sv, numtype);
3105 #endif /* NV_PRESERVES_UV */
3109 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3110 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3113 if (SvTYPE(sv) < SVt_IV)
3114 /* Typically the caller expects that sv_any is not NULL now. */
3115 sv_upgrade(sv, SVt_IV);
3119 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
3120 PTR2UV(sv),SvUVX(sv)));
3121 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
3127 Return the num value of an SV, doing any necessary string or integer
3128 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
3135 Perl_sv_2nv(pTHX_ register SV *sv)
3139 if (SvGMAGICAL(sv)) {
3143 if (SvPOKp(sv) && SvLEN(sv)) {
3144 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
3145 !grok_number(SvPVX(sv), SvCUR(sv), NULL))
3147 return Atof(SvPVX(sv));
3151 return (NV)SvUVX(sv);
3153 return (NV)SvIVX(sv);
3156 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3157 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3163 if (SvTHINKFIRST(sv)) {
3166 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
3167 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
3168 return SvNV(tmpstr);
3169 return PTR2NV(SvRV(sv));
3172 sv_force_normal_flags(sv, 0);
3174 if (SvREADONLY(sv) && !SvOK(sv)) {
3175 if (ckWARN(WARN_UNINITIALIZED))
3180 if (SvTYPE(sv) < SVt_NV) {
3181 if (SvTYPE(sv) == SVt_IV)
3182 sv_upgrade(sv, SVt_PVNV);
3184 sv_upgrade(sv, SVt_NV);
3185 #ifdef USE_LONG_DOUBLE
3187 STORE_NUMERIC_LOCAL_SET_STANDARD();
3188 PerlIO_printf(Perl_debug_log,
3189 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
3190 PTR2UV(sv), SvNVX(sv));
3191 RESTORE_NUMERIC_LOCAL();
3195 STORE_NUMERIC_LOCAL_SET_STANDARD();
3196 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
3197 PTR2UV(sv), SvNVX(sv));
3198 RESTORE_NUMERIC_LOCAL();
3202 else if (SvTYPE(sv) < SVt_PVNV)
3203 sv_upgrade(sv, SVt_PVNV);
3208 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
3209 #ifdef NV_PRESERVES_UV
3212 /* Only set the public NV OK flag if this NV preserves the IV */
3213 /* Check it's not 0xFFFFFFFFFFFFFFFF */
3214 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
3215 : (SvIVX(sv) == I_V(SvNVX(sv))))
3221 else if (SvPOKp(sv) && SvLEN(sv)) {
3223 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3224 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
3226 #ifdef NV_PRESERVES_UV
3227 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3228 == IS_NUMBER_IN_UV) {
3229 /* It's definitely an integer */
3230 SvNVX(sv) = (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value;
3232 SvNVX(sv) = Atof(SvPVX(sv));
3235 SvNVX(sv) = Atof(SvPVX(sv));
3236 /* Only set the public NV OK flag if this NV preserves the value in
3237 the PV at least as well as an IV/UV would.
3238 Not sure how to do this 100% reliably. */
3239 /* if that shift count is out of range then Configure's test is
3240 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
3242 if (((UV)1 << NV_PRESERVES_UV_BITS) >
3243 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
3244 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
3245 } else if (!(numtype & IS_NUMBER_IN_UV)) {
3246 /* Can't use strtol etc to convert this string, so don't try.
3247 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
3250 /* value has been set. It may not be precise. */
3251 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
3252 /* 2s complement assumption for (UV)IV_MIN */
3253 SvNOK_on(sv); /* Integer is too negative. */
3258 if (numtype & IS_NUMBER_NEG) {
3259 SvIVX(sv) = -(IV)value;
3260 } else if (value <= (UV)IV_MAX) {
3261 SvIVX(sv) = (IV)value;
3267 if (numtype & IS_NUMBER_NOT_INT) {
3268 /* I believe that even if the original PV had decimals,
3269 they are lost beyond the limit of the FP precision.
3270 However, neither is canonical, so both only get p
3271 flags. NWC, 2000/11/25 */
3272 /* Both already have p flags, so do nothing */
3275 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
3276 if (SvIVX(sv) == I_V(nv)) {
3281 /* It had no "." so it must be integer. */
3284 /* between IV_MAX and NV(UV_MAX).
3285 Could be slightly > UV_MAX */
3287 if (numtype & IS_NUMBER_NOT_INT) {
3288 /* UV and NV both imprecise. */
3290 UV nv_as_uv = U_V(nv);
3292 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
3303 #endif /* NV_PRESERVES_UV */
3306 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3308 if (SvTYPE(sv) < SVt_NV)
3309 /* Typically the caller expects that sv_any is not NULL now. */
3310 /* XXX Ilya implies that this is a bug in callers that assume this
3311 and ideally should be fixed. */
3312 sv_upgrade(sv, SVt_NV);
3315 #if defined(USE_LONG_DOUBLE)
3317 STORE_NUMERIC_LOCAL_SET_STANDARD();
3318 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
3319 PTR2UV(sv), SvNVX(sv));
3320 RESTORE_NUMERIC_LOCAL();
3324 STORE_NUMERIC_LOCAL_SET_STANDARD();
3325 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
3326 PTR2UV(sv), SvNVX(sv));
3327 RESTORE_NUMERIC_LOCAL();
3333 /* asIV(): extract an integer from the string value of an SV.
3334 * Caller must validate PVX */
3337 S_asIV(pTHX_ SV *sv)
3340 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3342 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3343 == IS_NUMBER_IN_UV) {
3344 /* It's definitely an integer */
3345 if (numtype & IS_NUMBER_NEG) {
3346 if (value < (UV)IV_MIN)
3349 if (value < (UV)IV_MAX)
3354 if (ckWARN(WARN_NUMERIC))
3357 return I_V(Atof(SvPVX(sv)));
3360 /* asUV(): extract an unsigned integer from the string value of an SV
3361 * Caller must validate PVX */
3364 S_asUV(pTHX_ SV *sv)
3367 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3369 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3370 == IS_NUMBER_IN_UV) {
3371 /* It's definitely an integer */
3372 if (!(numtype & IS_NUMBER_NEG))
3376 if (ckWARN(WARN_NUMERIC))
3379 return U_V(Atof(SvPVX(sv)));
3383 =for apidoc sv_2pv_nolen
3385 Like C<sv_2pv()>, but doesn't return the length too. You should usually
3386 use the macro wrapper C<SvPV_nolen(sv)> instead.
3391 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
3394 return sv_2pv(sv, &n_a);
3397 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
3398 * UV as a string towards the end of buf, and return pointers to start and
3401 * We assume that buf is at least TYPE_CHARS(UV) long.
3405 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
3407 char *ptr = buf + TYPE_CHARS(UV);
3421 *--ptr = '0' + (char)(uv % 10);
3429 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
3430 * this function provided for binary compatibility only
3434 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
3436 return sv_2pv_flags(sv, lp, SV_GMAGIC);
3440 =for apidoc sv_2pv_flags
3442 Returns a pointer to the string value of an SV, and sets *lp to its length.
3443 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
3445 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
3446 usually end up here too.
3452 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
3457 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
3458 char *tmpbuf = tbuf;
3464 if (SvGMAGICAL(sv)) {
3465 if (flags & SV_GMAGIC)
3473 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
3475 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
3480 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
3485 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3486 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3493 if (SvTHINKFIRST(sv)) {
3496 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3497 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3498 char *pv = SvPV(tmpstr, *lp);
3512 switch (SvTYPE(sv)) {
3514 if ( ((SvFLAGS(sv) &
3515 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3516 == (SVs_OBJECT|SVs_SMG))
3517 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3518 regexp *re = (regexp *)mg->mg_obj;
3521 char *fptr = "msix";
3526 char need_newline = 0;
3527 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3529 while((ch = *fptr++)) {
3531 reflags[left++] = ch;
3534 reflags[right--] = ch;
3539 reflags[left] = '-';
3543 mg->mg_len = re->prelen + 4 + left;
3545 * If /x was used, we have to worry about a regex
3546 * ending with a comment later being embedded
3547 * within another regex. If so, we don't want this
3548 * regex's "commentization" to leak out to the
3549 * right part of the enclosing regex, we must cap
3550 * it with a newline.
3552 * So, if /x was used, we scan backwards from the
3553 * end of the regex. If we find a '#' before we
3554 * find a newline, we need to add a newline
3555 * ourself. If we find a '\n' first (or if we
3556 * don't find '#' or '\n'), we don't need to add
3557 * anything. -jfriedl
3559 if (PMf_EXTENDED & re->reganch)
3561 char *endptr = re->precomp + re->prelen;
3562 while (endptr >= re->precomp)
3564 char c = *(endptr--);
3566 break; /* don't need another */
3568 /* we end while in a comment, so we
3570 mg->mg_len++; /* save space for it */
3571 need_newline = 1; /* note to add it */
3577 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3578 Copy("(?", mg->mg_ptr, 2, char);
3579 Copy(reflags, mg->mg_ptr+2, left, char);
3580 Copy(":", mg->mg_ptr+left+2, 1, char);
3581 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3583 mg->mg_ptr[mg->mg_len - 2] = '\n';
3584 mg->mg_ptr[mg->mg_len - 1] = ')';
3585 mg->mg_ptr[mg->mg_len] = 0;
3587 PL_reginterp_cnt += re->program[0].next_off;
3589 if (re->reganch & ROPT_UTF8)
3604 case SVt_PVBM: if (SvROK(sv))
3607 s = "SCALAR"; break;
3608 case SVt_PVLV: s = SvROK(sv) ? "REF"
3609 /* tied lvalues should appear to be
3610 * scalars for backwards compatitbility */
3611 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3612 ? "SCALAR" : "LVALUE"; break;
3613 case SVt_PVAV: s = "ARRAY"; break;
3614 case SVt_PVHV: s = "HASH"; break;
3615 case SVt_PVCV: s = "CODE"; break;
3616 case SVt_PVGV: s = "GLOB"; break;
3617 case SVt_PVFM: s = "FORMAT"; break;
3618 case SVt_PVIO: s = "IO"; break;
3619 default: s = "UNKNOWN"; break;
3623 if (HvNAME(SvSTASH(sv)))
3624 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
3626 Perl_sv_setpvf(aTHX_ tsv, "__ANON__=%s", s);
3629 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
3635 if (SvREADONLY(sv) && !SvOK(sv)) {
3636 if (ckWARN(WARN_UNINITIALIZED))
3642 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3643 /* I'm assuming that if both IV and NV are equally valid then
3644 converting the IV is going to be more efficient */
3645 U32 isIOK = SvIOK(sv);
3646 U32 isUIOK = SvIsUV(sv);
3647 char buf[TYPE_CHARS(UV)];
3650 if (SvTYPE(sv) < SVt_PVIV)
3651 sv_upgrade(sv, SVt_PVIV);
3653 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3655 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3656 SvGROW(sv, (STRLEN)(ebuf - ptr + 1)); /* inlined from sv_setpvn */
3657 Move(ptr,SvPVX(sv),ebuf - ptr,char);
3658 SvCUR_set(sv, ebuf - ptr);
3668 else if (SvNOKp(sv)) {
3669 if (SvTYPE(sv) < SVt_PVNV)
3670 sv_upgrade(sv, SVt_PVNV);
3671 /* The +20 is pure guesswork. Configure test needed. --jhi */
3672 SvGROW(sv, NV_DIG + 20);
3674 olderrno = errno; /* some Xenix systems wipe out errno here */
3676 if (SvNVX(sv) == 0.0)
3677 (void)strcpy(s,"0");
3681 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3684 #ifdef FIXNEGATIVEZERO
3685 if (*s == '-' && s[1] == '0' && !s[2])
3695 if (ckWARN(WARN_UNINITIALIZED)
3696 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3699 if (SvTYPE(sv) < SVt_PV)
3700 /* Typically the caller expects that sv_any is not NULL now. */
3701 sv_upgrade(sv, SVt_PV);
3704 *lp = s - SvPVX(sv);
3707 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3708 PTR2UV(sv),SvPVX(sv)));
3712 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3713 /* Sneaky stuff here */
3717 tsv = newSVpv(tmpbuf, 0);
3733 len = strlen(tmpbuf);
3735 #ifdef FIXNEGATIVEZERO
3736 if (len == 2 && t[0] == '-' && t[1] == '0') {
3741 (void)SvUPGRADE(sv, SVt_PV);
3743 s = SvGROW(sv, len + 1);
3752 =for apidoc sv_copypv
3754 Copies a stringified representation of the source SV into the
3755 destination SV. Automatically performs any necessary mg_get and
3756 coercion of numeric values into strings. Guaranteed to preserve
3757 UTF-8 flag even from overloaded objects. Similar in nature to
3758 sv_2pv[_flags] but operates directly on an SV instead of just the
3759 string. Mostly uses sv_2pv_flags to do its work, except when that
3760 would lose the UTF-8'ness of the PV.
3766 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3771 sv_setpvn(dsv,s,len);
3779 =for apidoc sv_2pvbyte_nolen
3781 Return a pointer to the byte-encoded representation of the SV.
3782 May cause the SV to be downgraded from UTF-8 as a side-effect.
3784 Usually accessed via the C<SvPVbyte_nolen> macro.
3790 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3793 return sv_2pvbyte(sv, &n_a);
3797 =for apidoc sv_2pvbyte
3799 Return a pointer to the byte-encoded representation of the SV, and set *lp
3800 to its length. May cause the SV to be downgraded from UTF-8 as a
3803 Usually accessed via the C<SvPVbyte> macro.
3809 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3811 sv_utf8_downgrade(sv,0);
3812 return SvPV(sv,*lp);
3816 =for apidoc sv_2pvutf8_nolen
3818 Return a pointer to the UTF-8-encoded representation of the SV.
3819 May cause the SV to be upgraded to UTF-8 as a side-effect.
3821 Usually accessed via the C<SvPVutf8_nolen> macro.
3827 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3830 return sv_2pvutf8(sv, &n_a);
3834 =for apidoc sv_2pvutf8
3836 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3837 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3839 Usually accessed via the C<SvPVutf8> macro.
3845 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3847 sv_utf8_upgrade(sv);
3848 return SvPV(sv,*lp);
3852 =for apidoc sv_2bool
3854 This function is only called on magical items, and is only used by
3855 sv_true() or its macro equivalent.
3861 Perl_sv_2bool(pTHX_ register SV *sv)
3870 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3871 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3872 return (bool)SvTRUE(tmpsv);
3873 return SvRV(sv) != 0;
3876 register XPV* Xpvtmp;
3877 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3878 (*Xpvtmp->xpv_pv > '0' ||
3879 Xpvtmp->xpv_cur > 1 ||
3880 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
3887 return SvIVX(sv) != 0;
3890 return SvNVX(sv) != 0.0;
3897 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3898 * this function provided for binary compatibility only
3903 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3905 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3909 =for apidoc sv_utf8_upgrade
3911 Converts the PV of an SV to its UTF-8-encoded form.
3912 Forces the SV to string form if it is not already.
3913 Always sets the SvUTF8 flag to avoid future validity checks even
3914 if all the bytes have hibit clear.
3916 This is not as a general purpose byte encoding to Unicode interface:
3917 use the Encode extension for that.
3919 =for apidoc sv_utf8_upgrade_flags
3921 Converts the PV of an SV to its UTF-8-encoded form.
3922 Forces the SV to string form if it is not already.
3923 Always sets the SvUTF8 flag to avoid future validity checks even
3924 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3925 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3926 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3928 This is not as a general purpose byte encoding to Unicode interface:
3929 use the Encode extension for that.
3935 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3940 if (sv == &PL_sv_undef)
3944 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3945 (void) sv_2pv_flags(sv,&len, flags);
3949 (void) SvPV_force(sv,len);
3958 sv_force_normal_flags(sv, 0);
3961 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3962 sv_recode_to_utf8(sv, PL_encoding);
3963 else { /* Assume Latin-1/EBCDIC */
3964 /* This function could be much more efficient if we
3965 * had a FLAG in SVs to signal if there are any hibit
3966 * chars in the PV. Given that there isn't such a flag
3967 * make the loop as fast as possible. */
3968 s = (U8 *) SvPVX(sv);
3969 e = (U8 *) SvEND(sv);
3973 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3978 (void)SvOOK_off(sv);
3980 len = SvCUR(sv) + 1; /* Plus the \0 */
3981 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
3982 SvCUR(sv) = len - 1;
3984 Safefree(s); /* No longer using what was there before. */
3985 SvLEN(sv) = len; /* No longer know the real size. */
3987 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3994 =for apidoc sv_utf8_downgrade
3996 Attempts to convert the PV of an SV from characters to bytes.
3997 If the PV contains a character beyond byte, this conversion will fail;
3998 in this case, either returns false or, if C<fail_ok> is not
4001 This is not as a general purpose Unicode to byte encoding interface:
4002 use the Encode extension for that.
4008 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
4010 if (SvPOKp(sv) && SvUTF8(sv)) {
4016 sv_force_normal_flags(sv, 0);
4018 s = (U8 *) SvPV(sv, len);
4019 if (!utf8_to_bytes(s, &len)) {
4024 Perl_croak(aTHX_ "Wide character in %s",
4027 Perl_croak(aTHX_ "Wide character");
4038 =for apidoc sv_utf8_encode
4040 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
4041 flag off so that it looks like octets again.
4047 Perl_sv_utf8_encode(pTHX_ register SV *sv)
4049 (void) sv_utf8_upgrade(sv);
4051 sv_force_normal_flags(sv, 0);
4053 if (SvREADONLY(sv)) {
4054 Perl_croak(aTHX_ PL_no_modify);
4060 =for apidoc sv_utf8_decode
4062 If the PV of the SV is an octet sequence in UTF-8
4063 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
4064 so that it looks like a character. If the PV contains only single-byte
4065 characters, the C<SvUTF8> flag stays being off.
4066 Scans PV for validity and returns false if the PV is invalid UTF-8.
4072 Perl_sv_utf8_decode(pTHX_ register SV *sv)
4078 /* The octets may have got themselves encoded - get them back as
4081 if (!sv_utf8_downgrade(sv, TRUE))
4084 /* it is actually just a matter of turning the utf8 flag on, but
4085 * we want to make sure everything inside is valid utf8 first.
4087 c = (U8 *) SvPVX(sv);
4088 if (!is_utf8_string(c, SvCUR(sv)+1))
4090 e = (U8 *) SvEND(sv);
4093 if (!UTF8_IS_INVARIANT(ch)) {
4102 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
4103 * this function provided for binary compatibility only
4107 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
4109 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
4113 =for apidoc sv_setsv
4115 Copies the contents of the source SV C<ssv> into the destination SV
4116 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
4117 function if the source SV needs to be reused. Does not handle 'set' magic.
4118 Loosely speaking, it performs a copy-by-value, obliterating any previous
4119 content of the destination.
4121 You probably want to use one of the assortment of wrappers, such as
4122 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4123 C<SvSetMagicSV_nosteal>.
4125 =for apidoc sv_setsv_flags
4127 Copies the contents of the source SV C<ssv> into the destination SV
4128 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
4129 function if the source SV needs to be reused. Does not handle 'set' magic.
4130 Loosely speaking, it performs a copy-by-value, obliterating any previous
4131 content of the destination.
4132 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
4133 C<ssv> if appropriate, else not. C<sv_setsv> and C<sv_setsv_nomg> are
4134 implemented in terms of this function.
4136 You probably want to use one of the assortment of wrappers, such as
4137 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4138 C<SvSetMagicSV_nosteal>.
4140 This is the primary function for copying scalars, and most other
4141 copy-ish functions and macros use this underneath.
4147 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
4149 register U32 sflags;
4155 SV_CHECK_THINKFIRST_COW_DROP(dstr);
4157 sstr = &PL_sv_undef;
4158 stype = SvTYPE(sstr);
4159 dtype = SvTYPE(dstr);
4164 /* need to nuke the magic */
4166 SvRMAGICAL_off(dstr);
4169 /* There's a lot of redundancy below but we're going for speed here */
4174 if (dtype != SVt_PVGV) {
4175 (void)SvOK_off(dstr);
4183 sv_upgrade(dstr, SVt_IV);
4186 sv_upgrade(dstr, SVt_PVNV);
4190 sv_upgrade(dstr, SVt_PVIV);
4193 (void)SvIOK_only(dstr);
4194 SvIVX(dstr) = SvIVX(sstr);
4197 if (SvTAINTED(sstr))
4208 sv_upgrade(dstr, SVt_NV);
4213 sv_upgrade(dstr, SVt_PVNV);
4216 SvNVX(dstr) = SvNVX(sstr);
4217 (void)SvNOK_only(dstr);
4218 if (SvTAINTED(sstr))
4226 sv_upgrade(dstr, SVt_RV);
4227 else if (dtype == SVt_PVGV &&
4228 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
4231 if (GvIMPORTED(dstr) != GVf_IMPORTED
4232 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4234 GvIMPORTED_on(dstr);
4243 #ifdef PERL_COPY_ON_WRITE
4244 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4245 if (dtype < SVt_PVIV)
4246 sv_upgrade(dstr, SVt_PVIV);
4253 sv_upgrade(dstr, SVt_PV);
4256 if (dtype < SVt_PVIV)
4257 sv_upgrade(dstr, SVt_PVIV);
4260 if (dtype < SVt_PVNV)
4261 sv_upgrade(dstr, SVt_PVNV);
4268 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
4271 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
4275 if (dtype <= SVt_PVGV) {
4277 if (dtype != SVt_PVGV) {
4278 char *name = GvNAME(sstr);
4279 STRLEN len = GvNAMELEN(sstr);
4280 /* don't upgrade SVt_PVLV: it can hold a glob */
4281 if (dtype != SVt_PVLV)
4282 sv_upgrade(dstr, SVt_PVGV);
4283 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
4284 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
4285 GvNAME(dstr) = savepvn(name, len);
4286 GvNAMELEN(dstr) = len;
4287 SvFAKE_on(dstr); /* can coerce to non-glob */
4289 /* ahem, death to those who redefine active sort subs */
4290 else if (PL_curstackinfo->si_type == PERLSI_SORT
4291 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
4292 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
4295 #ifdef GV_UNIQUE_CHECK
4296 if (GvUNIQUE((GV*)dstr)) {
4297 Perl_croak(aTHX_ PL_no_modify);
4301 (void)SvOK_off(dstr);
4302 GvINTRO_off(dstr); /* one-shot flag */
4304 GvGP(dstr) = gp_ref(GvGP(sstr));
4305 if (SvTAINTED(sstr))
4307 if (GvIMPORTED(dstr) != GVf_IMPORTED
4308 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4310 GvIMPORTED_on(dstr);
4318 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4320 if ((int)SvTYPE(sstr) != stype) {
4321 stype = SvTYPE(sstr);
4322 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
4326 if (stype == SVt_PVLV)
4327 (void)SvUPGRADE(dstr, SVt_PVNV);
4329 (void)SvUPGRADE(dstr, (U32)stype);
4332 sflags = SvFLAGS(sstr);
4334 if (sflags & SVf_ROK) {
4335 if (dtype >= SVt_PV) {
4336 if (dtype == SVt_PVGV) {
4337 SV *sref = SvREFCNT_inc(SvRV(sstr));
4339 int intro = GvINTRO(dstr);
4341 #ifdef GV_UNIQUE_CHECK
4342 if (GvUNIQUE((GV*)dstr)) {
4343 Perl_croak(aTHX_ PL_no_modify);
4348 GvINTRO_off(dstr); /* one-shot flag */
4349 GvLINE(dstr) = CopLINE(PL_curcop);
4350 GvEGV(dstr) = (GV*)dstr;
4353 switch (SvTYPE(sref)) {
4356 SAVEGENERICSV(GvAV(dstr));
4358 dref = (SV*)GvAV(dstr);
4359 GvAV(dstr) = (AV*)sref;
4360 if (!GvIMPORTED_AV(dstr)
4361 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4363 GvIMPORTED_AV_on(dstr);
4368 SAVEGENERICSV(GvHV(dstr));
4370 dref = (SV*)GvHV(dstr);
4371 GvHV(dstr) = (HV*)sref;
4372 if (!GvIMPORTED_HV(dstr)
4373 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4375 GvIMPORTED_HV_on(dstr);
4380 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
4381 SvREFCNT_dec(GvCV(dstr));
4382 GvCV(dstr) = Nullcv;
4383 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4384 PL_sub_generation++;
4386 SAVEGENERICSV(GvCV(dstr));
4389 dref = (SV*)GvCV(dstr);
4390 if (GvCV(dstr) != (CV*)sref) {
4391 CV* cv = GvCV(dstr);
4393 if (!GvCVGEN((GV*)dstr) &&
4394 (CvROOT(cv) || CvXSUB(cv)))
4396 /* ahem, death to those who redefine
4397 * active sort subs */
4398 if (PL_curstackinfo->si_type == PERLSI_SORT &&
4399 PL_sortcop == CvSTART(cv))
4401 "Can't redefine active sort subroutine %s",
4402 GvENAME((GV*)dstr));
4403 /* Redefining a sub - warning is mandatory if
4404 it was a const and its value changed. */
4405 if (ckWARN(WARN_REDEFINE)
4407 && (!CvCONST((CV*)sref)
4408 || sv_cmp(cv_const_sv(cv),
4409 cv_const_sv((CV*)sref)))))
4411 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4413 ? "Constant subroutine %s::%s redefined"
4414 : "Subroutine %s::%s redefined",
4415 HvNAME(GvSTASH((GV*)dstr)),
4416 GvENAME((GV*)dstr));
4420 cv_ckproto(cv, (GV*)dstr,
4421 SvPOK(sref) ? SvPVX(sref) : Nullch);
4423 GvCV(dstr) = (CV*)sref;
4424 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4425 GvASSUMECV_on(dstr);
4426 PL_sub_generation++;
4428 if (!GvIMPORTED_CV(dstr)
4429 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4431 GvIMPORTED_CV_on(dstr);
4436 SAVEGENERICSV(GvIOp(dstr));
4438 dref = (SV*)GvIOp(dstr);
4439 GvIOp(dstr) = (IO*)sref;
4443 SAVEGENERICSV(GvFORM(dstr));
4445 dref = (SV*)GvFORM(dstr);
4446 GvFORM(dstr) = (CV*)sref;
4450 SAVEGENERICSV(GvSV(dstr));
4452 dref = (SV*)GvSV(dstr);
4454 if (!GvIMPORTED_SV(dstr)
4455 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4457 GvIMPORTED_SV_on(dstr);
4463 if (SvTAINTED(sstr))
4468 (void)SvOOK_off(dstr); /* backoff */
4470 Safefree(SvPVX(dstr));
4471 SvLEN(dstr)=SvCUR(dstr)=0;
4474 (void)SvOK_off(dstr);
4475 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
4477 if (sflags & SVp_NOK) {
4479 /* Only set the public OK flag if the source has public OK. */
4480 if (sflags & SVf_NOK)
4481 SvFLAGS(dstr) |= SVf_NOK;
4482 SvNVX(dstr) = SvNVX(sstr);
4484 if (sflags & SVp_IOK) {
4485 (void)SvIOKp_on(dstr);
4486 if (sflags & SVf_IOK)
4487 SvFLAGS(dstr) |= SVf_IOK;
4488 if (sflags & SVf_IVisUV)
4490 SvIVX(dstr) = SvIVX(sstr);
4492 if (SvAMAGIC(sstr)) {
4496 else if (sflags & SVp_POK) {
4500 * Check to see if we can just swipe the string. If so, it's a
4501 * possible small lose on short strings, but a big win on long ones.
4502 * It might even be a win on short strings if SvPVX(dstr)
4503 * has to be allocated and SvPVX(sstr) has to be freed.
4506 /* Whichever path we take through the next code, we want this true,
4507 and doing it now facilitates the COW check. */
4508 (void)SvPOK_only(dstr);
4511 #ifdef PERL_COPY_ON_WRITE
4512 (sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
4516 (sflags & SVs_TEMP) && /* slated for free anyway? */
4517 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4518 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4519 SvLEN(sstr) && /* and really is a string */
4520 /* and won't be needed again, potentially */
4521 !(PL_op && PL_op->op_type == OP_AASSIGN))
4522 #ifdef PERL_COPY_ON_WRITE
4523 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4524 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4525 && SvTYPE(sstr) >= SVt_PVIV)
4528 /* Failed the swipe test, and it's not a shared hash key either.
4529 Have to copy the string. */
4530 STRLEN len = SvCUR(sstr);
4531 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4532 Move(SvPVX(sstr),SvPVX(dstr),len,char);
4533 SvCUR_set(dstr, len);
4534 *SvEND(dstr) = '\0';
4536 /* If PERL_COPY_ON_WRITE is not defined, then isSwipe will always
4538 #ifdef PERL_COPY_ON_WRITE
4539 /* Either it's a shared hash key, or it's suitable for
4540 copy-on-write or we can swipe the string. */
4542 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4547 /* I believe I should acquire a global SV mutex if
4548 it's a COW sv (not a shared hash key) to stop
4549 it going un copy-on-write.
4550 If the source SV has gone un copy on write between up there
4551 and down here, then (assert() that) it is of the correct
4552 form to make it copy on write again */
4553 if ((sflags & (SVf_FAKE | SVf_READONLY))
4554 != (SVf_FAKE | SVf_READONLY)) {
4555 SvREADONLY_on(sstr);
4557 /* Make the source SV into a loop of 1.
4558 (about to become 2) */
4559 SV_COW_NEXT_SV_SET(sstr, sstr);
4563 /* Initial code is common. */
4564 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
4566 SvFLAGS(dstr) &= ~SVf_OOK;
4567 Safefree(SvPVX(dstr) - SvIVX(dstr));
4569 else if (SvLEN(dstr))
4570 Safefree(SvPVX(dstr));
4573 #ifdef PERL_COPY_ON_WRITE
4575 /* making another shared SV. */
4576 STRLEN cur = SvCUR(sstr);
4577 STRLEN len = SvLEN(sstr);
4578 assert (SvTYPE(dstr) >= SVt_PVIV);
4580 /* SvIsCOW_normal */
4581 /* splice us in between source and next-after-source. */
4582 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4583 SV_COW_NEXT_SV_SET(sstr, dstr);
4584 SvPV_set(dstr, SvPVX(sstr));
4586 /* SvIsCOW_shared_hash */
4587 UV hash = SvUVX(sstr);
4588 DEBUG_C(PerlIO_printf(Perl_debug_log,
4589 "Copy on write: Sharing hash\n"));
4591 sharepvn(SvPVX(sstr),
4592 (sflags & SVf_UTF8?-cur:cur), hash));
4597 SvREADONLY_on(dstr);
4599 /* Relesase a global SV mutex. */
4603 { /* Passes the swipe test. */
4604 SvPV_set(dstr, SvPVX(sstr));
4605 SvLEN_set(dstr, SvLEN(sstr));
4606 SvCUR_set(dstr, SvCUR(sstr));
4609 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4610 SvPV_set(sstr, Nullch);
4616 if (sflags & SVf_UTF8)
4619 if (sflags & SVp_NOK) {
4621 if (sflags & SVf_NOK)
4622 SvFLAGS(dstr) |= SVf_NOK;
4623 SvNVX(dstr) = SvNVX(sstr);
4625 if (sflags & SVp_IOK) {
4626 (void)SvIOKp_on(dstr);
4627 if (sflags & SVf_IOK)
4628 SvFLAGS(dstr) |= SVf_IOK;
4629 if (sflags & SVf_IVisUV)
4631 SvIVX(dstr) = SvIVX(sstr);
4634 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4635 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4636 smg->mg_ptr, smg->mg_len);
4637 SvRMAGICAL_on(dstr);
4640 else if (sflags & SVp_IOK) {
4641 if (sflags & SVf_IOK)
4642 (void)SvIOK_only(dstr);
4644 (void)SvOK_off(dstr);
4645 (void)SvIOKp_on(dstr);
4647 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4648 if (sflags & SVf_IVisUV)
4650 SvIVX(dstr) = SvIVX(sstr);
4651 if (sflags & SVp_NOK) {
4652 if (sflags & SVf_NOK)
4653 (void)SvNOK_on(dstr);
4655 (void)SvNOKp_on(dstr);
4656 SvNVX(dstr) = SvNVX(sstr);
4659 else if (sflags & SVp_NOK) {
4660 if (sflags & SVf_NOK)
4661 (void)SvNOK_only(dstr);
4663 (void)SvOK_off(dstr);
4666 SvNVX(dstr) = SvNVX(sstr);
4669 if (dtype == SVt_PVGV) {
4670 if (ckWARN(WARN_MISC))
4671 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4674 (void)SvOK_off(dstr);
4676 if (SvTAINTED(sstr))
4681 =for apidoc sv_setsv_mg
4683 Like C<sv_setsv>, but also handles 'set' magic.
4689 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4691 sv_setsv(dstr,sstr);
4695 #ifdef PERL_COPY_ON_WRITE
4697 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4699 STRLEN cur = SvCUR(sstr);
4700 STRLEN len = SvLEN(sstr);
4701 register char *new_pv;
4704 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4712 if (SvTHINKFIRST(dstr))
4713 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4714 else if (SvPVX(dstr))
4715 Safefree(SvPVX(dstr));
4719 (void)SvUPGRADE (dstr, SVt_PVIV);
4721 assert (SvPOK(sstr));
4722 assert (SvPOKp(sstr));
4723 assert (!SvIOK(sstr));
4724 assert (!SvIOKp(sstr));
4725 assert (!SvNOK(sstr));
4726 assert (!SvNOKp(sstr));
4728 if (SvIsCOW(sstr)) {
4730 if (SvLEN(sstr) == 0) {
4731 /* source is a COW shared hash key. */
4732 UV hash = SvUVX(sstr);
4733 DEBUG_C(PerlIO_printf(Perl_debug_log,
4734 "Fast copy on write: Sharing hash\n"));
4736 new_pv = sharepvn(SvPVX(sstr), (SvUTF8(sstr)?-cur:cur), hash);
<