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 by default are
67 approximately 4K chunks of memory parcelled up into N heads or bodies. The
68 first slot in each arena is reserved, and is used to hold a link to the next
69 arena. In the case of heads, the unused first slot also contains some flags
70 and 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 list.
74 The following global variables are associated with arenas:
76 PL_sv_arenaroot pointer to list of SV arenas
77 PL_sv_root pointer to list of free SV structures
79 PL_foo_arenaroot pointer to list of foo arenas,
80 PL_foo_root pointer to list of free foo bodies
81 ... for foo in xiv, xnv, xrv, xpv etc.
83 Note that some of the larger and more rarely used body types (eg xpvio)
84 are not allocated using arenas, but are instead just malloc()/free()ed as
85 required. Also, if PURIFY is defined, arenas are abandoned altogether,
86 with all items individually malloc()ed. In addition, a few SV heads are
87 not allocated from an arena, but are instead directly created as static
88 or auto variables, eg PL_sv_undef. The size of arenas can be changed from
89 the default by setting PERL_ARENA_SIZE appropriately at compile time.
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..."
169 #ifdef DEBUG_LEAKING_SCALARS
171 # define FREE_SV_DEBUG_FILE(sv) PerlMemfree((sv)->sv_debug_file)
173 # define FREE_SV_DEBUG_FILE(sv) PerlMemShared_free((sv)->sv_debug_file)
176 # define FREE_SV_DEBUG_FILE(sv)
179 #define plant_SV(p) \
181 FREE_SV_DEBUG_FILE(p); \
182 SvANY(p) = (void *)PL_sv_root; \
183 SvFLAGS(p) = SVTYPEMASK; \
188 /* sv_mutex must be held while calling uproot_SV() */
189 #define uproot_SV(p) \
192 PL_sv_root = (SV*)SvANY(p); \
197 /* make some more SVs by adding another arena */
199 /* sv_mutex must be held while calling more_sv() */
206 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
207 PL_nice_chunk = Nullch;
208 PL_nice_chunk_size = 0;
211 char *chunk; /* must use New here to match call to */
212 New(704,chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
213 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
219 /* new_SV(): return a new, empty SV head */
221 #ifdef DEBUG_LEAKING_SCALARS
222 /* provide a real function for a debugger to play with */
232 sv = S_more_sv(aTHX);
237 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
238 sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
239 (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
240 sv->sv_debug_inpad = 0;
241 sv->sv_debug_cloned = 0;
243 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
245 sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
250 # define new_SV(p) (p)=S_new_SV(aTHX)
259 (p) = S_more_sv(aTHX); \
268 /* del_SV(): return an empty SV head to the free list */
283 S_del_sv(pTHX_ SV *p)
288 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
290 SV *svend = &sva[SvREFCNT(sva)];
291 if (p >= sv && p < svend) {
297 if (ckWARN_d(WARN_INTERNAL))
298 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
299 "Attempt to free non-arena SV: 0x%"UVxf
300 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
307 #else /* ! DEBUGGING */
309 #define del_SV(p) plant_SV(p)
311 #endif /* DEBUGGING */
315 =head1 SV Manipulation Functions
317 =for apidoc sv_add_arena
319 Given a chunk of memory, link it to the head of the list of arenas,
320 and split it into a list of free SVs.
326 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
332 /* The first SV in an arena isn't an SV. */
333 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
334 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
335 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
337 PL_sv_arenaroot = sva;
338 PL_sv_root = sva + 1;
340 svend = &sva[SvREFCNT(sva) - 1];
343 SvANY(sv) = (void *)(SV*)(sv + 1);
347 /* Must always set typemask because it's awlays checked in on cleanup
348 when the arenas are walked looking for objects. */
349 SvFLAGS(sv) = SVTYPEMASK;
356 SvFLAGS(sv) = SVTYPEMASK;
359 /* visit(): call the named function for each non-free SV in the arenas
360 * whose flags field matches the flags/mask args. */
363 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
368 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
369 register SV * const svend = &sva[SvREFCNT(sva)];
371 for (sv = sva + 1; sv < svend; ++sv) {
372 if (SvTYPE(sv) != SVTYPEMASK
373 && (sv->sv_flags & mask) == flags
386 /* called by sv_report_used() for each live SV */
389 do_report_used(pTHX_ SV *sv)
391 if (SvTYPE(sv) != SVTYPEMASK) {
392 PerlIO_printf(Perl_debug_log, "****\n");
399 =for apidoc sv_report_used
401 Dump the contents of all SVs not yet freed. (Debugging aid).
407 Perl_sv_report_used(pTHX)
410 visit(do_report_used, 0, 0);
414 /* called by sv_clean_objs() for each live SV */
417 do_clean_objs(pTHX_ SV *sv)
421 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
422 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
434 /* XXX Might want to check arrays, etc. */
437 /* called by sv_clean_objs() for each live SV */
439 #ifndef DISABLE_DESTRUCTOR_KLUDGE
441 do_clean_named_objs(pTHX_ SV *sv)
443 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
444 if ( SvOBJECT(GvSV(sv)) ||
445 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
446 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
447 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
448 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
450 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
451 SvFLAGS(sv) |= SVf_BREAK;
459 =for apidoc sv_clean_objs
461 Attempt to destroy all objects not yet freed
467 Perl_sv_clean_objs(pTHX)
469 PL_in_clean_objs = TRUE;
470 visit(do_clean_objs, SVf_ROK, SVf_ROK);
471 #ifndef DISABLE_DESTRUCTOR_KLUDGE
472 /* some barnacles may yet remain, clinging to typeglobs */
473 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
475 PL_in_clean_objs = FALSE;
478 /* called by sv_clean_all() for each live SV */
481 do_clean_all(pTHX_ SV *sv)
483 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
484 SvFLAGS(sv) |= SVf_BREAK;
485 if (PL_comppad == (AV*)sv) {
487 PL_curpad = Null(SV**);
493 =for apidoc sv_clean_all
495 Decrement the refcnt of each remaining SV, possibly triggering a
496 cleanup. This function may have to be called multiple times to free
497 SVs which are in complex self-referential hierarchies.
503 Perl_sv_clean_all(pTHX)
506 PL_in_clean_all = TRUE;
507 cleaned = visit(do_clean_all, 0,0);
508 PL_in_clean_all = FALSE;
513 =for apidoc sv_free_arenas
515 Deallocate the memory used by all arenas. Note that all the individual SV
516 heads and bodies within the arenas must already have been freed.
522 Perl_sv_free_arenas(pTHX)
526 void *arena, *arenanext;
528 /* Free arenas here, but be careful about fake ones. (We assume
529 contiguity of the fake ones with the corresponding real ones.) */
531 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
532 svanext = (SV*) SvANY(sva);
533 while (svanext && SvFAKE(svanext))
534 svanext = (SV*) SvANY(svanext);
540 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
541 arenanext = *(void **)arena;
544 PL_xnv_arenaroot = 0;
547 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
548 arenanext = *(void **)arena;
551 PL_xpv_arenaroot = 0;
554 for (arena = PL_xpviv_arenaroot; arena; arena = arenanext) {
555 arenanext = *(void **)arena;
558 PL_xpviv_arenaroot = 0;
561 for (arena = PL_xpvnv_arenaroot; arena; arena = arenanext) {
562 arenanext = *(void **)arena;
565 PL_xpvnv_arenaroot = 0;
568 for (arena = PL_xpvcv_arenaroot; arena; arena = arenanext) {
569 arenanext = *(void **)arena;
572 PL_xpvcv_arenaroot = 0;
575 for (arena = PL_xpvav_arenaroot; arena; arena = arenanext) {
576 arenanext = *(void **)arena;
579 PL_xpvav_arenaroot = 0;
582 for (arena = PL_xpvhv_arenaroot; arena; arena = arenanext) {
583 arenanext = *(void **)arena;
586 PL_xpvhv_arenaroot = 0;
589 for (arena = PL_xpvmg_arenaroot; arena; arena = arenanext) {
590 arenanext = *(void **)arena;
593 PL_xpvmg_arenaroot = 0;
596 for (arena = PL_xpvgv_arenaroot; arena; arena = arenanext) {
597 arenanext = *(void **)arena;
600 PL_xpvgv_arenaroot = 0;
603 for (arena = PL_xpvlv_arenaroot; arena; arena = arenanext) {
604 arenanext = *(void **)arena;
607 PL_xpvlv_arenaroot = 0;
610 for (arena = PL_xpvbm_arenaroot; arena; arena = arenanext) {
611 arenanext = *(void **)arena;
614 PL_xpvbm_arenaroot = 0;
620 for (he = PL_he_arenaroot; he; he = he_next) {
621 he_next = HeNEXT(he);
628 #if defined(USE_ITHREADS)
630 struct ptr_tbl_ent *pte;
631 struct ptr_tbl_ent *pte_next;
632 for (pte = PL_pte_arenaroot; pte; pte = pte_next) {
633 pte_next = pte->next;
637 PL_pte_arenaroot = 0;
642 Safefree(PL_nice_chunk);
643 PL_nice_chunk = Nullch;
644 PL_nice_chunk_size = 0;
649 /* ---------------------------------------------------------------------
651 * support functions for report_uninit()
654 /* the maxiumum size of array or hash where we will scan looking
655 * for the undefined element that triggered the warning */
657 #define FUV_MAX_SEARCH_SIZE 1000
659 /* Look for an entry in the hash whose value has the same SV as val;
660 * If so, return a mortal copy of the key. */
663 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
669 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
670 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
675 for (i=HvMAX(hv); i>0; i--) {
677 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
678 if (HeVAL(entry) != val)
680 if ( HeVAL(entry) == &PL_sv_undef ||
681 HeVAL(entry) == &PL_sv_placeholder)
685 if (HeKLEN(entry) == HEf_SVKEY)
686 return sv_mortalcopy(HeKEY_sv(entry));
687 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
693 /* Look for an entry in the array whose value has the same SV as val;
694 * If so, return the index, otherwise return -1. */
697 S_find_array_subscript(pTHX_ AV *av, SV* val)
701 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
702 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
706 for (i=AvFILLp(av); i>=0; i--) {
707 if (svp[i] == val && svp[i] != &PL_sv_undef)
713 /* S_varname(): return the name of a variable, optionally with a subscript.
714 * If gv is non-zero, use the name of that global, along with gvtype (one
715 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
716 * targ. Depending on the value of the subscript_type flag, return:
719 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
720 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
721 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
722 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
725 S_varname(pTHX_ GV *gv, const char *gvtype, PADOFFSET targ,
726 SV* keyname, I32 aindex, int subscript_type)
731 SV * const name = sv_newmortal();
734 /* simulate gv_fullname4(), but add literal '^' for $^FOO names
735 * XXX get rid of all this if gv_fullnameX() ever supports this
739 HV *hv = GvSTASH(gv);
740 sv_setpv(name, gvtype);
743 else if (!(p=HvNAME_get(hv)))
745 if (strNE(p, "main")) {
747 sv_catpvn(name,"::", 2);
749 if (GvNAMELEN(gv)>= 1 &&
750 ((unsigned int)*GvNAME(gv)) <= 26)
752 Perl_sv_catpvf(aTHX_ name,"^%c", *GvNAME(gv) + 'A' - 1);
753 sv_catpvn(name,GvNAME(gv)+1,GvNAMELEN(gv)-1);
756 sv_catpvn(name,GvNAME(gv),GvNAMELEN(gv));
760 CV *cv = find_runcv(&u);
763 if (!cv || !CvPADLIST(cv))
765 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
766 sv = *av_fetch(av, targ, FALSE);
767 /* SvLEN in a pad name is not to be trusted */
769 sv_setpvn(name, str, len);
772 if (subscript_type == FUV_SUBSCRIPT_HASH) {
775 Perl_sv_catpvf(aTHX_ name, "{%s}",
776 pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
779 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
781 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
783 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
784 sv_insert(name, 0, 0, "within ", 7);
791 =for apidoc find_uninit_var
793 Find the name of the undefined variable (if any) that caused the operator o
794 to issue a "Use of uninitialized value" warning.
795 If match is true, only return a name if it's value matches uninit_sv.
796 So roughly speaking, if a unary operator (such as OP_COS) generates a
797 warning, then following the direct child of the op may yield an
798 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
799 other hand, with OP_ADD there are two branches to follow, so we only print
800 the variable name if we get an exact match.
802 The name is returned as a mortal SV.
804 Assumes that PL_op is the op that originally triggered the error, and that
805 PL_comppad/PL_curpad points to the currently executing pad.
811 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
820 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
821 uninit_sv == &PL_sv_placeholder)))
824 switch (obase->op_type) {
831 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
832 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
835 int subscript_type = FUV_SUBSCRIPT_WITHIN;
837 if (pad) { /* @lex, %lex */
838 sv = PAD_SVl(obase->op_targ);
842 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
843 /* @global, %global */
844 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
847 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
849 else /* @{expr}, %{expr} */
850 return find_uninit_var(cUNOPx(obase)->op_first,
854 /* attempt to find a match within the aggregate */
856 keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
858 subscript_type = FUV_SUBSCRIPT_HASH;
861 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
863 subscript_type = FUV_SUBSCRIPT_ARRAY;
866 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
869 return S_varname(aTHX_ gv, hash ? "%" : "@", obase->op_targ,
870 keysv, index, subscript_type);
874 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
876 return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
877 Nullsv, 0, FUV_SUBSCRIPT_NONE);
880 gv = cGVOPx_gv(obase);
881 if (!gv || (match && GvSV(gv) != uninit_sv))
883 return S_varname(aTHX_ gv, "$", 0, Nullsv, 0, FUV_SUBSCRIPT_NONE);
886 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
888 av = (AV*)PAD_SV(obase->op_targ);
889 if (!av || SvRMAGICAL(av))
891 svp = av_fetch(av, (I32)obase->op_private, FALSE);
892 if (!svp || *svp != uninit_sv)
895 return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
896 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
899 gv = cGVOPx_gv(obase);
904 if (!av || SvRMAGICAL(av))
906 svp = av_fetch(av, (I32)obase->op_private, FALSE);
907 if (!svp || *svp != uninit_sv)
910 return S_varname(aTHX_ gv, "$", 0,
911 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
916 o = cUNOPx(obase)->op_first;
917 if (!o || o->op_type != OP_NULL ||
918 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
920 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
925 /* $a[uninit_expr] or $h{uninit_expr} */
926 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
929 o = cBINOPx(obase)->op_first;
930 kid = cBINOPx(obase)->op_last;
932 /* get the av or hv, and optionally the gv */
934 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
935 sv = PAD_SV(o->op_targ);
937 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
938 && cUNOPo->op_first->op_type == OP_GV)
940 gv = cGVOPx_gv(cUNOPo->op_first);
943 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
948 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
949 /* index is constant */
953 if (obase->op_type == OP_HELEM) {
954 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
955 if (!he || HeVAL(he) != uninit_sv)
959 svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
960 if (!svp || *svp != uninit_sv)
964 if (obase->op_type == OP_HELEM)
965 return S_varname(aTHX_ gv, "%", o->op_targ,
966 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
968 return S_varname(aTHX_ gv, "@", o->op_targ, Nullsv,
969 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
973 /* index is an expression;
974 * attempt to find a match within the aggregate */
975 if (obase->op_type == OP_HELEM) {
976 SV *keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
978 return S_varname(aTHX_ gv, "%", o->op_targ,
979 keysv, 0, FUV_SUBSCRIPT_HASH);
982 const I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
984 return S_varname(aTHX_ gv, "@", o->op_targ,
985 Nullsv, index, FUV_SUBSCRIPT_ARRAY);
989 return S_varname(aTHX_ gv,
990 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
992 o->op_targ, Nullsv, 0, FUV_SUBSCRIPT_WITHIN);
998 /* only examine RHS */
999 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
1002 o = cUNOPx(obase)->op_first;
1003 if (o->op_type == OP_PUSHMARK)
1006 if (!o->op_sibling) {
1007 /* one-arg version of open is highly magical */
1009 if (o->op_type == OP_GV) { /* open FOO; */
1011 if (match && GvSV(gv) != uninit_sv)
1013 return S_varname(aTHX_ gv, "$", 0,
1014 Nullsv, 0, FUV_SUBSCRIPT_NONE);
1016 /* other possibilities not handled are:
1017 * open $x; or open my $x; should return '${*$x}'
1018 * open expr; should return '$'.expr ideally
1024 /* ops where $_ may be an implicit arg */
1028 if ( !(obase->op_flags & OPf_STACKED)) {
1029 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
1030 ? PAD_SVl(obase->op_targ)
1033 sv = sv_newmortal();
1034 sv_setpvn(sv, "$_", 2);
1042 /* skip filehandle as it can't produce 'undef' warning */
1043 o = cUNOPx(obase)->op_first;
1044 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
1045 o = o->op_sibling->op_sibling;
1052 match = 1; /* XS or custom code could trigger random warnings */
1057 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
1058 return sv_2mortal(newSVpv("${$/}", 0));
1063 if (!(obase->op_flags & OPf_KIDS))
1065 o = cUNOPx(obase)->op_first;
1071 /* if all except one arg are constant, or have no side-effects,
1072 * or are optimized away, then it's unambiguous */
1074 for (kid=o; kid; kid = kid->op_sibling) {
1076 ( (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
1077 || (kid->op_type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
1078 || (kid->op_type == OP_PUSHMARK)
1082 if (o2) { /* more than one found */
1089 return find_uninit_var(o2, uninit_sv, match);
1093 sv = find_uninit_var(o, uninit_sv, 1);
1105 =for apidoc report_uninit
1107 Print appropriate "Use of uninitialized variable" warning
1113 Perl_report_uninit(pTHX_ SV* uninit_sv)
1116 SV* varname = Nullsv;
1118 varname = find_uninit_var(PL_op, uninit_sv,0);
1120 sv_insert(varname, 0, 0, " ", 1);
1122 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1123 varname ? SvPV_nolen(varname) : "",
1124 " in ", OP_DESC(PL_op));
1127 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1131 /* allocate another arena's worth of NV bodies */
1139 New(711, ptr, PERL_ARENA_SIZE/sizeof(NV), NV);
1140 *((void **) ptr) = (void *)PL_xnv_arenaroot;
1141 PL_xnv_arenaroot = ptr;
1144 xnvend = &xnv[PERL_ARENA_SIZE / sizeof(NV) - 1];
1145 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
1147 while (xnv < xnvend) {
1148 *(NV**)xnv = (NV*)(xnv + 1);
1154 /* allocate another arena's worth of struct xpv */
1160 xpv_allocated* xpvend;
1161 New(713, xpv, PERL_ARENA_SIZE/sizeof(xpv_allocated), xpv_allocated);
1162 *((xpv_allocated**)xpv) = PL_xpv_arenaroot;
1163 PL_xpv_arenaroot = xpv;
1165 xpvend = &xpv[PERL_ARENA_SIZE / sizeof(xpv_allocated) - 1];
1166 PL_xpv_root = ++xpv;
1167 while (xpv < xpvend) {
1168 *((xpv_allocated**)xpv) = xpv + 1;
1171 *((xpv_allocated**)xpv) = 0;
1174 /* allocate another arena's worth of struct xpviv */
1179 xpviv_allocated* xpviv;
1180 xpviv_allocated* xpvivend;
1181 New(713, xpviv, PERL_ARENA_SIZE/sizeof(xpviv_allocated), xpviv_allocated);
1182 *((xpviv_allocated**)xpviv) = PL_xpviv_arenaroot;
1183 PL_xpviv_arenaroot = xpviv;
1185 xpvivend = &xpviv[PERL_ARENA_SIZE / sizeof(xpviv_allocated) - 1];
1186 PL_xpviv_root = ++xpviv;
1187 while (xpviv < xpvivend) {
1188 *((xpviv_allocated**)xpviv) = xpviv + 1;
1191 *((xpviv_allocated**)xpviv) = 0;
1194 /* allocate another arena's worth of struct xpvnv */
1201 New(715, xpvnv, PERL_ARENA_SIZE/sizeof(XPVNV), XPVNV);
1202 *((XPVNV**)xpvnv) = PL_xpvnv_arenaroot;
1203 PL_xpvnv_arenaroot = xpvnv;
1205 xpvnvend = &xpvnv[PERL_ARENA_SIZE / sizeof(XPVNV) - 1];
1206 PL_xpvnv_root = ++xpvnv;
1207 while (xpvnv < xpvnvend) {
1208 *((XPVNV**)xpvnv) = xpvnv + 1;
1211 *((XPVNV**)xpvnv) = 0;
1214 /* allocate another arena's worth of struct xpvcv */
1221 New(716, xpvcv, PERL_ARENA_SIZE/sizeof(XPVCV), XPVCV);
1222 *((XPVCV**)xpvcv) = PL_xpvcv_arenaroot;
1223 PL_xpvcv_arenaroot = xpvcv;
1225 xpvcvend = &xpvcv[PERL_ARENA_SIZE / sizeof(XPVCV) - 1];
1226 PL_xpvcv_root = ++xpvcv;
1227 while (xpvcv < xpvcvend) {
1228 *((XPVCV**)xpvcv) = xpvcv + 1;
1231 *((XPVCV**)xpvcv) = 0;
1234 /* allocate another arena's worth of struct xpvav */
1239 xpvav_allocated* xpvav;
1240 xpvav_allocated* xpvavend;
1241 New(717, xpvav, PERL_ARENA_SIZE/sizeof(xpvav_allocated),
1243 *((xpvav_allocated**)xpvav) = PL_xpvav_arenaroot;
1244 PL_xpvav_arenaroot = xpvav;
1246 xpvavend = &xpvav[PERL_ARENA_SIZE / sizeof(xpvav_allocated) - 1];
1247 PL_xpvav_root = ++xpvav;
1248 while (xpvav < xpvavend) {
1249 *((xpvav_allocated**)xpvav) = xpvav + 1;
1252 *((xpvav_allocated**)xpvav) = 0;
1255 /* allocate another arena's worth of struct xpvhv */
1260 xpvhv_allocated* xpvhv;
1261 xpvhv_allocated* xpvhvend;
1262 New(718, xpvhv, PERL_ARENA_SIZE/sizeof(xpvhv_allocated),
1264 *((xpvhv_allocated**)xpvhv) = PL_xpvhv_arenaroot;
1265 PL_xpvhv_arenaroot = xpvhv;
1267 xpvhvend = &xpvhv[PERL_ARENA_SIZE / sizeof(xpvhv_allocated) - 1];
1268 PL_xpvhv_root = ++xpvhv;
1269 while (xpvhv < xpvhvend) {
1270 *((xpvhv_allocated**)xpvhv) = xpvhv + 1;
1273 *((xpvhv_allocated**)xpvhv) = 0;
1276 /* allocate another arena's worth of struct xpvmg */
1283 New(719, xpvmg, PERL_ARENA_SIZE/sizeof(XPVMG), XPVMG);
1284 *((XPVMG**)xpvmg) = PL_xpvmg_arenaroot;
1285 PL_xpvmg_arenaroot = xpvmg;
1287 xpvmgend = &xpvmg[PERL_ARENA_SIZE / sizeof(XPVMG) - 1];
1288 PL_xpvmg_root = ++xpvmg;
1289 while (xpvmg < xpvmgend) {
1290 *((XPVMG**)xpvmg) = xpvmg + 1;
1293 *((XPVMG**)xpvmg) = 0;
1296 /* allocate another arena's worth of struct xpvgv */
1303 New(720, xpvgv, PERL_ARENA_SIZE/sizeof(XPVGV), XPVGV);
1304 *((XPVGV**)xpvgv) = PL_xpvgv_arenaroot;
1305 PL_xpvgv_arenaroot = xpvgv;
1307 xpvgvend = &xpvgv[PERL_ARENA_SIZE / sizeof(XPVGV) - 1];
1308 PL_xpvgv_root = ++xpvgv;
1309 while (xpvgv < xpvgvend) {
1310 *((XPVGV**)xpvgv) = xpvgv + 1;
1313 *((XPVGV**)xpvgv) = 0;
1316 /* allocate another arena's worth of struct xpvlv */
1323 New(720, xpvlv, PERL_ARENA_SIZE/sizeof(XPVLV), XPVLV);
1324 *((XPVLV**)xpvlv) = PL_xpvlv_arenaroot;
1325 PL_xpvlv_arenaroot = xpvlv;
1327 xpvlvend = &xpvlv[PERL_ARENA_SIZE / sizeof(XPVLV) - 1];
1328 PL_xpvlv_root = ++xpvlv;
1329 while (xpvlv < xpvlvend) {
1330 *((XPVLV**)xpvlv) = xpvlv + 1;
1333 *((XPVLV**)xpvlv) = 0;
1336 /* allocate another arena's worth of struct xpvbm */
1343 New(721, xpvbm, PERL_ARENA_SIZE/sizeof(XPVBM), XPVBM);
1344 *((XPVBM**)xpvbm) = PL_xpvbm_arenaroot;
1345 PL_xpvbm_arenaroot = xpvbm;
1347 xpvbmend = &xpvbm[PERL_ARENA_SIZE / sizeof(XPVBM) - 1];
1348 PL_xpvbm_root = ++xpvbm;
1349 while (xpvbm < xpvbmend) {
1350 *((XPVBM**)xpvbm) = xpvbm + 1;
1353 *((XPVBM**)xpvbm) = 0;
1356 /* grab a new NV body from the free list, allocating more if necessary */
1366 PL_xnv_root = *(NV**)xnv;
1368 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
1371 /* return an NV body to the free list */
1374 S_del_xnv(pTHX_ XPVNV *p)
1376 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
1378 *(NV**)xnv = PL_xnv_root;
1383 /* grab a new struct xpv from the free list, allocating more if necessary */
1393 PL_xpv_root = *(xpv_allocated**)xpv;
1395 /* If xpv_allocated is the same structure as XPV then the two OFFSETs
1396 sum to zero, and the pointer is unchanged. If the allocated structure
1397 is smaller (no initial IV actually allocated) then the net effect is
1398 to subtract the size of the IV from the pointer, to return a new pointer
1399 as if an initial IV were actually allocated. */
1400 return (XPV*)((char*)xpv - STRUCT_OFFSET(XPV, xpv_cur)
1401 + STRUCT_OFFSET(xpv_allocated, xpv_cur));
1404 /* return a struct xpv to the free list */
1407 S_del_xpv(pTHX_ XPV *p)
1410 = (xpv_allocated*)((char*)(p) + STRUCT_OFFSET(XPV, xpv_cur)
1411 - STRUCT_OFFSET(xpv_allocated, xpv_cur));
1413 *(xpv_allocated**)xpv = PL_xpv_root;
1418 /* grab a new struct xpviv from the free list, allocating more if necessary */
1423 xpviv_allocated* xpviv;
1427 xpviv = PL_xpviv_root;
1428 PL_xpviv_root = *(xpviv_allocated**)xpviv;
1430 /* If xpviv_allocated is the same structure as XPVIV then the two OFFSETs
1431 sum to zero, and the pointer is unchanged. If the allocated structure
1432 is smaller (no initial IV actually allocated) then the net effect is
1433 to subtract the size of the IV from the pointer, to return a new pointer
1434 as if an initial IV were actually allocated. */
1435 return (XPVIV*)((char*)xpviv - STRUCT_OFFSET(XPVIV, xpv_cur)
1436 + STRUCT_OFFSET(xpviv_allocated, xpv_cur));
1439 /* return a struct xpviv to the free list */
1442 S_del_xpviv(pTHX_ XPVIV *p)
1444 xpviv_allocated* xpviv
1445 = (xpviv_allocated*)((char*)(p) + STRUCT_OFFSET(XPVIV, xpv_cur)
1446 - STRUCT_OFFSET(xpviv_allocated, xpv_cur));
1448 *(xpviv_allocated**)xpviv = PL_xpviv_root;
1449 PL_xpviv_root = xpviv;
1453 /* grab a new struct xpvnv from the free list, allocating more if necessary */
1462 xpvnv = PL_xpvnv_root;
1463 PL_xpvnv_root = *(XPVNV**)xpvnv;
1468 /* return a struct xpvnv to the free list */
1471 S_del_xpvnv(pTHX_ XPVNV *p)
1474 *(XPVNV**)p = PL_xpvnv_root;
1479 /* grab a new struct xpvcv from the free list, allocating more if necessary */
1488 xpvcv = PL_xpvcv_root;
1489 PL_xpvcv_root = *(XPVCV**)xpvcv;
1494 /* return a struct xpvcv to the free list */
1497 S_del_xpvcv(pTHX_ XPVCV *p)
1500 *(XPVCV**)p = PL_xpvcv_root;
1505 /* grab a new struct xpvav from the free list, allocating more if necessary */
1510 xpvav_allocated* xpvav;
1514 xpvav = PL_xpvav_root;
1515 PL_xpvav_root = *(xpvav_allocated**)xpvav;
1517 return (XPVAV*)((char*)xpvav - STRUCT_OFFSET(XPVAV, xav_fill)
1518 + STRUCT_OFFSET(xpvav_allocated, xav_fill));
1521 /* return a struct xpvav to the free list */
1524 S_del_xpvav(pTHX_ XPVAV *p)
1526 xpvav_allocated* xpvav
1527 = (xpvav_allocated*)((char*)(p) + STRUCT_OFFSET(XPVAV, xav_fill)
1528 - STRUCT_OFFSET(xpvav_allocated, xav_fill));
1530 *(xpvav_allocated**)xpvav = PL_xpvav_root;
1531 PL_xpvav_root = xpvav;
1535 /* grab a new struct xpvhv from the free list, allocating more if necessary */
1540 xpvhv_allocated* xpvhv;
1544 xpvhv = PL_xpvhv_root;
1545 PL_xpvhv_root = *(xpvhv_allocated**)xpvhv;
1547 return (XPVHV*)((char*)xpvhv - STRUCT_OFFSET(XPVHV, xhv_fill)
1548 + STRUCT_OFFSET(xpvhv_allocated, xhv_fill));
1551 /* return a struct xpvhv to the free list */
1554 S_del_xpvhv(pTHX_ XPVHV *p)
1556 xpvhv_allocated* xpvhv
1557 = (xpvhv_allocated*)((char*)(p) + STRUCT_OFFSET(XPVHV, xhv_fill)
1558 - STRUCT_OFFSET(xpvhv_allocated, xhv_fill));
1560 *(xpvhv_allocated**)xpvhv = PL_xpvhv_root;
1561 PL_xpvhv_root = xpvhv;
1565 /* grab a new struct xpvmg from the free list, allocating more if necessary */
1574 xpvmg = PL_xpvmg_root;
1575 PL_xpvmg_root = *(XPVMG**)xpvmg;
1580 /* return a struct xpvmg to the free list */
1583 S_del_xpvmg(pTHX_ XPVMG *p)
1586 *(XPVMG**)p = PL_xpvmg_root;
1591 /* grab a new struct xpvgv from the free list, allocating more if necessary */
1600 xpvgv = PL_xpvgv_root;
1601 PL_xpvgv_root = *(XPVGV**)xpvgv;
1606 /* return a struct xpvgv to the free list */
1609 S_del_xpvgv(pTHX_ XPVGV *p)
1612 *(XPVGV**)p = PL_xpvgv_root;
1617 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1626 xpvlv = PL_xpvlv_root;
1627 PL_xpvlv_root = *(XPVLV**)xpvlv;
1632 /* return a struct xpvlv to the free list */
1635 S_del_xpvlv(pTHX_ XPVLV *p)
1638 *(XPVLV**)p = PL_xpvlv_root;
1643 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1652 xpvbm = PL_xpvbm_root;
1653 PL_xpvbm_root = *(XPVBM**)xpvbm;
1658 /* return a struct xpvbm to the free list */
1661 S_del_xpvbm(pTHX_ XPVBM *p)
1664 *(XPVBM**)p = PL_xpvbm_root;
1669 #define my_safemalloc(s) (void*)safemalloc(s)
1670 #define my_safefree(p) safefree((char*)p)
1674 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1675 #define del_XNV(p) my_safefree(p)
1677 #define new_XPV() my_safemalloc(sizeof(XPV))
1678 #define del_XPV(p) my_safefree(p)
1680 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1681 #define del_XPVIV(p) my_safefree(p)
1683 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1684 #define del_XPVNV(p) my_safefree(p)
1686 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1687 #define del_XPVCV(p) my_safefree(p)
1689 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1690 #define del_XPVAV(p) my_safefree(p)
1692 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1693 #define del_XPVHV(p) my_safefree(p)
1695 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1696 #define del_XPVMG(p) my_safefree(p)
1698 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1699 #define del_XPVGV(p) my_safefree(p)
1701 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1702 #define del_XPVLV(p) my_safefree(p)
1704 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1705 #define del_XPVBM(p) my_safefree(p)
1709 #define new_XNV() (void*)new_xnv()
1710 #define del_XNV(p) del_xnv((XPVNV*) p)
1712 #define new_XPV() (void*)new_xpv()
1713 #define del_XPV(p) del_xpv((XPV *)p)
1715 #define new_XPVIV() (void*)new_xpviv()
1716 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
1718 #define new_XPVNV() (void*)new_xpvnv()
1719 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
1721 #define new_XPVCV() (void*)new_xpvcv()
1722 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
1724 #define new_XPVAV() (void*)new_xpvav()
1725 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
1727 #define new_XPVHV() (void*)new_xpvhv()
1728 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
1730 #define new_XPVMG() (void*)new_xpvmg()
1731 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
1733 #define new_XPVGV() (void*)new_xpvgv()
1734 #define del_XPVGV(p) del_xpvgv((XPVGV *)p)
1736 #define new_XPVLV() (void*)new_xpvlv()
1737 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
1739 #define new_XPVBM() (void*)new_xpvbm()
1740 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
1744 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1745 #define del_XPVFM(p) my_safefree(p)
1747 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1748 #define del_XPVIO(p) my_safefree(p)
1751 =for apidoc sv_upgrade
1753 Upgrade an SV to a more complex form. Generally adds a new body type to the
1754 SV, then copies across as much information as possible from the old body.
1755 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1761 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1772 if (mt != SVt_PV && SvIsCOW(sv)) {
1773 sv_force_normal_flags(sv, 0);
1776 if (SvTYPE(sv) == mt)
1787 switch (SvTYPE(sv)) {
1794 else if (mt < SVt_PVIV)
1804 pv = (char*)SvRV(sv);
1813 else if (mt == SVt_NV)
1821 del_XPVIV(SvANY(sv));
1829 del_XPVNV(SvANY(sv));
1832 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1833 there's no way that it can be safely upgraded, because perl.c
1834 expects to Safefree(SvANY(PL_mess_sv)) */
1835 assert(sv != PL_mess_sv);
1836 /* This flag bit is used to mean other things in other scalar types.
1837 Given that it only has meaning inside the pad, it shouldn't be set
1838 on anything that can get upgraded. */
1839 assert((SvFLAGS(sv) & SVpad_TYPED) == 0);
1845 magic = SvMAGIC(sv);
1846 stash = SvSTASH(sv);
1847 del_XPVMG(SvANY(sv));
1850 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1853 SvFLAGS(sv) &= ~SVTYPEMASK;
1858 Perl_croak(aTHX_ "Can't upgrade to undef");
1860 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1864 SvANY(sv) = new_XNV();
1868 SvANY(sv) = &sv->sv_u.svu_rv;
1869 SvRV_set(sv, (SV*)pv);
1872 SvANY(sv) = new_XPVHV();
1875 HvTOTALKEYS(sv) = 0;
1877 /* Fall through... */
1880 SvANY(sv) = new_XPVAV();
1887 /* XXX? Only SVt_NULL is ever upgraded to AV or HV? */
1889 /* FIXME. Should be able to remove all this if()... if the above
1890 assertion is genuinely always true. */
1893 SvFLAGS(sv) &= ~SVf_OOK;
1896 SvPV_set(sv, (char*)0);
1897 SvMAGIC_set(sv, magic);
1898 SvSTASH_set(sv, stash);
1902 SvANY(sv) = new_XPVIO();
1903 Zero(SvANY(sv), 1, XPVIO);
1904 IoPAGE_LEN(sv) = 60;
1905 goto set_magic_common;
1907 SvANY(sv) = new_XPVFM();
1908 Zero(SvANY(sv), 1, XPVFM);
1909 goto set_magic_common;
1911 SvANY(sv) = new_XPVBM();
1915 goto set_magic_common;
1917 SvANY(sv) = new_XPVGV();
1923 goto set_magic_common;
1925 SvANY(sv) = new_XPVCV();
1926 Zero(SvANY(sv), 1, XPVCV);
1927 goto set_magic_common;
1929 SvANY(sv) = new_XPVLV();
1942 SvANY(sv) = new_XPVMG();
1945 SvMAGIC_set(sv, magic);
1946 SvSTASH_set(sv, stash);
1950 SvANY(sv) = new_XPVNV();
1956 SvANY(sv) = new_XPVIV();
1965 SvANY(sv) = new_XPV();
1976 =for apidoc sv_backoff
1978 Remove any string offset. You should normally use the C<SvOOK_off> macro
1985 Perl_sv_backoff(pTHX_ register SV *sv)
1988 assert(SvTYPE(sv) != SVt_PVHV);
1989 assert(SvTYPE(sv) != SVt_PVAV);
1991 const char *s = SvPVX_const(sv);
1992 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1993 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1995 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1997 SvFLAGS(sv) &= ~SVf_OOK;
2004 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
2005 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
2006 Use the C<SvGROW> wrapper instead.
2012 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
2016 #ifdef HAS_64K_LIMIT
2017 if (newlen >= 0x10000) {
2018 PerlIO_printf(Perl_debug_log,
2019 "Allocation too large: %"UVxf"\n", (UV)newlen);
2022 #endif /* HAS_64K_LIMIT */
2025 if (SvTYPE(sv) < SVt_PV) {
2026 sv_upgrade(sv, SVt_PV);
2029 else if (SvOOK(sv)) { /* pv is offset? */
2032 if (newlen > SvLEN(sv))
2033 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
2034 #ifdef HAS_64K_LIMIT
2035 if (newlen >= 0x10000)
2042 if (newlen > SvLEN(sv)) { /* need more room? */
2043 newlen = PERL_STRLEN_ROUNDUP(newlen);
2044 if (SvLEN(sv) && s) {
2046 const STRLEN l = malloced_size((void*)SvPVX(sv));
2052 s = saferealloc(s, newlen);
2055 s = safemalloc(newlen);
2056 if (SvPVX_const(sv) && SvCUR(sv)) {
2057 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
2061 SvLEN_set(sv, newlen);
2067 =for apidoc sv_setiv
2069 Copies an integer into the given SV, upgrading first if necessary.
2070 Does not handle 'set' magic. See also C<sv_setiv_mg>.
2076 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
2078 SV_CHECK_THINKFIRST_COW_DROP(sv);
2079 switch (SvTYPE(sv)) {
2081 sv_upgrade(sv, SVt_IV);
2084 sv_upgrade(sv, SVt_PVNV);
2088 sv_upgrade(sv, SVt_PVIV);
2097 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
2100 (void)SvIOK_only(sv); /* validate number */
2106 =for apidoc sv_setiv_mg
2108 Like C<sv_setiv>, but also handles 'set' magic.
2114 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
2121 =for apidoc sv_setuv
2123 Copies an unsigned integer into the given SV, upgrading first if necessary.
2124 Does not handle 'set' magic. See also C<sv_setuv_mg>.
2130 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
2132 /* With these two if statements:
2133 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
2136 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
2138 If you wish to remove them, please benchmark to see what the effect is
2140 if (u <= (UV)IV_MAX) {
2141 sv_setiv(sv, (IV)u);
2150 =for apidoc sv_setuv_mg
2152 Like C<sv_setuv>, but also handles 'set' magic.
2158 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
2160 /* With these two if statements:
2161 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
2164 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
2166 If you wish to remove them, please benchmark to see what the effect is
2168 if (u <= (UV)IV_MAX) {
2169 sv_setiv(sv, (IV)u);
2179 =for apidoc sv_setnv
2181 Copies a double into the given SV, upgrading first if necessary.
2182 Does not handle 'set' magic. See also C<sv_setnv_mg>.
2188 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
2190 SV_CHECK_THINKFIRST_COW_DROP(sv);
2191 switch (SvTYPE(sv)) {
2194 sv_upgrade(sv, SVt_NV);
2199 sv_upgrade(sv, SVt_PVNV);
2208 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
2212 (void)SvNOK_only(sv); /* validate number */
2217 =for apidoc sv_setnv_mg
2219 Like C<sv_setnv>, but also handles 'set' magic.
2225 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
2231 /* Print an "isn't numeric" warning, using a cleaned-up,
2232 * printable version of the offending string
2236 S_not_a_number(pTHX_ SV *sv)
2243 dsv = sv_2mortal(newSVpv("", 0));
2244 pv = sv_uni_display(dsv, sv, 10, 0);
2247 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
2248 /* each *s can expand to 4 chars + "...\0",
2249 i.e. need room for 8 chars */
2252 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
2254 if (ch & 128 && !isPRINT_LC(ch)) {
2263 else if (ch == '\r') {
2267 else if (ch == '\f') {
2271 else if (ch == '\\') {
2275 else if (ch == '\0') {
2279 else if (isPRINT_LC(ch))
2296 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2297 "Argument \"%s\" isn't numeric in %s", pv,
2300 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2301 "Argument \"%s\" isn't numeric", pv);
2305 =for apidoc looks_like_number
2307 Test if the content of an SV looks like a number (or is a number).
2308 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
2309 non-numeric warning), even if your atof() doesn't grok them.
2315 Perl_looks_like_number(pTHX_ SV *sv)
2317 register const char *sbegin;
2321 sbegin = SvPVX_const(sv);
2324 else if (SvPOKp(sv))
2325 sbegin = SvPV(sv, len);
2327 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
2328 return grok_number(sbegin, len, NULL);
2331 /* Actually, ISO C leaves conversion of UV to IV undefined, but
2332 until proven guilty, assume that things are not that bad... */
2337 As 64 bit platforms often have an NV that doesn't preserve all bits of
2338 an IV (an assumption perl has been based on to date) it becomes necessary
2339 to remove the assumption that the NV always carries enough precision to
2340 recreate the IV whenever needed, and that the NV is the canonical form.
2341 Instead, IV/UV and NV need to be given equal rights. So as to not lose
2342 precision as a side effect of conversion (which would lead to insanity
2343 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
2344 1) to distinguish between IV/UV/NV slots that have cached a valid
2345 conversion where precision was lost and IV/UV/NV slots that have a
2346 valid conversion which has lost no precision
2347 2) to ensure that if a numeric conversion to one form is requested that
2348 would lose precision, the precise conversion (or differently
2349 imprecise conversion) is also performed and cached, to prevent
2350 requests for different numeric formats on the same SV causing
2351 lossy conversion chains. (lossless conversion chains are perfectly
2356 SvIOKp is true if the IV slot contains a valid value
2357 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
2358 SvNOKp is true if the NV slot contains a valid value
2359 SvNOK is true only if the NV value is accurate
2362 while converting from PV to NV, check to see if converting that NV to an
2363 IV(or UV) would lose accuracy over a direct conversion from PV to
2364 IV(or UV). If it would, cache both conversions, return NV, but mark
2365 SV as IOK NOKp (ie not NOK).
2367 While converting from PV to IV, check to see if converting that IV to an
2368 NV would lose accuracy over a direct conversion from PV to NV. If it
2369 would, cache both conversions, flag similarly.
2371 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2372 correctly because if IV & NV were set NV *always* overruled.
2373 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2374 changes - now IV and NV together means that the two are interchangeable:
2375 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2377 The benefit of this is that operations such as pp_add know that if
2378 SvIOK is true for both left and right operands, then integer addition
2379 can be used instead of floating point (for cases where the result won't
2380 overflow). Before, floating point was always used, which could lead to
2381 loss of precision compared with integer addition.
2383 * making IV and NV equal status should make maths accurate on 64 bit
2385 * may speed up maths somewhat if pp_add and friends start to use
2386 integers when possible instead of fp. (Hopefully the overhead in
2387 looking for SvIOK and checking for overflow will not outweigh the
2388 fp to integer speedup)
2389 * will slow down integer operations (callers of SvIV) on "inaccurate"
2390 values, as the change from SvIOK to SvIOKp will cause a call into
2391 sv_2iv each time rather than a macro access direct to the IV slot
2392 * should speed up number->string conversion on integers as IV is
2393 favoured when IV and NV are equally accurate
2395 ####################################################################
2396 You had better be using SvIOK_notUV if you want an IV for arithmetic:
2397 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2398 On the other hand, SvUOK is true iff UV.
2399 ####################################################################
2401 Your mileage will vary depending your CPU's relative fp to integer
2405 #ifndef NV_PRESERVES_UV
2406 # define IS_NUMBER_UNDERFLOW_IV 1
2407 # define IS_NUMBER_UNDERFLOW_UV 2
2408 # define IS_NUMBER_IV_AND_UV 2
2409 # define IS_NUMBER_OVERFLOW_IV 4
2410 # define IS_NUMBER_OVERFLOW_UV 5
2412 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2414 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2416 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2418 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2419 if (SvNVX(sv) < (NV)IV_MIN) {
2420 (void)SvIOKp_on(sv);
2422 SvIV_set(sv, IV_MIN);
2423 return IS_NUMBER_UNDERFLOW_IV;
2425 if (SvNVX(sv) > (NV)UV_MAX) {
2426 (void)SvIOKp_on(sv);
2429 SvUV_set(sv, UV_MAX);
2430 return IS_NUMBER_OVERFLOW_UV;
2432 (void)SvIOKp_on(sv);
2434 /* Can't use strtol etc to convert this string. (See truth table in
2436 if (SvNVX(sv) <= (UV)IV_MAX) {
2437 SvIV_set(sv, I_V(SvNVX(sv)));
2438 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2439 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2441 /* Integer is imprecise. NOK, IOKp */
2443 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2446 SvUV_set(sv, U_V(SvNVX(sv)));
2447 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2448 if (SvUVX(sv) == UV_MAX) {
2449 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2450 possibly be preserved by NV. Hence, it must be overflow.
2452 return IS_NUMBER_OVERFLOW_UV;
2454 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2456 /* Integer is imprecise. NOK, IOKp */
2458 return IS_NUMBER_OVERFLOW_IV;
2460 #endif /* !NV_PRESERVES_UV*/
2462 /* sv_2iv() is now a macro using Perl_sv_2iv_flags();
2463 * this function provided for binary compatibility only
2467 Perl_sv_2iv(pTHX_ register SV *sv)
2469 return sv_2iv_flags(sv, SV_GMAGIC);
2473 =for apidoc sv_2iv_flags
2475 Return the integer value of an SV, doing any necessary string
2476 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2477 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2483 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2487 if (SvGMAGICAL(sv)) {
2488 if (flags & SV_GMAGIC)
2493 return I_V(SvNVX(sv));
2495 if (SvPOKp(sv) && SvLEN(sv))
2498 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2499 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2505 if (SvTHINKFIRST(sv)) {
2508 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2509 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2510 return SvIV(tmpstr);
2511 return PTR2IV(SvRV(sv));
2514 sv_force_normal_flags(sv, 0);
2516 if (SvREADONLY(sv) && !SvOK(sv)) {
2517 if (ckWARN(WARN_UNINITIALIZED))
2524 return (IV)(SvUVX(sv));
2531 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2532 * without also getting a cached IV/UV from it at the same time
2533 * (ie PV->NV conversion should detect loss of accuracy and cache
2534 * IV or UV at same time to avoid this. NWC */
2536 if (SvTYPE(sv) == SVt_NV)
2537 sv_upgrade(sv, SVt_PVNV);
2539 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2540 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2541 certainly cast into the IV range at IV_MAX, whereas the correct
2542 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2544 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2545 SvIV_set(sv, I_V(SvNVX(sv)));
2546 if (SvNVX(sv) == (NV) SvIVX(sv)
2547 #ifndef NV_PRESERVES_UV
2548 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2549 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2550 /* Don't flag it as "accurately an integer" if the number
2551 came from a (by definition imprecise) NV operation, and
2552 we're outside the range of NV integer precision */
2555 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2556 DEBUG_c(PerlIO_printf(Perl_debug_log,
2557 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2563 /* IV not precise. No need to convert from PV, as NV
2564 conversion would already have cached IV if it detected
2565 that PV->IV would be better than PV->NV->IV
2566 flags already correct - don't set public IOK. */
2567 DEBUG_c(PerlIO_printf(Perl_debug_log,
2568 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2573 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2574 but the cast (NV)IV_MIN rounds to a the value less (more
2575 negative) than IV_MIN which happens to be equal to SvNVX ??
2576 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2577 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2578 (NV)UVX == NVX are both true, but the values differ. :-(
2579 Hopefully for 2s complement IV_MIN is something like
2580 0x8000000000000000 which will be exact. NWC */
2583 SvUV_set(sv, U_V(SvNVX(sv)));
2585 (SvNVX(sv) == (NV) SvUVX(sv))
2586 #ifndef NV_PRESERVES_UV
2587 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2588 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2589 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2590 /* Don't flag it as "accurately an integer" if the number
2591 came from a (by definition imprecise) NV operation, and
2592 we're outside the range of NV integer precision */
2598 DEBUG_c(PerlIO_printf(Perl_debug_log,
2599 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2603 return (IV)SvUVX(sv);
2606 else if (SvPOKp(sv) && SvLEN(sv)) {
2608 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2609 /* We want to avoid a possible problem when we cache an IV which
2610 may be later translated to an NV, and the resulting NV is not
2611 the same as the direct translation of the initial string
2612 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2613 be careful to ensure that the value with the .456 is around if the
2614 NV value is requested in the future).
2616 This means that if we cache such an IV, we need to cache the
2617 NV as well. Moreover, we trade speed for space, and do not
2618 cache the NV if we are sure it's not needed.
2621 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2622 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2623 == IS_NUMBER_IN_UV) {
2624 /* It's definitely an integer, only upgrade to PVIV */
2625 if (SvTYPE(sv) < SVt_PVIV)
2626 sv_upgrade(sv, SVt_PVIV);
2628 } else if (SvTYPE(sv) < SVt_PVNV)
2629 sv_upgrade(sv, SVt_PVNV);
2631 /* If NV preserves UV then we only use the UV value if we know that
2632 we aren't going to call atof() below. If NVs don't preserve UVs
2633 then the value returned may have more precision than atof() will
2634 return, even though value isn't perfectly accurate. */
2635 if ((numtype & (IS_NUMBER_IN_UV
2636 #ifdef NV_PRESERVES_UV
2639 )) == IS_NUMBER_IN_UV) {
2640 /* This won't turn off the public IOK flag if it was set above */
2641 (void)SvIOKp_on(sv);
2643 if (!(numtype & IS_NUMBER_NEG)) {
2645 if (value <= (UV)IV_MAX) {
2646 SvIV_set(sv, (IV)value);
2648 SvUV_set(sv, value);
2652 /* 2s complement assumption */
2653 if (value <= (UV)IV_MIN) {
2654 SvIV_set(sv, -(IV)value);
2656 /* Too negative for an IV. This is a double upgrade, but
2657 I'm assuming it will be rare. */
2658 if (SvTYPE(sv) < SVt_PVNV)
2659 sv_upgrade(sv, SVt_PVNV);
2663 SvNV_set(sv, -(NV)value);
2664 SvIV_set(sv, IV_MIN);
2668 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2669 will be in the previous block to set the IV slot, and the next
2670 block to set the NV slot. So no else here. */
2672 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2673 != IS_NUMBER_IN_UV) {
2674 /* It wasn't an (integer that doesn't overflow the UV). */
2675 SvNV_set(sv, Atof(SvPVX_const(sv)));
2677 if (! numtype && ckWARN(WARN_NUMERIC))
2680 #if defined(USE_LONG_DOUBLE)
2681 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2682 PTR2UV(sv), SvNVX(sv)));
2684 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2685 PTR2UV(sv), SvNVX(sv)));
2689 #ifdef NV_PRESERVES_UV
2690 (void)SvIOKp_on(sv);
2692 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2693 SvIV_set(sv, I_V(SvNVX(sv)));
2694 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2697 /* Integer is imprecise. NOK, IOKp */
2699 /* UV will not work better than IV */
2701 if (SvNVX(sv) > (NV)UV_MAX) {
2703 /* Integer is inaccurate. NOK, IOKp, is UV */
2704 SvUV_set(sv, UV_MAX);
2707 SvUV_set(sv, U_V(SvNVX(sv)));
2708 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2709 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2713 /* Integer is imprecise. NOK, IOKp, is UV */
2719 #else /* NV_PRESERVES_UV */
2720 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2721 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2722 /* The IV slot will have been set from value returned by
2723 grok_number above. The NV slot has just been set using
2726 assert (SvIOKp(sv));
2728 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2729 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2730 /* Small enough to preserve all bits. */
2731 (void)SvIOKp_on(sv);
2733 SvIV_set(sv, I_V(SvNVX(sv)));
2734 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2736 /* Assumption: first non-preserved integer is < IV_MAX,
2737 this NV is in the preserved range, therefore: */
2738 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2740 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);
2744 0 0 already failed to read UV.
2745 0 1 already failed to read UV.
2746 1 0 you won't get here in this case. IV/UV
2747 slot set, public IOK, Atof() unneeded.
2748 1 1 already read UV.
2749 so there's no point in sv_2iuv_non_preserve() attempting
2750 to use atol, strtol, strtoul etc. */
2751 if (sv_2iuv_non_preserve (sv, numtype)
2752 >= IS_NUMBER_OVERFLOW_IV)
2756 #endif /* NV_PRESERVES_UV */
2759 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2761 if (SvTYPE(sv) < SVt_IV)
2762 /* Typically the caller expects that sv_any is not NULL now. */
2763 sv_upgrade(sv, SVt_IV);
2766 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2767 PTR2UV(sv),SvIVX(sv)));
2768 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2771 /* sv_2uv() is now a macro using Perl_sv_2uv_flags();
2772 * this function provided for binary compatibility only
2776 Perl_sv_2uv(pTHX_ register SV *sv)
2778 return sv_2uv_flags(sv, SV_GMAGIC);
2782 =for apidoc sv_2uv_flags
2784 Return the unsigned integer value of an SV, doing any necessary string
2785 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2786 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2792 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2796 if (SvGMAGICAL(sv)) {
2797 if (flags & SV_GMAGIC)
2802 return U_V(SvNVX(sv));
2803 if (SvPOKp(sv) && SvLEN(sv))
2806 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2807 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2813 if (SvTHINKFIRST(sv)) {
2816 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2817 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2818 return SvUV(tmpstr);
2819 return PTR2UV(SvRV(sv));
2822 sv_force_normal_flags(sv, 0);
2824 if (SvREADONLY(sv) && !SvOK(sv)) {
2825 if (ckWARN(WARN_UNINITIALIZED))
2835 return (UV)SvIVX(sv);
2839 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2840 * without also getting a cached IV/UV from it at the same time
2841 * (ie PV->NV conversion should detect loss of accuracy and cache
2842 * IV or UV at same time to avoid this. */
2843 /* IV-over-UV optimisation - choose to cache IV if possible */
2845 if (SvTYPE(sv) == SVt_NV)
2846 sv_upgrade(sv, SVt_PVNV);
2848 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2849 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2850 SvIV_set(sv, I_V(SvNVX(sv)));
2851 if (SvNVX(sv) == (NV) SvIVX(sv)
2852 #ifndef NV_PRESERVES_UV
2853 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2854 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2855 /* Don't flag it as "accurately an integer" if the number
2856 came from a (by definition imprecise) NV operation, and
2857 we're outside the range of NV integer precision */
2860 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2861 DEBUG_c(PerlIO_printf(Perl_debug_log,
2862 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2868 /* IV not precise. No need to convert from PV, as NV
2869 conversion would already have cached IV if it detected
2870 that PV->IV would be better than PV->NV->IV
2871 flags already correct - don't set public IOK. */
2872 DEBUG_c(PerlIO_printf(Perl_debug_log,
2873 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2878 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2879 but the cast (NV)IV_MIN rounds to a the value less (more
2880 negative) than IV_MIN which happens to be equal to SvNVX ??
2881 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2882 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2883 (NV)UVX == NVX are both true, but the values differ. :-(
2884 Hopefully for 2s complement IV_MIN is something like
2885 0x8000000000000000 which will be exact. NWC */
2888 SvUV_set(sv, U_V(SvNVX(sv)));
2890 (SvNVX(sv) == (NV) SvUVX(sv))
2891 #ifndef NV_PRESERVES_UV
2892 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2893 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2894 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2895 /* Don't flag it as "accurately an integer" if the number
2896 came from a (by definition imprecise) NV operation, and
2897 we're outside the range of NV integer precision */
2902 DEBUG_c(PerlIO_printf(Perl_debug_log,
2903 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2909 else if (SvPOKp(sv) && SvLEN(sv)) {
2911 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2913 /* We want to avoid a possible problem when we cache a UV which
2914 may be later translated to an NV, and the resulting NV is not
2915 the translation of the initial data.
2917 This means that if we cache such a UV, we need to cache the
2918 NV as well. Moreover, we trade speed for space, and do not
2919 cache the NV if not needed.
2922 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2923 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2924 == IS_NUMBER_IN_UV) {
2925 /* It's definitely an integer, only upgrade to PVIV */
2926 if (SvTYPE(sv) < SVt_PVIV)
2927 sv_upgrade(sv, SVt_PVIV);
2929 } else if (SvTYPE(sv) < SVt_PVNV)
2930 sv_upgrade(sv, SVt_PVNV);
2932 /* If NV preserves UV then we only use the UV value if we know that
2933 we aren't going to call atof() below. If NVs don't preserve UVs
2934 then the value returned may have more precision than atof() will
2935 return, even though it isn't accurate. */
2936 if ((numtype & (IS_NUMBER_IN_UV
2937 #ifdef NV_PRESERVES_UV
2940 )) == IS_NUMBER_IN_UV) {
2941 /* This won't turn off the public IOK flag if it was set above */
2942 (void)SvIOKp_on(sv);
2944 if (!(numtype & IS_NUMBER_NEG)) {
2946 if (value <= (UV)IV_MAX) {
2947 SvIV_set(sv, (IV)value);
2949 /* it didn't overflow, and it was positive. */
2950 SvUV_set(sv, value);
2954 /* 2s complement assumption */
2955 if (value <= (UV)IV_MIN) {
2956 SvIV_set(sv, -(IV)value);
2958 /* Too negative for an IV. This is a double upgrade, but
2959 I'm assuming it will be rare. */
2960 if (SvTYPE(sv) < SVt_PVNV)
2961 sv_upgrade(sv, SVt_PVNV);
2965 SvNV_set(sv, -(NV)value);
2966 SvIV_set(sv, IV_MIN);
2971 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2972 != IS_NUMBER_IN_UV) {
2973 /* It wasn't an integer, or it overflowed the UV. */
2974 SvNV_set(sv, Atof(SvPVX_const(sv)));
2976 if (! numtype && ckWARN(WARN_NUMERIC))
2979 #if defined(USE_LONG_DOUBLE)
2980 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2981 PTR2UV(sv), SvNVX(sv)));
2983 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
2984 PTR2UV(sv), SvNVX(sv)));
2987 #ifdef NV_PRESERVES_UV
2988 (void)SvIOKp_on(sv);
2990 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2991 SvIV_set(sv, I_V(SvNVX(sv)));
2992 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2995 /* Integer is imprecise. NOK, IOKp */
2997 /* UV will not work better than IV */
2999 if (SvNVX(sv) > (NV)UV_MAX) {
3001 /* Integer is inaccurate. NOK, IOKp, is UV */
3002 SvUV_set(sv, UV_MAX);
3005 SvUV_set(sv, U_V(SvNVX(sv)));
3006 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
3007 NV preservse UV so can do correct comparison. */
3008 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
3012 /* Integer is imprecise. NOK, IOKp, is UV */
3017 #else /* NV_PRESERVES_UV */
3018 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3019 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
3020 /* The UV slot will have been set from value returned by
3021 grok_number above. The NV slot has just been set using
3024 assert (SvIOKp(sv));
3026 if (((UV)1 << NV_PRESERVES_UV_BITS) >
3027 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
3028 /* Small enough to preserve all bits. */
3029 (void)SvIOKp_on(sv);
3031 SvIV_set(sv, I_V(SvNVX(sv)));
3032 if ((NV)(SvIVX(sv)) == SvNVX(sv))
3034 /* Assumption: first non-preserved integer is < IV_MAX,
3035 this NV is in the preserved range, therefore: */
3036 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
3038 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);
3041 sv_2iuv_non_preserve (sv, numtype);
3043 #endif /* NV_PRESERVES_UV */
3047 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3048 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3051 if (SvTYPE(sv) < SVt_IV)
3052 /* Typically the caller expects that sv_any is not NULL now. */
3053 sv_upgrade(sv, SVt_IV);
3057 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
3058 PTR2UV(sv),SvUVX(sv)));
3059 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
3065 Return the num value of an SV, doing any necessary string or integer
3066 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
3073 Perl_sv_2nv(pTHX_ register SV *sv)
3077 if (SvGMAGICAL(sv)) {
3081 if (SvPOKp(sv) && SvLEN(sv)) {
3082 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
3083 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
3085 return Atof(SvPVX_const(sv));
3089 return (NV)SvUVX(sv);
3091 return (NV)SvIVX(sv);
3094 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3095 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3101 if (SvTHINKFIRST(sv)) {
3104 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
3105 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
3106 return SvNV(tmpstr);
3107 return PTR2NV(SvRV(sv));
3110 sv_force_normal_flags(sv, 0);
3112 if (SvREADONLY(sv) && !SvOK(sv)) {
3113 if (ckWARN(WARN_UNINITIALIZED))
3118 if (SvTYPE(sv) < SVt_NV) {
3119 if (SvTYPE(sv) == SVt_IV)
3120 sv_upgrade(sv, SVt_PVNV);
3122 sv_upgrade(sv, SVt_NV);
3123 #ifdef USE_LONG_DOUBLE
3125 STORE_NUMERIC_LOCAL_SET_STANDARD();
3126 PerlIO_printf(Perl_debug_log,
3127 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
3128 PTR2UV(sv), SvNVX(sv));
3129 RESTORE_NUMERIC_LOCAL();
3133 STORE_NUMERIC_LOCAL_SET_STANDARD();
3134 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
3135 PTR2UV(sv), SvNVX(sv));
3136 RESTORE_NUMERIC_LOCAL();
3140 else if (SvTYPE(sv) < SVt_PVNV)
3141 sv_upgrade(sv, SVt_PVNV);
3146 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
3147 #ifdef NV_PRESERVES_UV
3150 /* Only set the public NV OK flag if this NV preserves the IV */
3151 /* Check it's not 0xFFFFFFFFFFFFFFFF */
3152 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
3153 : (SvIVX(sv) == I_V(SvNVX(sv))))
3159 else if (SvPOKp(sv) && SvLEN(sv)) {
3161 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
3162 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
3164 #ifdef NV_PRESERVES_UV
3165 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3166 == IS_NUMBER_IN_UV) {
3167 /* It's definitely an integer */
3168 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
3170 SvNV_set(sv, Atof(SvPVX_const(sv)));
3173 SvNV_set(sv, Atof(SvPVX_const(sv)));
3174 /* Only set the public NV OK flag if this NV preserves the value in
3175 the PV at least as well as an IV/UV would.
3176 Not sure how to do this 100% reliably. */
3177 /* if that shift count is out of range then Configure's test is
3178 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
3180 if (((UV)1 << NV_PRESERVES_UV_BITS) >
3181 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
3182 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
3183 } else if (!(numtype & IS_NUMBER_IN_UV)) {
3184 /* Can't use strtol etc to convert this string, so don't try.
3185 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
3188 /* value has been set. It may not be precise. */
3189 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
3190 /* 2s complement assumption for (UV)IV_MIN */
3191 SvNOK_on(sv); /* Integer is too negative. */
3196 if (numtype & IS_NUMBER_NEG) {
3197 SvIV_set(sv, -(IV)value);
3198 } else if (value <= (UV)IV_MAX) {
3199 SvIV_set(sv, (IV)value);
3201 SvUV_set(sv, value);
3205 if (numtype & IS_NUMBER_NOT_INT) {
3206 /* I believe that even if the original PV had decimals,
3207 they are lost beyond the limit of the FP precision.
3208 However, neither is canonical, so both only get p
3209 flags. NWC, 2000/11/25 */
3210 /* Both already have p flags, so do nothing */
3213 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
3214 if (SvIVX(sv) == I_V(nv)) {
3219 /* It had no "." so it must be integer. */
3222 /* between IV_MAX and NV(UV_MAX).
3223 Could be slightly > UV_MAX */
3225 if (numtype & IS_NUMBER_NOT_INT) {
3226 /* UV and NV both imprecise. */
3228 UV nv_as_uv = U_V(nv);
3230 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
3241 #endif /* NV_PRESERVES_UV */
3244 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3246 if (SvTYPE(sv) < SVt_NV)
3247 /* Typically the caller expects that sv_any is not NULL now. */
3248 /* XXX Ilya implies that this is a bug in callers that assume this
3249 and ideally should be fixed. */
3250 sv_upgrade(sv, SVt_NV);
3253 #if defined(USE_LONG_DOUBLE)
3255 STORE_NUMERIC_LOCAL_SET_STANDARD();
3256 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
3257 PTR2UV(sv), SvNVX(sv));
3258 RESTORE_NUMERIC_LOCAL();
3262 STORE_NUMERIC_LOCAL_SET_STANDARD();
3263 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
3264 PTR2UV(sv), SvNVX(sv));
3265 RESTORE_NUMERIC_LOCAL();
3271 /* asIV(): extract an integer from the string value of an SV.
3272 * Caller must validate PVX */
3275 S_asIV(pTHX_ SV *sv)
3278 int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
3280 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3281 == IS_NUMBER_IN_UV) {
3282 /* It's definitely an integer */
3283 if (numtype & IS_NUMBER_NEG) {
3284 if (value < (UV)IV_MIN)
3287 if (value < (UV)IV_MAX)
3292 if (ckWARN(WARN_NUMERIC))
3295 return I_V(Atof(SvPVX_const(sv)));
3298 /* asUV(): extract an unsigned integer from the string value of an SV
3299 * Caller must validate PVX */
3302 S_asUV(pTHX_ SV *sv)
3305 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
3307 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3308 == IS_NUMBER_IN_UV) {
3309 /* It's definitely an integer */
3310 if (!(numtype & IS_NUMBER_NEG))
3314 if (ckWARN(WARN_NUMERIC))
3317 return U_V(Atof(SvPVX_const(sv)));
3321 =for apidoc sv_2pv_nolen
3323 Like C<sv_2pv()>, but doesn't return the length too. You should usually
3324 use the macro wrapper C<SvPV_nolen(sv)> instead.
3329 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
3332 return sv_2pv(sv, &n_a);
3335 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
3336 * UV as a string towards the end of buf, and return pointers to start and
3339 * We assume that buf is at least TYPE_CHARS(UV) long.
3343 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
3345 char *ptr = buf + TYPE_CHARS(UV);
3359 *--ptr = '0' + (char)(uv % 10);
3367 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
3368 * this function provided for binary compatibility only
3372 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
3374 return sv_2pv_flags(sv, lp, SV_GMAGIC);
3378 =for apidoc sv_2pv_flags
3380 Returns a pointer to the string value of an SV, and sets *lp to its length.
3381 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
3383 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
3384 usually end up here too.
3390 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
3395 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
3396 char *tmpbuf = tbuf;
3402 if (SvGMAGICAL(sv)) {
3403 if (flags & SV_GMAGIC)
3411 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
3413 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
3418 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
3423 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3424 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3431 if (SvTHINKFIRST(sv)) {
3434 register const char *typestr;
3435 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3436 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3437 char *pv = SvPV(tmpstr, *lp);
3447 typestr = "NULLREF";
3451 switch (SvTYPE(sv)) {
3453 if ( ((SvFLAGS(sv) &
3454 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3455 == (SVs_OBJECT|SVs_SMG))
3456 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3457 const regexp *re = (regexp *)mg->mg_obj;
3460 const char *fptr = "msix";
3465 char need_newline = 0;
3466 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3468 while((ch = *fptr++)) {
3470 reflags[left++] = ch;
3473 reflags[right--] = ch;
3478 reflags[left] = '-';
3482 mg->mg_len = re->prelen + 4 + left;
3484 * If /x was used, we have to worry about a regex
3485 * ending with a comment later being embedded
3486 * within another regex. If so, we don't want this
3487 * regex's "commentization" to leak out to the
3488 * right part of the enclosing regex, we must cap
3489 * it with a newline.
3491 * So, if /x was used, we scan backwards from the
3492 * end of the regex. If we find a '#' before we
3493 * find a newline, we need to add a newline
3494 * ourself. If we find a '\n' first (or if we
3495 * don't find '#' or '\n'), we don't need to add
3496 * anything. -jfriedl
3498 if (PMf_EXTENDED & re->reganch)
3500 const char *endptr = re->precomp + re->prelen;
3501 while (endptr >= re->precomp)
3503 const char c = *(endptr--);
3505 break; /* don't need another */
3507 /* we end while in a comment, so we
3509 mg->mg_len++; /* save space for it */
3510 need_newline = 1; /* note to add it */
3516 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3517 Copy("(?", mg->mg_ptr, 2, char);
3518 Copy(reflags, mg->mg_ptr+2, left, char);
3519 Copy(":", mg->mg_ptr+left+2, 1, char);
3520 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3522 mg->mg_ptr[mg->mg_len - 2] = '\n';
3523 mg->mg_ptr[mg->mg_len - 1] = ')';
3524 mg->mg_ptr[mg->mg_len] = 0;
3526 PL_reginterp_cnt += re->program[0].next_off;
3528 if (re->reganch & ROPT_UTF8)
3543 case SVt_PVBM: typestr = SvROK(sv) ? "REF" : "SCALAR"; break;
3544 case SVt_PVLV: typestr = SvROK(sv) ? "REF"
3545 /* tied lvalues should appear to be
3546 * scalars for backwards compatitbility */
3547 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3548 ? "SCALAR" : "LVALUE"; break;
3549 case SVt_PVAV: typestr = "ARRAY"; break;
3550 case SVt_PVHV: typestr = "HASH"; break;
3551 case SVt_PVCV: typestr = "CODE"; break;
3552 case SVt_PVGV: typestr = "GLOB"; break;
3553 case SVt_PVFM: typestr = "FORMAT"; break;
3554 case SVt_PVIO: typestr = "IO"; break;
3555 default: typestr = "UNKNOWN"; break;
3559 const char *name = HvNAME_get(SvSTASH(sv));
3560 Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
3561 name ? name : "__ANON__" , typestr, PTR2UV(sv));
3564 Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, PTR2UV(sv));
3567 *lp = strlen(typestr);
3568 return (char *)typestr;
3570 if (SvREADONLY(sv) && !SvOK(sv)) {
3571 if (ckWARN(WARN_UNINITIALIZED))
3577 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3578 /* I'm assuming that if both IV and NV are equally valid then
3579 converting the IV is going to be more efficient */
3580 const U32 isIOK = SvIOK(sv);
3581 const U32 isUIOK = SvIsUV(sv);
3582 char buf[TYPE_CHARS(UV)];
3585 if (SvTYPE(sv) < SVt_PVIV)
3586 sv_upgrade(sv, SVt_PVIV);
3588 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3590 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3591 SvGROW(sv, (STRLEN)(ebuf - ptr + 1)); /* inlined from sv_setpvn */
3592 Move(ptr,SvPVX(sv),ebuf - ptr,char);
3593 SvCUR_set(sv, ebuf - ptr);
3603 else if (SvNOKp(sv)) {
3604 if (SvTYPE(sv) < SVt_PVNV)
3605 sv_upgrade(sv, SVt_PVNV);
3606 /* The +20 is pure guesswork. Configure test needed. --jhi */
3607 SvGROW(sv, NV_DIG + 20);
3609 olderrno = errno; /* some Xenix systems wipe out errno here */
3611 if (SvNVX(sv) == 0.0)
3612 (void)strcpy(s,"0");
3616 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3619 #ifdef FIXNEGATIVEZERO
3620 if (*s == '-' && s[1] == '0' && !s[2])
3630 if (ckWARN(WARN_UNINITIALIZED)
3631 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3634 if (SvTYPE(sv) < SVt_PV)
3635 /* Typically the caller expects that sv_any is not NULL now. */
3636 sv_upgrade(sv, SVt_PV);
3639 *lp = s - SvPVX_const(sv);
3642 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3643 PTR2UV(sv),SvPVX_const(sv)));
3647 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3648 /* Sneaky stuff here */
3652 tsv = newSVpv(tmpbuf, 0);
3664 t = SvPVX_const(tsv);
3669 len = strlen(tmpbuf);
3671 #ifdef FIXNEGATIVEZERO
3672 if (len == 2 && t[0] == '-' && t[1] == '0') {
3677 (void)SvUPGRADE(sv, SVt_PV);
3679 s = SvGROW(sv, len + 1);
3682 return strcpy(s, t);
3687 =for apidoc sv_copypv
3689 Copies a stringified representation of the source SV into the
3690 destination SV. Automatically performs any necessary mg_get and
3691 coercion of numeric values into strings. Guaranteed to preserve
3692 UTF-8 flag even from overloaded objects. Similar in nature to
3693 sv_2pv[_flags] but operates directly on an SV instead of just the
3694 string. Mostly uses sv_2pv_flags to do its work, except when that
3695 would lose the UTF-8'ness of the PV.
3701 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3706 sv_setpvn(dsv,s,len);
3714 =for apidoc sv_2pvbyte_nolen
3716 Return a pointer to the byte-encoded representation of the SV.
3717 May cause the SV to be downgraded from UTF-8 as a side-effect.
3719 Usually accessed via the C<SvPVbyte_nolen> macro.
3725 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3728 return sv_2pvbyte(sv, &n_a);
3732 =for apidoc sv_2pvbyte
3734 Return a pointer to the byte-encoded representation of the SV, and set *lp
3735 to its length. May cause the SV to be downgraded from UTF-8 as a
3738 Usually accessed via the C<SvPVbyte> macro.
3744 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3746 sv_utf8_downgrade(sv,0);
3747 return SvPV(sv,*lp);
3751 =for apidoc sv_2pvutf8_nolen
3753 Return a pointer to the UTF-8-encoded representation of the SV.
3754 May cause the SV to be upgraded to UTF-8 as a side-effect.
3756 Usually accessed via the C<SvPVutf8_nolen> macro.
3762 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3765 return sv_2pvutf8(sv, &n_a);
3769 =for apidoc sv_2pvutf8
3771 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3772 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3774 Usually accessed via the C<SvPVutf8> macro.
3780 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3782 sv_utf8_upgrade(sv);
3783 return SvPV(sv,*lp);
3787 =for apidoc sv_2bool
3789 This function is only called on magical items, and is only used by
3790 sv_true() or its macro equivalent.
3796 Perl_sv_2bool(pTHX_ register SV *sv)
3805 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3806 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3807 return (bool)SvTRUE(tmpsv);
3808 return SvRV(sv) != 0;
3811 register XPV* Xpvtmp;
3812 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3813 (*sv->sv_u.svu_pv > '0' ||
3814 Xpvtmp->xpv_cur > 1 ||
3815 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3822 return SvIVX(sv) != 0;
3825 return SvNVX(sv) != 0.0;
3832 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3833 * this function provided for binary compatibility only
3838 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3840 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3844 =for apidoc sv_utf8_upgrade
3846 Converts the PV of an SV to its UTF-8-encoded form.
3847 Forces the SV to string form if it is not already.
3848 Always sets the SvUTF8 flag to avoid future validity checks even
3849 if all the bytes have hibit clear.
3851 This is not as a general purpose byte encoding to Unicode interface:
3852 use the Encode extension for that.
3854 =for apidoc sv_utf8_upgrade_flags
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. If C<flags> has C<SV_GMAGIC> bit set,
3860 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3861 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3863 This is not as a general purpose byte encoding to Unicode interface:
3864 use the Encode extension for that.
3870 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3872 if (sv == &PL_sv_undef)
3876 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3877 (void) sv_2pv_flags(sv,&len, flags);
3881 (void) SvPV_force(sv,len);
3890 sv_force_normal_flags(sv, 0);
3893 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3894 sv_recode_to_utf8(sv, PL_encoding);
3895 else { /* Assume Latin-1/EBCDIC */
3896 /* This function could be much more efficient if we
3897 * had a FLAG in SVs to signal if there are any hibit
3898 * chars in the PV. Given that there isn't such a flag
3899 * make the loop as fast as possible. */
3900 U8 *s = (U8 *) SvPVX(sv);
3901 U8 *e = (U8 *) SvEND(sv);
3907 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3911 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3912 s = bytes_to_utf8((U8*)s, &len);
3914 SvPV_free(sv); /* No longer using what was there before. */
3916 SvPV_set(sv, (char*)s);
3917 SvCUR_set(sv, len - 1);
3918 SvLEN_set(sv, len); /* No longer know the real size. */
3920 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3927 =for apidoc sv_utf8_downgrade
3929 Attempts to convert the PV of an SV from characters to bytes.
3930 If the PV contains a character beyond byte, this conversion will fail;
3931 in this case, either returns false or, if C<fail_ok> is not
3934 This is not as a general purpose Unicode to byte encoding interface:
3935 use the Encode extension for that.
3941 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3943 if (SvPOKp(sv) && SvUTF8(sv)) {
3949 sv_force_normal_flags(sv, 0);
3951 s = (U8 *) SvPV(sv, len);
3952 if (!utf8_to_bytes(s, &len)) {
3957 Perl_croak(aTHX_ "Wide character in %s",
3960 Perl_croak(aTHX_ "Wide character");
3971 =for apidoc sv_utf8_encode
3973 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3974 flag off so that it looks like octets again.
3980 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3982 (void) sv_utf8_upgrade(sv);
3984 sv_force_normal_flags(sv, 0);
3986 if (SvREADONLY(sv)) {
3987 Perl_croak(aTHX_ PL_no_modify);
3993 =for apidoc sv_utf8_decode
3995 If the PV of the SV is an octet sequence in UTF-8
3996 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3997 so that it looks like a character. If the PV contains only single-byte
3998 characters, the C<SvUTF8> flag stays being off.
3999 Scans PV for validity and returns false if the PV is invalid UTF-8.
4005 Perl_sv_utf8_decode(pTHX_ register SV *sv)
4011 /* The octets may have got themselves encoded - get them back as
4014 if (!sv_utf8_downgrade(sv, TRUE))
4017 /* it is actually just a matter of turning the utf8 flag on, but
4018 * we want to make sure everything inside is valid utf8 first.
4020 c = (U8 *) SvPVX(sv);
4021 if (!is_utf8_string(c, SvCUR(sv)+1))
4023 e = (U8 *) SvEND(sv);
4026 if (!UTF8_IS_INVARIANT(ch)) {
4035 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
4036 * this function provided for binary compatibility only
4040 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
4042 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
4046 =for apidoc sv_setsv
4048 Copies the contents of the source SV C<ssv> into the destination SV
4049 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
4050 function if the source SV needs to be reused. Does not handle 'set' magic.
4051 Loosely speaking, it performs a copy-by-value, obliterating any previous
4052 content of the destination.
4054 You probably want to use one of the assortment of wrappers, such as
4055 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4056 C<SvSetMagicSV_nosteal>.
4058 =for apidoc sv_setsv_flags
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.
4065 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
4066 C<ssv> if appropriate, else not. If the C<flags> parameter has the
4067 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
4068 and C<sv_setsv_nomg> are implemented in terms of this function.
4070 You probably want to use one of the assortment of wrappers, such as
4071 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4072 C<SvSetMagicSV_nosteal>.
4074 This is the primary function for copying scalars, and most other
4075 copy-ish functions and macros use this underneath.
4081 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
4083 register U32 sflags;
4089 SV_CHECK_THINKFIRST_COW_DROP(dstr);
4091 sstr = &PL_sv_undef;
4092 stype = SvTYPE(sstr);
4093 dtype = SvTYPE(dstr);
4098 /* need to nuke the magic */
4100 SvRMAGICAL_off(dstr);
4103 /* There's a lot of redundancy below but we're going for speed here */
4108 if (dtype != SVt_PVGV) {
4109 (void)SvOK_off(dstr);
4117 sv_upgrade(dstr, SVt_IV);
4120 sv_upgrade(dstr, SVt_PVNV);
4124 sv_upgrade(dstr, SVt_PVIV);
4127 (void)SvIOK_only(dstr);
4128 SvIV_set(dstr, SvIVX(sstr));
4131 if (SvTAINTED(sstr))
4142 sv_upgrade(dstr, SVt_NV);
4147 sv_upgrade(dstr, SVt_PVNV);
4150 SvNV_set(dstr, SvNVX(sstr));
4151 (void)SvNOK_only(dstr);
4152 if (SvTAINTED(sstr))
4160 sv_upgrade(dstr, SVt_RV);
4161 else if (dtype == SVt_PVGV &&
4162 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
4165 if (GvIMPORTED(dstr) != GVf_IMPORTED
4166 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4168 GvIMPORTED_on(dstr);
4177 #ifdef PERL_COPY_ON_WRITE
4178 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4179 if (dtype < SVt_PVIV)
4180 sv_upgrade(dstr, SVt_PVIV);
4187 sv_upgrade(dstr, SVt_PV);
4190 if (dtype < SVt_PVIV)
4191 sv_upgrade(dstr, SVt_PVIV);
4194 if (dtype < SVt_PVNV)
4195 sv_upgrade(dstr, SVt_PVNV);
4202 const char * const type = sv_reftype(sstr,0);
4204 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
4206 Perl_croak(aTHX_ "Bizarre copy of %s", type);
4211 if (dtype <= SVt_PVGV) {
4213 if (dtype != SVt_PVGV) {
4214 const char * const name = GvNAME(sstr);
4215 const STRLEN len = GvNAMELEN(sstr);
4216 /* don't upgrade SVt_PVLV: it can hold a glob */
4217 if (dtype != SVt_PVLV)
4218 sv_upgrade(dstr, SVt_PVGV);
4219 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
4220 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
4221 GvNAME(dstr) = savepvn(name, len);
4222 GvNAMELEN(dstr) = len;
4223 SvFAKE_on(dstr); /* can coerce to non-glob */
4225 /* ahem, death to those who redefine active sort subs */
4226 else if (PL_curstackinfo->si_type == PERLSI_SORT
4227 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
4228 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
4231 #ifdef GV_UNIQUE_CHECK
4232 if (GvUNIQUE((GV*)dstr)) {
4233 Perl_croak(aTHX_ PL_no_modify);
4237 (void)SvOK_off(dstr);
4238 GvINTRO_off(dstr); /* one-shot flag */
4240 GvGP(dstr) = gp_ref(GvGP(sstr));
4241 if (SvTAINTED(sstr))
4243 if (GvIMPORTED(dstr) != GVf_IMPORTED
4244 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4246 GvIMPORTED_on(dstr);
4254 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4256 if ((int)SvTYPE(sstr) != stype) {
4257 stype = SvTYPE(sstr);
4258 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
4262 if (stype == SVt_PVLV)
4263 (void)SvUPGRADE(dstr, SVt_PVNV);
4265 (void)SvUPGRADE(dstr, (U32)stype);
4268 sflags = SvFLAGS(sstr);
4270 if (sflags & SVf_ROK) {
4271 if (dtype >= SVt_PV) {
4272 if (dtype == SVt_PVGV) {
4273 SV *sref = SvREFCNT_inc(SvRV(sstr));
4275 const int intro = GvINTRO(dstr);
4277 #ifdef GV_UNIQUE_CHECK
4278 if (GvUNIQUE((GV*)dstr)) {
4279 Perl_croak(aTHX_ PL_no_modify);
4284 GvINTRO_off(dstr); /* one-shot flag */
4285 GvLINE(dstr) = CopLINE(PL_curcop);
4286 GvEGV(dstr) = (GV*)dstr;
4289 switch (SvTYPE(sref)) {
4292 SAVEGENERICSV(GvAV(dstr));
4294 dref = (SV*)GvAV(dstr);
4295 GvAV(dstr) = (AV*)sref;
4296 if (!GvIMPORTED_AV(dstr)
4297 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4299 GvIMPORTED_AV_on(dstr);
4304 SAVEGENERICSV(GvHV(dstr));
4306 dref = (SV*)GvHV(dstr);
4307 GvHV(dstr) = (HV*)sref;
4308 if (!GvIMPORTED_HV(dstr)
4309 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4311 GvIMPORTED_HV_on(dstr);
4316 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
4317 SvREFCNT_dec(GvCV(dstr));
4318 GvCV(dstr) = Nullcv;
4319 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4320 PL_sub_generation++;
4322 SAVEGENERICSV(GvCV(dstr));
4325 dref = (SV*)GvCV(dstr);
4326 if (GvCV(dstr) != (CV*)sref) {
4327 CV* cv = GvCV(dstr);
4329 if (!GvCVGEN((GV*)dstr) &&
4330 (CvROOT(cv) || CvXSUB(cv)))
4332 /* ahem, death to those who redefine
4333 * active sort subs */
4334 if (PL_curstackinfo->si_type == PERLSI_SORT &&
4335 PL_sortcop == CvSTART(cv))
4337 "Can't redefine active sort subroutine %s",
4338 GvENAME((GV*)dstr));
4339 /* Redefining a sub - warning is mandatory if
4340 it was a const and its value changed. */
4341 if (ckWARN(WARN_REDEFINE)
4343 && (!CvCONST((CV*)sref)
4344 || sv_cmp(cv_const_sv(cv),
4345 cv_const_sv((CV*)sref)))))
4347 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4349 ? "Constant subroutine %s::%s redefined"
4350 : "Subroutine %s::%s redefined",
4351 HvNAME_get(GvSTASH((GV*)dstr)),
4352 GvENAME((GV*)dstr));
4356 cv_ckproto(cv, (GV*)dstr,
4357 SvPOK(sref) ? SvPVX(sref) : Nullch);
4359 GvCV(dstr) = (CV*)sref;
4360 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4361 GvASSUMECV_on(dstr);
4362 PL_sub_generation++;
4364 if (!GvIMPORTED_CV(dstr)
4365 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4367 GvIMPORTED_CV_on(dstr);
4372 SAVEGENERICSV(GvIOp(dstr));
4374 dref = (SV*)GvIOp(dstr);
4375 GvIOp(dstr) = (IO*)sref;
4379 SAVEGENERICSV(GvFORM(dstr));
4381 dref = (SV*)GvFORM(dstr);
4382 GvFORM(dstr) = (CV*)sref;
4386 SAVEGENERICSV(GvSV(dstr));
4388 dref = (SV*)GvSV(dstr);
4390 if (!GvIMPORTED_SV(dstr)
4391 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4393 GvIMPORTED_SV_on(dstr);
4399 if (SvTAINTED(sstr))
4403 if (SvPVX_const(dstr)) {
4409 (void)SvOK_off(dstr);
4410 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4412 if (sflags & SVp_NOK) {
4414 /* Only set the public OK flag if the source has public OK. */
4415 if (sflags & SVf_NOK)
4416 SvFLAGS(dstr) |= SVf_NOK;
4417 SvNV_set(dstr, SvNVX(sstr));
4419 if (sflags & SVp_IOK) {
4420 (void)SvIOKp_on(dstr);
4421 if (sflags & SVf_IOK)
4422 SvFLAGS(dstr) |= SVf_IOK;
4423 if (sflags & SVf_IVisUV)
4425 SvIV_set(dstr, SvIVX(sstr));
4427 if (SvAMAGIC(sstr)) {
4431 else if (sflags & SVp_POK) {
4435 * Check to see if we can just swipe the string. If so, it's a
4436 * possible small lose on short strings, but a big win on long ones.
4437 * It might even be a win on short strings if SvPVX_const(dstr)
4438 * has to be allocated and SvPVX_const(sstr) has to be freed.
4441 /* Whichever path we take through the next code, we want this true,
4442 and doing it now facilitates the COW check. */
4443 (void)SvPOK_only(dstr);
4446 #ifdef PERL_COPY_ON_WRITE
4447 (sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
4451 (sflags & SVs_TEMP) && /* slated for free anyway? */
4452 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4453 (!(flags & SV_NOSTEAL)) &&
4454 /* and we're allowed to steal temps */
4455 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4456 SvLEN(sstr) && /* and really is a string */
4457 /* and won't be needed again, potentially */
4458 !(PL_op && PL_op->op_type == OP_AASSIGN))
4459 #ifdef PERL_COPY_ON_WRITE
4460 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4461 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4462 && SvTYPE(sstr) >= SVt_PVIV)
4465 /* Failed the swipe test, and it's not a shared hash key either.
4466 Have to copy the string. */
4467 STRLEN len = SvCUR(sstr);
4468 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4469 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4470 SvCUR_set(dstr, len);
4471 *SvEND(dstr) = '\0';
4473 /* If PERL_COPY_ON_WRITE is not defined, then isSwipe will always
4475 #ifdef PERL_COPY_ON_WRITE
4476 /* Either it's a shared hash key, or it's suitable for
4477 copy-on-write or we can swipe the string. */
4479 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4484 /* I believe I should acquire a global SV mutex if
4485 it's a COW sv (not a shared hash key) to stop
4486 it going un copy-on-write.
4487 If the source SV has gone un copy on write between up there
4488 and down here, then (assert() that) it is of the correct
4489 form to make it copy on write again */
4490 if ((sflags & (SVf_FAKE | SVf_READONLY))
4491 != (SVf_FAKE | SVf_READONLY)) {
4492 SvREADONLY_on(sstr);
4494 /* Make the source SV into a loop of 1.
4495 (about to become 2) */
4496 SV_COW_NEXT_SV_SET(sstr, sstr);
4500 /* Initial code is common. */
4501 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4503 SvFLAGS(dstr) &= ~SVf_OOK;
4504 Safefree(SvPVX_const(dstr) - SvIVX(dstr));
4506 else if (SvLEN(dstr))
4507 Safefree(SvPVX_const(dstr));
4510 #ifdef PERL_COPY_ON_WRITE
4512 /* making another shared SV. */
4513 STRLEN cur = SvCUR(sstr);
4514 STRLEN len = SvLEN(sstr);
4515 assert (SvTYPE(dstr) >= SVt_PVIV);
4517 /* SvIsCOW_normal */
4518 /* splice us in between source and next-after-source. */
4519 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4520 SV_COW_NEXT_SV_SET(sstr, dstr);
4521 SvPV_set(dstr, SvPVX(sstr));
4523 /* SvIsCOW_shared_hash */
4524 UV hash = SvUVX(sstr);
4525 DEBUG_C(PerlIO_printf(Perl_debug_log,
4526 "Copy on write: Sharing hash\n"));
4528 sharepvn(SvPVX_const(sstr),
4529 (sflags & SVf_UTF8?-cur:cur), hash));
4530 SvUV_set(dstr, hash);
4532 SvLEN_set(dstr, len);
4533 SvCUR_set(dstr, cur);
4534 SvREADONLY_on(dstr);
4536 /* Relesase a global SV mutex. */
4540 { /* Passes the swipe test. */
4541 SvPV_set(dstr, SvPVX(sstr));
4542 SvLEN_set(dstr, SvLEN(sstr));
4543 SvCUR_set(dstr, SvCUR(sstr));
4546 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4547 SvPV_set(sstr, Nullch);
4553 if (sflags & SVf_UTF8)
4556 if (sflags & SVp_NOK) {
4558 if (sflags & SVf_NOK)
4559 SvFLAGS(dstr) |= SVf_NOK;
4560 SvNV_set(dstr, SvNVX(sstr));
4562 if (sflags & SVp_IOK) {
4563 (void)SvIOKp_on(dstr);
4564 if (sflags & SVf_IOK)
4565 SvFLAGS(dstr) |= SVf_IOK;
4566 if (sflags & SVf_IVisUV)
4568 SvIV_set(dstr, SvIVX(sstr));
4571 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4572 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4573 smg->mg_ptr, smg->mg_len);
4574 SvRMAGICAL_on(dstr);
4577 else if (sflags & SVp_IOK) {
4578 if (sflags & SVf_IOK)
4579 (void)SvIOK_only(dstr);
4581 (void)SvOK_off(dstr);
4582 (void)SvIOKp_on(dstr);
4584 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4585 if (sflags & SVf_IVisUV)
4587 SvIV_set(dstr, SvIVX(sstr));
4588 if (sflags & SVp_NOK) {
4589 if (sflags & SVf_NOK)
4590 (void)SvNOK_on(dstr);
4592 (void)SvNOKp_on(dstr);
4593 SvNV_set(dstr, SvNVX(sstr));
4596 else if (sflags & SVp_NOK) {
4597 if (sflags & SVf_NOK)
4598 (void)SvNOK_only(dstr);
4600 (void)SvOK_off(dstr);
4603 SvNV_set(dstr, SvNVX(sstr));
4606 if (dtype == SVt_PVGV) {
4607 if (ckWARN(WARN_MISC))
4608 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4611 (void)SvOK_off(dstr);
4613 if (SvTAINTED(sstr))
4618 =for apidoc sv_setsv_mg
4620 Like C<sv_setsv>, but also handles 'set' magic.
4626 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4628 sv_setsv(dstr,sstr);
4632 #ifdef PERL_COPY_ON_WRITE
4634 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4636 STRLEN cur = SvCUR(sstr);
4637 STRLEN len = SvLEN(sstr);
4638 register char *new_pv;
4641 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4649 if (SvTHINKFIRST(dstr))
4650 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4651 else if (SvPVX_const(dstr))
4652 Safefree(SvPVX_const(dstr));
4656 (void)SvUPGRADE (dstr, SVt_PVIV);
4658 assert (SvPOK(sstr));
4659 assert (SvPOKp(sstr));
4660 assert (!SvIOK(sstr));
4661 assert (!SvIOKp(sstr));
4662 assert (!SvNOK(sstr));
4663 assert (!SvNOKp(sstr));
4665 if (SvIsCOW(sstr)) {
4667 if (SvLEN(sstr) == 0) {
4668 /* source is a COW shared hash key. */
4669 UV hash = SvUVX(sstr);
4670 DEBUG_C(PerlIO_printf(Perl_debug_log,
4671 "Fast copy on write: Sharing hash\n"));
4672 SvUV_set(dstr, hash);
4673 new_pv = sharepvn(SvPVX_const(sstr), (SvUTF8(sstr)?-cur:cur), hash);
4676 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4678 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4679 (void)SvUPGRADE (sstr, SVt_PVIV);
4680 SvREADONLY_on(sstr);
4682 DEBUG_C(PerlIO_printf(Perl_debug_log,
4683 "Fast copy on write: Converting sstr to COW\n"));
4684 SV_COW_NEXT_SV_SET(dstr, sstr);
4686 SV_COW_NEXT_SV_SET(sstr, dstr);
4687 new_pv = SvPVX(sstr);
4690 SvPV_set(dstr, new_pv);
4691 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4694 SvLEN_set(dstr, len);
4695 SvCUR_set(dstr, cur);
4704 =for apidoc sv_setpvn
4706 Copies a string into an SV. The C<len> parameter indicates the number of
4707 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4708 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4714 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4716 register char *dptr;
4718 SV_CHECK_THINKFIRST_COW_DROP(sv);