3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
28 /* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
32 #ifdef PERL_UTF8_CACHE_ASSERT
33 /* The cache element 0 is the Unicode offset;
34 * the cache element 1 is the byte offset of the element 0;
35 * the cache element 2 is the Unicode length of the substring;
36 * the cache element 3 is the byte length of the substring;
37 * The checking of the substring side would be good
38 * but substr() has enough code paths to make my head spin;
39 * if adding more checks watch out for the following tests:
40 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
41 * lib/utf8.t lib/Unicode/Collate/t/index.t
44 #define ASSERT_UTF8_CACHE(cache) \
45 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
47 #define ASSERT_UTF8_CACHE(cache) NOOP
50 /* ============================================================================
52 =head1 Allocation and deallocation of SVs.
54 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct sv,
55 av, hv...) contains type and reference count information, as well as a
56 pointer to the body (struct xrv, xpv, xpviv...), which contains fields
57 specific to each type.
59 Normally, this allocation is done using arenas, which are approximately
60 1K chunks of memory parcelled up into N heads or bodies. The first slot
61 in each arena is reserved, and is used to hold a link to the next arena.
62 In the case of heads, the unused first slot also contains some flags and
63 a note of the number of slots. Snaked through each arena chain is a
64 linked list of free items; when this becomes empty, an extra arena is
65 allocated and divided up into N items which are threaded into the free
68 The following global variables are associated with arenas:
70 PL_sv_arenaroot pointer to list of SV arenas
71 PL_sv_root pointer to list of free SV structures
73 PL_foo_arenaroot pointer to list of foo arenas,
74 PL_foo_root pointer to list of free foo bodies
75 ... for foo in xiv, xnv, xrv, xpv etc.
77 Note that some of the larger and more rarely used body types (eg xpvio)
78 are not allocated using arenas, but are instead just malloc()/free()ed as
79 required. Also, if PURIFY is defined, arenas are abandoned altogether,
80 with all items individually malloc()ed. In addition, a few SV heads are
81 not allocated from an arena, but are instead directly created as static
82 or auto variables, eg PL_sv_undef.
84 The SV arena serves the secondary purpose of allowing still-live SVs
85 to be located and destroyed during final cleanup.
87 At the lowest level, the macros new_SV() and del_SV() grab and free
88 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
89 to return the SV to the free list with error checking.) new_SV() calls
90 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
91 SVs in the free list have their SvTYPE field set to all ones.
93 Similarly, there are macros new_XIV()/del_XIV(), new_XNV()/del_XNV() etc
94 that allocate and return individual body types. Normally these are mapped
95 to the arena-manipulating functions new_xiv()/del_xiv() etc, but may be
96 instead mapped directly to malloc()/free() if PURIFY is defined. The
97 new/del functions remove from, or add to, the appropriate PL_foo_root
98 list, and call more_xiv() etc to add a new arena if the list is empty.
100 At the time of very final cleanup, sv_free_arenas() is called from
101 perl_destruct() to physically free all the arenas allocated since the
102 start of the interpreter. Note that this also clears PL_he_arenaroot,
103 which is otherwise dealt with in hv.c.
105 Manipulation of any of the PL_*root pointers is protected by enclosing
106 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
107 if threads are enabled.
109 The function visit() scans the SV arenas list, and calls a specified
110 function for each SV it finds which is still live - ie which has an SvTYPE
111 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
112 following functions (specified as [function that calls visit()] / [function
113 called by visit() for each SV]):
115 sv_report_used() / do_report_used()
116 dump all remaining SVs (debugging aid)
118 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
119 Attempt to free all objects pointed to by RVs,
120 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
121 try to do the same for all objects indirectly
122 referenced by typeglobs too. Called once from
123 perl_destruct(), prior to calling sv_clean_all()
126 sv_clean_all() / do_clean_all()
127 SvREFCNT_dec(sv) each remaining SV, possibly
128 triggering an sv_free(). It also sets the
129 SVf_BREAK flag on the SV to indicate that the
130 refcnt has been artificially lowered, and thus
131 stopping sv_free() from giving spurious warnings
132 about SVs which unexpectedly have a refcnt
133 of zero. called repeatedly from perl_destruct()
134 until there are no SVs left.
138 Private API to rest of sv.c
142 new_XIV(), del_XIV(),
143 new_XNV(), del_XNV(),
148 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
153 ============================================================================ */
158 * "A time to plant, and a time to uproot what was planted..."
161 #define plant_SV(p) \
163 SvANY(p) = (void *)PL_sv_root; \
164 SvFLAGS(p) = SVTYPEMASK; \
169 /* sv_mutex must be held while calling uproot_SV() */
170 #define uproot_SV(p) \
173 PL_sv_root = (SV*)SvANY(p); \
178 /* new_SV(): return a new, empty SV head */
180 #ifdef DEBUG_LEAKING_SCALARS
181 /* provide a real function for a debugger to play with */
198 # define new_SV(p) (p)=S_new_SV(aTHX)
216 /* del_SV(): return an empty SV head to the free list */
231 S_del_sv(pTHX_ SV *p)
238 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
240 svend = &sva[SvREFCNT(sva)];
241 if (p >= sv && p < svend)
245 if (ckWARN_d(WARN_INTERNAL))
246 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
247 "Attempt to free non-arena SV: 0x%"UVxf
248 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
255 #else /* ! DEBUGGING */
257 #define del_SV(p) plant_SV(p)
259 #endif /* DEBUGGING */
263 =head1 SV Manipulation Functions
265 =for apidoc sv_add_arena
267 Given a chunk of memory, link it to the head of the list of arenas,
268 and split it into a list of free SVs.
274 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
280 /* The first SV in an arena isn't an SV. */
281 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
282 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
283 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
285 PL_sv_arenaroot = sva;
286 PL_sv_root = sva + 1;
288 svend = &sva[SvREFCNT(sva) - 1];
291 SvANY(sv) = (void *)(SV*)(sv + 1);
293 SvFLAGS(sv) = SVTYPEMASK;
297 SvFLAGS(sv) = SVTYPEMASK;
300 /* make some more SVs by adding another arena */
302 /* sv_mutex must be held while calling more_sv() */
309 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
310 PL_nice_chunk = Nullch;
311 PL_nice_chunk_size = 0;
314 char *chunk; /* must use New here to match call to */
315 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
316 sv_add_arena(chunk, 1008, 0);
322 /* visit(): call the named function for each non-free SV in the arenas
323 * whose flags field matches the flags/mask args. */
326 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
333 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
334 svend = &sva[SvREFCNT(sva)];
335 for (sv = sva + 1; sv < svend; ++sv) {
336 if (SvTYPE(sv) != SVTYPEMASK
337 && (sv->sv_flags & mask) == flags
350 /* called by sv_report_used() for each live SV */
353 do_report_used(pTHX_ SV *sv)
355 if (SvTYPE(sv) != SVTYPEMASK) {
356 PerlIO_printf(Perl_debug_log, "****\n");
363 =for apidoc sv_report_used
365 Dump the contents of all SVs not yet freed. (Debugging aid).
371 Perl_sv_report_used(pTHX)
374 visit(do_report_used, 0, 0);
378 /* called by sv_clean_objs() for each live SV */
381 do_clean_objs(pTHX_ SV *sv)
385 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
386 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
398 /* XXX Might want to check arrays, etc. */
401 /* called by sv_clean_objs() for each live SV */
403 #ifndef DISABLE_DESTRUCTOR_KLUDGE
405 do_clean_named_objs(pTHX_ SV *sv)
407 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
408 if ( SvOBJECT(GvSV(sv)) ||
409 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
410 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
411 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
412 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
414 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
415 SvFLAGS(sv) |= SVf_BREAK;
423 =for apidoc sv_clean_objs
425 Attempt to destroy all objects not yet freed
431 Perl_sv_clean_objs(pTHX)
433 PL_in_clean_objs = TRUE;
434 visit(do_clean_objs, SVf_ROK, SVf_ROK);
435 #ifndef DISABLE_DESTRUCTOR_KLUDGE
436 /* some barnacles may yet remain, clinging to typeglobs */
437 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
439 PL_in_clean_objs = FALSE;
442 /* called by sv_clean_all() for each live SV */
445 do_clean_all(pTHX_ SV *sv)
447 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
448 SvFLAGS(sv) |= SVf_BREAK;
453 =for apidoc sv_clean_all
455 Decrement the refcnt of each remaining SV, possibly triggering a
456 cleanup. This function may have to be called multiple times to free
457 SVs which are in complex self-referential hierarchies.
463 Perl_sv_clean_all(pTHX)
466 PL_in_clean_all = TRUE;
467 cleaned = visit(do_clean_all, 0,0);
468 PL_in_clean_all = FALSE;
473 =for apidoc sv_free_arenas
475 Deallocate the memory used by all arenas. Note that all the individual SV
476 heads and bodies within the arenas must already have been freed.
482 Perl_sv_free_arenas(pTHX)
486 XPV *arena, *arenanext;
488 /* Free arenas here, but be careful about fake ones. (We assume
489 contiguity of the fake ones with the corresponding real ones.) */
491 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
492 svanext = (SV*) SvANY(sva);
493 while (svanext && SvFAKE(svanext))
494 svanext = (SV*) SvANY(svanext);
497 Safefree((void *)sva);
500 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
501 arenanext = (XPV*)arena->xpv_pv;
504 PL_xiv_arenaroot = 0;
507 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
508 arenanext = (XPV*)arena->xpv_pv;
511 PL_xnv_arenaroot = 0;
514 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
515 arenanext = (XPV*)arena->xpv_pv;
518 PL_xrv_arenaroot = 0;
521 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
522 arenanext = (XPV*)arena->xpv_pv;
525 PL_xpv_arenaroot = 0;
528 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
529 arenanext = (XPV*)arena->xpv_pv;
532 PL_xpviv_arenaroot = 0;
535 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
536 arenanext = (XPV*)arena->xpv_pv;
539 PL_xpvnv_arenaroot = 0;
542 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
543 arenanext = (XPV*)arena->xpv_pv;
546 PL_xpvcv_arenaroot = 0;
549 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
550 arenanext = (XPV*)arena->xpv_pv;
553 PL_xpvav_arenaroot = 0;
556 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
557 arenanext = (XPV*)arena->xpv_pv;
560 PL_xpvhv_arenaroot = 0;
563 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
564 arenanext = (XPV*)arena->xpv_pv;
567 PL_xpvmg_arenaroot = 0;
570 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
571 arenanext = (XPV*)arena->xpv_pv;
574 PL_xpvlv_arenaroot = 0;
577 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
578 arenanext = (XPV*)arena->xpv_pv;
581 PL_xpvbm_arenaroot = 0;
584 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
585 arenanext = (XPV*)arena->xpv_pv;
592 Safefree(PL_nice_chunk);
593 PL_nice_chunk = Nullch;
594 PL_nice_chunk_size = 0;
600 =for apidoc report_uninit
602 Print appropriate "Use of uninitialized variable" warning
608 Perl_report_uninit(pTHX)
611 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
612 " in ", OP_DESC(PL_op));
614 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit, "", "");
617 /* grab a new IV body from the free list, allocating more if necessary */
628 * See comment in more_xiv() -- RAM.
630 PL_xiv_root = *(IV**)xiv;
632 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
635 /* return an IV body to the free list */
638 S_del_xiv(pTHX_ XPVIV *p)
640 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
642 *(IV**)xiv = PL_xiv_root;
647 /* allocate another arena's worth of IV bodies */
655 New(705, ptr, 1008/sizeof(XPV), XPV);
656 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
657 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
660 xivend = &xiv[1008 / sizeof(IV) - 1];
661 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
663 while (xiv < xivend) {
664 *(IV**)xiv = (IV *)(xiv + 1);
670 /* grab a new NV body from the free list, allocating more if necessary */
680 PL_xnv_root = *(NV**)xnv;
682 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
685 /* return an NV body to the free list */
688 S_del_xnv(pTHX_ XPVNV *p)
690 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
692 *(NV**)xnv = PL_xnv_root;
697 /* allocate another arena's worth of NV bodies */
705 New(711, ptr, 1008/sizeof(XPV), XPV);
706 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
707 PL_xnv_arenaroot = ptr;
710 xnvend = &xnv[1008 / sizeof(NV) - 1];
711 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
713 while (xnv < xnvend) {
714 *(NV**)xnv = (NV*)(xnv + 1);
720 /* grab a new struct xrv from the free list, allocating more if necessary */
730 PL_xrv_root = (XRV*)xrv->xrv_rv;
735 /* return a struct xrv to the free list */
738 S_del_xrv(pTHX_ XRV *p)
741 p->xrv_rv = (SV*)PL_xrv_root;
746 /* allocate another arena's worth of struct xrv */
752 register XRV* xrvend;
754 New(712, ptr, 1008/sizeof(XPV), XPV);
755 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
756 PL_xrv_arenaroot = ptr;
759 xrvend = &xrv[1008 / sizeof(XRV) - 1];
760 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
762 while (xrv < xrvend) {
763 xrv->xrv_rv = (SV*)(xrv + 1);
769 /* grab a new struct xpv from the free list, allocating more if necessary */
779 PL_xpv_root = (XPV*)xpv->xpv_pv;
784 /* return a struct xpv to the free list */
787 S_del_xpv(pTHX_ XPV *p)
790 p->xpv_pv = (char*)PL_xpv_root;
795 /* allocate another arena's worth of struct xpv */
801 register XPV* xpvend;
802 New(713, xpv, 1008/sizeof(XPV), XPV);
803 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
804 PL_xpv_arenaroot = xpv;
806 xpvend = &xpv[1008 / sizeof(XPV) - 1];
808 while (xpv < xpvend) {
809 xpv->xpv_pv = (char*)(xpv + 1);
815 /* grab a new struct xpviv from the free list, allocating more if necessary */
824 xpviv = PL_xpviv_root;
825 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
830 /* return a struct xpviv to the free list */
833 S_del_xpviv(pTHX_ XPVIV *p)
836 p->xpv_pv = (char*)PL_xpviv_root;
841 /* allocate another arena's worth of struct xpviv */
846 register XPVIV* xpviv;
847 register XPVIV* xpvivend;
848 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
849 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
850 PL_xpviv_arenaroot = xpviv;
852 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
853 PL_xpviv_root = ++xpviv;
854 while (xpviv < xpvivend) {
855 xpviv->xpv_pv = (char*)(xpviv + 1);
861 /* grab a new struct xpvnv from the free list, allocating more if necessary */
870 xpvnv = PL_xpvnv_root;
871 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
876 /* return a struct xpvnv to the free list */
879 S_del_xpvnv(pTHX_ XPVNV *p)
882 p->xpv_pv = (char*)PL_xpvnv_root;
887 /* allocate another arena's worth of struct xpvnv */
892 register XPVNV* xpvnv;
893 register XPVNV* xpvnvend;
894 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
895 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
896 PL_xpvnv_arenaroot = xpvnv;
898 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
899 PL_xpvnv_root = ++xpvnv;
900 while (xpvnv < xpvnvend) {
901 xpvnv->xpv_pv = (char*)(xpvnv + 1);
907 /* grab a new struct xpvcv from the free list, allocating more if necessary */
916 xpvcv = PL_xpvcv_root;
917 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
922 /* return a struct xpvcv to the free list */
925 S_del_xpvcv(pTHX_ XPVCV *p)
928 p->xpv_pv = (char*)PL_xpvcv_root;
933 /* allocate another arena's worth of struct xpvcv */
938 register XPVCV* xpvcv;
939 register XPVCV* xpvcvend;
940 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
941 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
942 PL_xpvcv_arenaroot = xpvcv;
944 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
945 PL_xpvcv_root = ++xpvcv;
946 while (xpvcv < xpvcvend) {
947 xpvcv->xpv_pv = (char*)(xpvcv + 1);
953 /* grab a new struct xpvav from the free list, allocating more if necessary */
962 xpvav = PL_xpvav_root;
963 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
968 /* return a struct xpvav to the free list */
971 S_del_xpvav(pTHX_ XPVAV *p)
974 p->xav_array = (char*)PL_xpvav_root;
979 /* allocate another arena's worth of struct xpvav */
984 register XPVAV* xpvav;
985 register XPVAV* xpvavend;
986 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
987 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
988 PL_xpvav_arenaroot = xpvav;
990 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
991 PL_xpvav_root = ++xpvav;
992 while (xpvav < xpvavend) {
993 xpvav->xav_array = (char*)(xpvav + 1);
996 xpvav->xav_array = 0;
999 /* grab a new struct xpvhv from the free list, allocating more if necessary */
1008 xpvhv = PL_xpvhv_root;
1009 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
1014 /* return a struct xpvhv to the free list */
1017 S_del_xpvhv(pTHX_ XPVHV *p)
1020 p->xhv_array = (char*)PL_xpvhv_root;
1025 /* allocate another arena's worth of struct xpvhv */
1030 register XPVHV* xpvhv;
1031 register XPVHV* xpvhvend;
1032 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
1033 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
1034 PL_xpvhv_arenaroot = xpvhv;
1036 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
1037 PL_xpvhv_root = ++xpvhv;
1038 while (xpvhv < xpvhvend) {
1039 xpvhv->xhv_array = (char*)(xpvhv + 1);
1042 xpvhv->xhv_array = 0;
1045 /* grab a new struct xpvmg from the free list, allocating more if necessary */
1054 xpvmg = PL_xpvmg_root;
1055 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
1060 /* return a struct xpvmg to the free list */
1063 S_del_xpvmg(pTHX_ XPVMG *p)
1066 p->xpv_pv = (char*)PL_xpvmg_root;
1071 /* allocate another arena's worth of struct xpvmg */
1076 register XPVMG* xpvmg;
1077 register XPVMG* xpvmgend;
1078 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
1079 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
1080 PL_xpvmg_arenaroot = xpvmg;
1082 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
1083 PL_xpvmg_root = ++xpvmg;
1084 while (xpvmg < xpvmgend) {
1085 xpvmg->xpv_pv = (char*)(xpvmg + 1);
1091 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1100 xpvlv = PL_xpvlv_root;
1101 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
1106 /* return a struct xpvlv to the free list */
1109 S_del_xpvlv(pTHX_ XPVLV *p)
1112 p->xpv_pv = (char*)PL_xpvlv_root;
1117 /* allocate another arena's worth of struct xpvlv */
1122 register XPVLV* xpvlv;
1123 register XPVLV* xpvlvend;
1124 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
1125 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
1126 PL_xpvlv_arenaroot = xpvlv;
1128 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
1129 PL_xpvlv_root = ++xpvlv;
1130 while (xpvlv < xpvlvend) {
1131 xpvlv->xpv_pv = (char*)(xpvlv + 1);
1137 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1146 xpvbm = PL_xpvbm_root;
1147 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
1152 /* return a struct xpvbm to the free list */
1155 S_del_xpvbm(pTHX_ XPVBM *p)
1158 p->xpv_pv = (char*)PL_xpvbm_root;
1163 /* allocate another arena's worth of struct xpvbm */
1168 register XPVBM* xpvbm;
1169 register XPVBM* xpvbmend;
1170 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
1171 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
1172 PL_xpvbm_arenaroot = xpvbm;
1174 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
1175 PL_xpvbm_root = ++xpvbm;
1176 while (xpvbm < xpvbmend) {
1177 xpvbm->xpv_pv = (char*)(xpvbm + 1);
1183 #define my_safemalloc(s) (void*)safemalloc(s)
1184 #define my_safefree(p) safefree((char*)p)
1188 #define new_XIV() my_safemalloc(sizeof(XPVIV))
1189 #define del_XIV(p) my_safefree(p)
1191 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1192 #define del_XNV(p) my_safefree(p)
1194 #define new_XRV() my_safemalloc(sizeof(XRV))
1195 #define del_XRV(p) my_safefree(p)
1197 #define new_XPV() my_safemalloc(sizeof(XPV))
1198 #define del_XPV(p) my_safefree(p)
1200 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1201 #define del_XPVIV(p) my_safefree(p)
1203 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1204 #define del_XPVNV(p) my_safefree(p)
1206 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1207 #define del_XPVCV(p) my_safefree(p)
1209 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1210 #define del_XPVAV(p) my_safefree(p)
1212 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1213 #define del_XPVHV(p) my_safefree(p)
1215 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1216 #define del_XPVMG(p) my_safefree(p)
1218 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1219 #define del_XPVLV(p) my_safefree(p)
1221 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1222 #define del_XPVBM(p) my_safefree(p)
1226 #define new_XIV() (void*)new_xiv()
1227 #define del_XIV(p) del_xiv((XPVIV*) p)
1229 #define new_XNV() (void*)new_xnv()
1230 #define del_XNV(p) del_xnv((XPVNV*) p)
1232 #define new_XRV() (void*)new_xrv()
1233 #define del_XRV(p) del_xrv((XRV*) p)
1235 #define new_XPV() (void*)new_xpv()
1236 #define del_XPV(p) del_xpv((XPV *)p)
1238 #define new_XPVIV() (void*)new_xpviv()
1239 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
1241 #define new_XPVNV() (void*)new_xpvnv()
1242 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
1244 #define new_XPVCV() (void*)new_xpvcv()
1245 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
1247 #define new_XPVAV() (void*)new_xpvav()
1248 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
1250 #define new_XPVHV() (void*)new_xpvhv()
1251 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
1253 #define new_XPVMG() (void*)new_xpvmg()
1254 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
1256 #define new_XPVLV() (void*)new_xpvlv()
1257 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
1259 #define new_XPVBM() (void*)new_xpvbm()
1260 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
1264 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1265 #define del_XPVGV(p) my_safefree(p)
1267 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1268 #define del_XPVFM(p) my_safefree(p)
1270 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1271 #define del_XPVIO(p) my_safefree(p)
1274 =for apidoc sv_upgrade
1276 Upgrade an SV to a more complex form. Generally adds a new body type to the
1277 SV, then copies across as much information as possible from the old body.
1278 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1284 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1291 MAGIC* magic = NULL;
1294 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
1295 sv_force_normal(sv);
1298 if (SvTYPE(sv) == mt)
1302 (void)SvOOK_off(sv);
1304 switch (SvTYPE(sv)) {
1325 else if (mt < SVt_PVIV)
1342 pv = (char*)SvRV(sv);
1362 else if (mt == SVt_NV)
1373 del_XPVIV(SvANY(sv));
1383 del_XPVNV(SvANY(sv));
1391 magic = SvMAGIC(sv);
1392 stash = SvSTASH(sv);
1393 del_XPVMG(SvANY(sv));
1396 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1401 Perl_croak(aTHX_ "Can't upgrade to undef");
1403 SvANY(sv) = new_XIV();
1407 SvANY(sv) = new_XNV();
1411 SvANY(sv) = new_XRV();
1415 SvANY(sv) = new_XPV();
1421 SvANY(sv) = new_XPVIV();
1431 SvANY(sv) = new_XPVNV();
1439 SvANY(sv) = new_XPVMG();
1445 SvMAGIC(sv) = magic;
1446 SvSTASH(sv) = stash;
1449 SvANY(sv) = new_XPVLV();
1455 SvMAGIC(sv) = magic;
1456 SvSTASH(sv) = stash;
1463 SvANY(sv) = new_XPVAV();
1471 SvMAGIC(sv) = magic;
1472 SvSTASH(sv) = stash;
1478 SvANY(sv) = new_XPVHV();
1484 HvTOTALKEYS(sv) = 0;
1485 HvPLACEHOLDERS(sv) = 0;
1486 SvMAGIC(sv) = magic;
1487 SvSTASH(sv) = stash;
1494 SvANY(sv) = new_XPVCV();
1495 Zero(SvANY(sv), 1, XPVCV);
1501 SvMAGIC(sv) = magic;
1502 SvSTASH(sv) = stash;
1505 SvANY(sv) = new_XPVGV();
1511 SvMAGIC(sv) = magic;
1512 SvSTASH(sv) = stash;
1520 SvANY(sv) = new_XPVBM();
1526 SvMAGIC(sv) = magic;
1527 SvSTASH(sv) = stash;
1533 SvANY(sv) = new_XPVFM();
1534 Zero(SvANY(sv), 1, XPVFM);
1540 SvMAGIC(sv) = magic;
1541 SvSTASH(sv) = stash;
1544 SvANY(sv) = new_XPVIO();
1545 Zero(SvANY(sv), 1, XPVIO);
1551 SvMAGIC(sv) = magic;
1552 SvSTASH(sv) = stash;
1553 IoPAGE_LEN(sv) = 60;
1556 SvFLAGS(sv) &= ~SVTYPEMASK;
1562 =for apidoc sv_backoff
1564 Remove any string offset. You should normally use the C<SvOOK_off> macro
1571 Perl_sv_backoff(pTHX_ register SV *sv)
1575 char *s = SvPVX(sv);
1576 SvLEN(sv) += SvIVX(sv);
1577 SvPVX(sv) -= SvIVX(sv);
1579 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1581 SvFLAGS(sv) &= ~SVf_OOK;
1588 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1589 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1590 Use the C<SvGROW> wrapper instead.
1596 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1602 #ifdef HAS_64K_LIMIT
1603 if (newlen >= 0x10000) {
1604 PerlIO_printf(Perl_debug_log,
1605 "Allocation too large: %"UVxf"\n", (UV)newlen);
1608 #endif /* HAS_64K_LIMIT */
1611 if (SvTYPE(sv) < SVt_PV) {
1612 sv_upgrade(sv, SVt_PV);
1615 else if (SvOOK(sv)) { /* pv is offset? */
1618 if (newlen > SvLEN(sv))
1619 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1620 #ifdef HAS_64K_LIMIT
1621 if (newlen >= 0x10000)
1628 if (newlen > SvLEN(sv)) { /* need more room? */
1629 if (SvLEN(sv) && s) {
1631 STRLEN l = malloced_size((void*)SvPVX(sv));
1637 Renew(s,newlen,char);
1640 /* sv_force_normal_flags() must not try to unshare the new
1641 PVX we allocate below. AMS 20010713 */
1642 if (SvREADONLY(sv) && SvFAKE(sv)) {
1646 New(703, s, newlen, char);
1647 if (SvPVX(sv) && SvCUR(sv)) {
1648 Move(SvPVX(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1652 SvLEN_set(sv, newlen);
1658 =for apidoc sv_setiv
1660 Copies an integer into the given SV, upgrading first if necessary.
1661 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1667 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1669 SV_CHECK_THINKFIRST(sv);
1670 switch (SvTYPE(sv)) {
1672 sv_upgrade(sv, SVt_IV);
1675 sv_upgrade(sv, SVt_PVNV);
1679 sv_upgrade(sv, SVt_PVIV);
1688 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1691 (void)SvIOK_only(sv); /* validate number */
1697 =for apidoc sv_setiv_mg
1699 Like C<sv_setiv>, but also handles 'set' magic.
1705 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1712 =for apidoc sv_setuv
1714 Copies an unsigned integer into the given SV, upgrading first if necessary.
1715 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1721 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1723 /* With these two if statements:
1724 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1727 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1729 If you wish to remove them, please benchmark to see what the effect is
1731 if (u <= (UV)IV_MAX) {
1732 sv_setiv(sv, (IV)u);
1741 =for apidoc sv_setuv_mg
1743 Like C<sv_setuv>, but also handles 'set' magic.
1749 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1751 /* With these two if statements:
1752 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1755 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1757 If you wish to remove them, please benchmark to see what the effect is
1759 if (u <= (UV)IV_MAX) {
1760 sv_setiv(sv, (IV)u);
1770 =for apidoc sv_setnv
1772 Copies a double into the given SV, upgrading first if necessary.
1773 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1779 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1781 SV_CHECK_THINKFIRST(sv);
1782 switch (SvTYPE(sv)) {
1785 sv_upgrade(sv, SVt_NV);
1790 sv_upgrade(sv, SVt_PVNV);
1799 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1803 (void)SvNOK_only(sv); /* validate number */
1808 =for apidoc sv_setnv_mg
1810 Like C<sv_setnv>, but also handles 'set' magic.
1816 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1822 /* Print an "isn't numeric" warning, using a cleaned-up,
1823 * printable version of the offending string
1827 S_not_a_number(pTHX_ SV *sv)
1834 dsv = sv_2mortal(newSVpv("", 0));
1835 pv = sv_uni_display(dsv, sv, 10, 0);
1838 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1839 /* each *s can expand to 4 chars + "...\0",
1840 i.e. need room for 8 chars */
1843 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
1845 if (ch & 128 && !isPRINT_LC(ch)) {
1854 else if (ch == '\r') {
1858 else if (ch == '\f') {
1862 else if (ch == '\\') {
1866 else if (ch == '\0') {
1870 else if (isPRINT_LC(ch))
1887 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1888 "Argument \"%s\" isn't numeric in %s", pv,
1891 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1892 "Argument \"%s\" isn't numeric", pv);
1896 =for apidoc looks_like_number
1898 Test if the content of an SV looks like a number (or is a number).
1899 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1900 non-numeric warning), even if your atof() doesn't grok them.
1906 Perl_looks_like_number(pTHX_ SV *sv)
1908 register char *sbegin;
1915 else if (SvPOKp(sv))
1916 sbegin = SvPV(sv, len);
1918 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1919 return grok_number(sbegin, len, NULL);
1922 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1923 until proven guilty, assume that things are not that bad... */
1928 As 64 bit platforms often have an NV that doesn't preserve all bits of
1929 an IV (an assumption perl has been based on to date) it becomes necessary
1930 to remove the assumption that the NV always carries enough precision to
1931 recreate the IV whenever needed, and that the NV is the canonical form.
1932 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1933 precision as a side effect of conversion (which would lead to insanity
1934 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1935 1) to distinguish between IV/UV/NV slots that have cached a valid
1936 conversion where precision was lost and IV/UV/NV slots that have a
1937 valid conversion which has lost no precision
1938 2) to ensure that if a numeric conversion to one form is requested that
1939 would lose precision, the precise conversion (or differently
1940 imprecise conversion) is also performed and cached, to prevent
1941 requests for different numeric formats on the same SV causing
1942 lossy conversion chains. (lossless conversion chains are perfectly
1947 SvIOKp is true if the IV slot contains a valid value
1948 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1949 SvNOKp is true if the NV slot contains a valid value
1950 SvNOK is true only if the NV value is accurate
1953 while converting from PV to NV, check to see if converting that NV to an
1954 IV(or UV) would lose accuracy over a direct conversion from PV to
1955 IV(or UV). If it would, cache both conversions, return NV, but mark
1956 SV as IOK NOKp (ie not NOK).
1958 While converting from PV to IV, check to see if converting that IV to an
1959 NV would lose accuracy over a direct conversion from PV to NV. If it
1960 would, cache both conversions, flag similarly.
1962 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1963 correctly because if IV & NV were set NV *always* overruled.
1964 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1965 changes - now IV and NV together means that the two are interchangeable:
1966 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1968 The benefit of this is that operations such as pp_add know that if
1969 SvIOK is true for both left and right operands, then integer addition
1970 can be used instead of floating point (for cases where the result won't
1971 overflow). Before, floating point was always used, which could lead to
1972 loss of precision compared with integer addition.
1974 * making IV and NV equal status should make maths accurate on 64 bit
1976 * may speed up maths somewhat if pp_add and friends start to use
1977 integers when possible instead of fp. (Hopefully the overhead in
1978 looking for SvIOK and checking for overflow will not outweigh the
1979 fp to integer speedup)
1980 * will slow down integer operations (callers of SvIV) on "inaccurate"
1981 values, as the change from SvIOK to SvIOKp will cause a call into
1982 sv_2iv each time rather than a macro access direct to the IV slot
1983 * should speed up number->string conversion on integers as IV is
1984 favoured when IV and NV are equally accurate
1986 ####################################################################
1987 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1988 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1989 On the other hand, SvUOK is true iff UV.
1990 ####################################################################
1992 Your mileage will vary depending your CPU's relative fp to integer
1996 #ifndef NV_PRESERVES_UV
1997 # define IS_NUMBER_UNDERFLOW_IV 1
1998 # define IS_NUMBER_UNDERFLOW_UV 2
1999 # define IS_NUMBER_IV_AND_UV 2
2000 # define IS_NUMBER_OVERFLOW_IV 4
2001 # define IS_NUMBER_OVERFLOW_UV 5
2003 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2005 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2007 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2009 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2010 if (SvNVX(sv) < (NV)IV_MIN) {
2011 (void)SvIOKp_on(sv);
2014 return IS_NUMBER_UNDERFLOW_IV;
2016 if (SvNVX(sv) > (NV)UV_MAX) {
2017 (void)SvIOKp_on(sv);
2021 return IS_NUMBER_OVERFLOW_UV;
2023 (void)SvIOKp_on(sv);
2025 /* Can't use strtol etc to convert this string. (See truth table in
2027 if (SvNVX(sv) <= (UV)IV_MAX) {
2028 SvIVX(sv) = I_V(SvNVX(sv));
2029 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2030 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2032 /* Integer is imprecise. NOK, IOKp */
2034 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2037 SvUVX(sv) = U_V(SvNVX(sv));
2038 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2039 if (SvUVX(sv) == UV_MAX) {
2040 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2041 possibly be preserved by NV. Hence, it must be overflow.
2043 return IS_NUMBER_OVERFLOW_UV;
2045 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2047 /* Integer is imprecise. NOK, IOKp */
2049 return IS_NUMBER_OVERFLOW_IV;
2051 #endif /* !NV_PRESERVES_UV*/
2056 Return the integer value of an SV, doing any necessary string conversion,
2057 magic etc. Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2063 Perl_sv_2iv(pTHX_ register SV *sv)
2067 if (SvGMAGICAL(sv)) {
2072 return I_V(SvNVX(sv));
2074 if (SvPOKp(sv) && SvLEN(sv))
2077 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2078 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2084 if (SvTHINKFIRST(sv)) {
2087 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2088 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2089 return SvIV(tmpstr);
2090 return PTR2IV(SvRV(sv));
2092 if (SvREADONLY(sv) && SvFAKE(sv)) {
2093 sv_force_normal(sv);
2095 if (SvREADONLY(sv) && !SvOK(sv)) {
2096 if (ckWARN(WARN_UNINITIALIZED))
2103 return (IV)(SvUVX(sv));
2110 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2111 * without also getting a cached IV/UV from it at the same time
2112 * (ie PV->NV conversion should detect loss of accuracy and cache
2113 * IV or UV at same time to avoid this. NWC */
2115 if (SvTYPE(sv) == SVt_NV)
2116 sv_upgrade(sv, SVt_PVNV);
2118 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2119 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2120 certainly cast into the IV range at IV_MAX, whereas the correct
2121 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2123 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2124 SvIVX(sv) = I_V(SvNVX(sv));
2125 if (SvNVX(sv) == (NV) SvIVX(sv)
2126 #ifndef NV_PRESERVES_UV
2127 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2128 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2129 /* Don't flag it as "accurately an integer" if the number
2130 came from a (by definition imprecise) NV operation, and
2131 we're outside the range of NV integer precision */
2134 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2135 DEBUG_c(PerlIO_printf(Perl_debug_log,
2136 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2142 /* IV not precise. No need to convert from PV, as NV
2143 conversion would already have cached IV if it detected
2144 that PV->IV would be better than PV->NV->IV
2145 flags already correct - don't set public IOK. */
2146 DEBUG_c(PerlIO_printf(Perl_debug_log,
2147 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2152 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2153 but the cast (NV)IV_MIN rounds to a the value less (more
2154 negative) than IV_MIN which happens to be equal to SvNVX ??
2155 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2156 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2157 (NV)UVX == NVX are both true, but the values differ. :-(
2158 Hopefully for 2s complement IV_MIN is something like
2159 0x8000000000000000 which will be exact. NWC */
2162 SvUVX(sv) = U_V(SvNVX(sv));
2164 (SvNVX(sv) == (NV) SvUVX(sv))
2165 #ifndef NV_PRESERVES_UV
2166 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2167 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2168 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2169 /* Don't flag it as "accurately an integer" if the number
2170 came from a (by definition imprecise) NV operation, and
2171 we're outside the range of NV integer precision */
2177 DEBUG_c(PerlIO_printf(Perl_debug_log,
2178 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2182 return (IV)SvUVX(sv);
2185 else if (SvPOKp(sv) && SvLEN(sv)) {
2187 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2188 /* We want to avoid a possible problem when we cache an IV which
2189 may be later translated to an NV, and the resulting NV is not
2190 the same as the direct translation of the initial string
2191 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2192 be careful to ensure that the value with the .456 is around if the
2193 NV value is requested in the future).
2195 This means that if we cache such an IV, we need to cache the
2196 NV as well. Moreover, we trade speed for space, and do not
2197 cache the NV if we are sure it's not needed.
2200 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2201 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2202 == IS_NUMBER_IN_UV) {
2203 /* It's definitely an integer, only upgrade to PVIV */
2204 if (SvTYPE(sv) < SVt_PVIV)
2205 sv_upgrade(sv, SVt_PVIV);
2207 } else if (SvTYPE(sv) < SVt_PVNV)
2208 sv_upgrade(sv, SVt_PVNV);
2210 /* If NV preserves UV then we only use the UV value if we know that
2211 we aren't going to call atof() below. If NVs don't preserve UVs
2212 then the value returned may have more precision than atof() will
2213 return, even though value isn't perfectly accurate. */
2214 if ((numtype & (IS_NUMBER_IN_UV
2215 #ifdef NV_PRESERVES_UV
2218 )) == IS_NUMBER_IN_UV) {
2219 /* This won't turn off the public IOK flag if it was set above */
2220 (void)SvIOKp_on(sv);
2222 if (!(numtype & IS_NUMBER_NEG)) {
2224 if (value <= (UV)IV_MAX) {
2225 SvIVX(sv) = (IV)value;
2231 /* 2s complement assumption */
2232 if (value <= (UV)IV_MIN) {
2233 SvIVX(sv) = -(IV)value;
2235 /* Too negative for an IV. This is a double upgrade, but
2236 I'm assuming it will be rare. */
2237 if (SvTYPE(sv) < SVt_PVNV)
2238 sv_upgrade(sv, SVt_PVNV);
2242 SvNVX(sv) = -(NV)value;
2247 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2248 will be in the previous block to set the IV slot, and the next
2249 block to set the NV slot. So no else here. */
2251 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2252 != IS_NUMBER_IN_UV) {
2253 /* It wasn't an (integer that doesn't overflow the UV). */
2254 SvNVX(sv) = Atof(SvPVX(sv));
2256 if (! numtype && ckWARN(WARN_NUMERIC))
2259 #if defined(USE_LONG_DOUBLE)
2260 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2261 PTR2UV(sv), SvNVX(sv)));
2263 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2264 PTR2UV(sv), SvNVX(sv)));
2268 #ifdef NV_PRESERVES_UV
2269 (void)SvIOKp_on(sv);
2271 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2272 SvIVX(sv) = I_V(SvNVX(sv));
2273 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2276 /* Integer is imprecise. NOK, IOKp */
2278 /* UV will not work better than IV */
2280 if (SvNVX(sv) > (NV)UV_MAX) {
2282 /* Integer is inaccurate. NOK, IOKp, is UV */
2286 SvUVX(sv) = U_V(SvNVX(sv));
2287 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2288 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2292 /* Integer is imprecise. NOK, IOKp, is UV */
2298 #else /* NV_PRESERVES_UV */
2299 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2300 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2301 /* The IV slot will have been set from value returned by
2302 grok_number above. The NV slot has just been set using
2305 assert (SvIOKp(sv));
2307 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2308 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2309 /* Small enough to preserve all bits. */
2310 (void)SvIOKp_on(sv);
2312 SvIVX(sv) = I_V(SvNVX(sv));
2313 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2315 /* Assumption: first non-preserved integer is < IV_MAX,
2316 this NV is in the preserved range, therefore: */
2317 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2319 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);
2323 0 0 already failed to read UV.
2324 0 1 already failed to read UV.
2325 1 0 you won't get here in this case. IV/UV
2326 slot set, public IOK, Atof() unneeded.
2327 1 1 already read UV.
2328 so there's no point in sv_2iuv_non_preserve() attempting
2329 to use atol, strtol, strtoul etc. */
2330 if (sv_2iuv_non_preserve (sv, numtype)
2331 >= IS_NUMBER_OVERFLOW_IV)
2335 #endif /* NV_PRESERVES_UV */
2338 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2340 if (SvTYPE(sv) < SVt_IV)
2341 /* Typically the caller expects that sv_any is not NULL now. */
2342 sv_upgrade(sv, SVt_IV);
2345 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2346 PTR2UV(sv),SvIVX(sv)));
2347 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2353 Return the unsigned integer value of an SV, doing any necessary string
2354 conversion, magic etc. Normally used via the C<SvUV(sv)> and C<SvUVx(sv)>
2361 Perl_sv_2uv(pTHX_ register SV *sv)
2365 if (SvGMAGICAL(sv)) {
2370 return U_V(SvNVX(sv));
2371 if (SvPOKp(sv) && SvLEN(sv))
2374 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2375 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2381 if (SvTHINKFIRST(sv)) {
2384 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2385 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2386 return SvUV(tmpstr);
2387 return PTR2UV(SvRV(sv));
2389 if (SvREADONLY(sv) && SvFAKE(sv)) {
2390 sv_force_normal(sv);
2392 if (SvREADONLY(sv) && !SvOK(sv)) {
2393 if (ckWARN(WARN_UNINITIALIZED))
2403 return (UV)SvIVX(sv);
2407 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2408 * without also getting a cached IV/UV from it at the same time
2409 * (ie PV->NV conversion should detect loss of accuracy and cache
2410 * IV or UV at same time to avoid this. */
2411 /* IV-over-UV optimisation - choose to cache IV if possible */
2413 if (SvTYPE(sv) == SVt_NV)
2414 sv_upgrade(sv, SVt_PVNV);
2416 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2417 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2418 SvIVX(sv) = I_V(SvNVX(sv));
2419 if (SvNVX(sv) == (NV) SvIVX(sv)
2420 #ifndef NV_PRESERVES_UV
2421 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2422 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2423 /* Don't flag it as "accurately an integer" if the number
2424 came from a (by definition imprecise) NV operation, and
2425 we're outside the range of NV integer precision */
2428 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2429 DEBUG_c(PerlIO_printf(Perl_debug_log,
2430 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2436 /* IV not precise. No need to convert from PV, as NV
2437 conversion would already have cached IV if it detected
2438 that PV->IV would be better than PV->NV->IV
2439 flags already correct - don't set public IOK. */
2440 DEBUG_c(PerlIO_printf(Perl_debug_log,
2441 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2446 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2447 but the cast (NV)IV_MIN rounds to a the value less (more
2448 negative) than IV_MIN which happens to be equal to SvNVX ??
2449 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2450 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2451 (NV)UVX == NVX are both true, but the values differ. :-(
2452 Hopefully for 2s complement IV_MIN is something like
2453 0x8000000000000000 which will be exact. NWC */
2456 SvUVX(sv) = U_V(SvNVX(sv));
2458 (SvNVX(sv) == (NV) SvUVX(sv))
2459 #ifndef NV_PRESERVES_UV
2460 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2461 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2462 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2463 /* Don't flag it as "accurately an integer" if the number
2464 came from a (by definition imprecise) NV operation, and
2465 we're outside the range of NV integer precision */
2470 DEBUG_c(PerlIO_printf(Perl_debug_log,
2471 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2477 else if (SvPOKp(sv) && SvLEN(sv)) {
2479 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2481 /* We want to avoid a possible problem when we cache a UV which
2482 may be later translated to an NV, and the resulting NV is not
2483 the translation of the initial data.
2485 This means that if we cache such a UV, we need to cache the
2486 NV as well. Moreover, we trade speed for space, and do not
2487 cache the NV if not needed.
2490 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2491 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2492 == IS_NUMBER_IN_UV) {
2493 /* It's definitely an integer, only upgrade to PVIV */
2494 if (SvTYPE(sv) < SVt_PVIV)
2495 sv_upgrade(sv, SVt_PVIV);
2497 } else if (SvTYPE(sv) < SVt_PVNV)
2498 sv_upgrade(sv, SVt_PVNV);
2500 /* If NV preserves UV then we only use the UV value if we know that
2501 we aren't going to call atof() below. If NVs don't preserve UVs
2502 then the value returned may have more precision than atof() will
2503 return, even though it isn't accurate. */
2504 if ((numtype & (IS_NUMBER_IN_UV
2505 #ifdef NV_PRESERVES_UV
2508 )) == IS_NUMBER_IN_UV) {
2509 /* This won't turn off the public IOK flag if it was set above */
2510 (void)SvIOKp_on(sv);
2512 if (!(numtype & IS_NUMBER_NEG)) {
2514 if (value <= (UV)IV_MAX) {
2515 SvIVX(sv) = (IV)value;
2517 /* it didn't overflow, and it was positive. */
2522 /* 2s complement assumption */
2523 if (value <= (UV)IV_MIN) {
2524 SvIVX(sv) = -(IV)value;
2526 /* Too negative for an IV. This is a double upgrade, but
2527 I'm assuming it will be rare. */
2528 if (SvTYPE(sv) < SVt_PVNV)
2529 sv_upgrade(sv, SVt_PVNV);
2533 SvNVX(sv) = -(NV)value;
2539 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2540 != IS_NUMBER_IN_UV) {
2541 /* It wasn't an integer, or it overflowed the UV. */
2542 SvNVX(sv) = Atof(SvPVX(sv));
2544 if (! numtype && ckWARN(WARN_NUMERIC))
2547 #if defined(USE_LONG_DOUBLE)
2548 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2549 PTR2UV(sv), SvNVX(sv)));
2551 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
2552 PTR2UV(sv), SvNVX(sv)));
2555 #ifdef NV_PRESERVES_UV
2556 (void)SvIOKp_on(sv);
2558 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2559 SvIVX(sv) = I_V(SvNVX(sv));
2560 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2563 /* Integer is imprecise. NOK, IOKp */
2565 /* UV will not work better than IV */
2567 if (SvNVX(sv) > (NV)UV_MAX) {
2569 /* Integer is inaccurate. NOK, IOKp, is UV */
2573 SvUVX(sv) = U_V(SvNVX(sv));
2574 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2575 NV preservse UV so can do correct comparison. */
2576 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2580 /* Integer is imprecise. NOK, IOKp, is UV */
2585 #else /* NV_PRESERVES_UV */
2586 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2587 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2588 /* The UV slot will have been set from value returned by
2589 grok_number above. The NV slot has just been set using
2592 assert (SvIOKp(sv));
2594 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2595 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2596 /* Small enough to preserve all bits. */
2597 (void)SvIOKp_on(sv);
2599 SvIVX(sv) = I_V(SvNVX(sv));
2600 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2602 /* Assumption: first non-preserved integer is < IV_MAX,
2603 this NV is in the preserved range, therefore: */
2604 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2606 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);
2609 sv_2iuv_non_preserve (sv, numtype);
2611 #endif /* NV_PRESERVES_UV */
2615 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2616 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2619 if (SvTYPE(sv) < SVt_IV)
2620 /* Typically the caller expects that sv_any is not NULL now. */
2621 sv_upgrade(sv, SVt_IV);
2625 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2626 PTR2UV(sv),SvUVX(sv)));
2627 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2633 Return the num value of an SV, doing any necessary string or integer
2634 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2641 Perl_sv_2nv(pTHX_ register SV *sv)
2645 if (SvGMAGICAL(sv)) {
2649 if (SvPOKp(sv) && SvLEN(sv)) {
2650 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
2651 !grok_number(SvPVX(sv), SvCUR(sv), NULL))
2653 return Atof(SvPVX(sv));
2657 return (NV)SvUVX(sv);
2659 return (NV)SvIVX(sv);
2662 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2663 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2669 if (SvTHINKFIRST(sv)) {
2672 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2673 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2674 return SvNV(tmpstr);
2675 return PTR2NV(SvRV(sv));
2677 if (SvREADONLY(sv) && SvFAKE(sv)) {
2678 sv_force_normal(sv);
2680 if (SvREADONLY(sv) && !SvOK(sv)) {
2681 if (ckWARN(WARN_UNINITIALIZED))
2686 if (SvTYPE(sv) < SVt_NV) {
2687 if (SvTYPE(sv) == SVt_IV)
2688 sv_upgrade(sv, SVt_PVNV);
2690 sv_upgrade(sv, SVt_NV);
2691 #ifdef USE_LONG_DOUBLE
2693 STORE_NUMERIC_LOCAL_SET_STANDARD();
2694 PerlIO_printf(Perl_debug_log,
2695 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2696 PTR2UV(sv), SvNVX(sv));
2697 RESTORE_NUMERIC_LOCAL();
2701 STORE_NUMERIC_LOCAL_SET_STANDARD();
2702 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2703 PTR2UV(sv), SvNVX(sv));
2704 RESTORE_NUMERIC_LOCAL();
2708 else if (SvTYPE(sv) < SVt_PVNV)
2709 sv_upgrade(sv, SVt_PVNV);
2714 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2715 #ifdef NV_PRESERVES_UV
2718 /* Only set the public NV OK flag if this NV preserves the IV */
2719 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2720 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2721 : (SvIVX(sv) == I_V(SvNVX(sv))))
2727 else if (SvPOKp(sv) && SvLEN(sv)) {
2729 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2730 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
2732 #ifdef NV_PRESERVES_UV
2733 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2734 == IS_NUMBER_IN_UV) {
2735 /* It's definitely an integer */
2736 SvNVX(sv) = (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value;
2738 SvNVX(sv) = Atof(SvPVX(sv));
2741 SvNVX(sv) = Atof(SvPVX(sv));
2742 /* Only set the public NV OK flag if this NV preserves the value in
2743 the PV at least as well as an IV/UV would.
2744 Not sure how to do this 100% reliably. */
2745 /* if that shift count is out of range then Configure's test is
2746 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2748 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2749 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2750 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2751 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2752 /* Can't use strtol etc to convert this string, so don't try.
2753 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2756 /* value has been set. It may not be precise. */
2757 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2758 /* 2s complement assumption for (UV)IV_MIN */
2759 SvNOK_on(sv); /* Integer is too negative. */
2764 if (numtype & IS_NUMBER_NEG) {
2765 SvIVX(sv) = -(IV)value;
2766 } else if (value <= (UV)IV_MAX) {
2767 SvIVX(sv) = (IV)value;
2773 if (numtype & IS_NUMBER_NOT_INT) {
2774 /* I believe that even if the original PV had decimals,
2775 they are lost beyond the limit of the FP precision.
2776 However, neither is canonical, so both only get p
2777 flags. NWC, 2000/11/25 */
2778 /* Both already have p flags, so do nothing */
2781 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2782 if (SvIVX(sv) == I_V(nv)) {
2787 /* It had no "." so it must be integer. */
2790 /* between IV_MAX and NV(UV_MAX).
2791 Could be slightly > UV_MAX */
2793 if (numtype & IS_NUMBER_NOT_INT) {
2794 /* UV and NV both imprecise. */
2796 UV nv_as_uv = U_V(nv);
2798 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2809 #endif /* NV_PRESERVES_UV */
2812 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2814 if (SvTYPE(sv) < SVt_NV)
2815 /* Typically the caller expects that sv_any is not NULL now. */
2816 /* XXX Ilya implies that this is a bug in callers that assume this
2817 and ideally should be fixed. */
2818 sv_upgrade(sv, SVt_NV);
2821 #if defined(USE_LONG_DOUBLE)
2823 STORE_NUMERIC_LOCAL_SET_STANDARD();
2824 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2825 PTR2UV(sv), SvNVX(sv));
2826 RESTORE_NUMERIC_LOCAL();
2830 STORE_NUMERIC_LOCAL_SET_STANDARD();
2831 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2832 PTR2UV(sv), SvNVX(sv));
2833 RESTORE_NUMERIC_LOCAL();
2839 /* asIV(): extract an integer from the string value of an SV.
2840 * Caller must validate PVX */
2843 S_asIV(pTHX_ SV *sv)
2846 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2848 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2849 == IS_NUMBER_IN_UV) {
2850 /* It's definitely an integer */
2851 if (numtype & IS_NUMBER_NEG) {
2852 if (value < (UV)IV_MIN)
2855 if (value < (UV)IV_MAX)
2860 if (ckWARN(WARN_NUMERIC))
2863 return I_V(Atof(SvPVX(sv)));
2866 /* asUV(): extract an unsigned integer from the string value of an SV
2867 * Caller must validate PVX */
2870 S_asUV(pTHX_ SV *sv)
2873 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2875 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2876 == IS_NUMBER_IN_UV) {
2877 /* It's definitely an integer */
2878 if (!(numtype & IS_NUMBER_NEG))
2882 if (ckWARN(WARN_NUMERIC))
2885 return U_V(Atof(SvPVX(sv)));
2889 =for apidoc sv_2pv_nolen
2891 Like C<sv_2pv()>, but doesn't return the length too. You should usually
2892 use the macro wrapper C<SvPV_nolen(sv)> instead.
2897 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2900 return sv_2pv(sv, &n_a);
2903 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2904 * UV as a string towards the end of buf, and return pointers to start and
2907 * We assume that buf is at least TYPE_CHARS(UV) long.
2911 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2913 char *ptr = buf + TYPE_CHARS(UV);
2927 *--ptr = '0' + (char)(uv % 10);
2935 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
2936 * this function provided for binary compatibility only
2940 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2942 return sv_2pv_flags(sv, lp, SV_GMAGIC);
2946 =for apidoc sv_2pv_flags
2948 Returns a pointer to the string value of an SV, and sets *lp to its length.
2949 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2951 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2952 usually end up here too.
2958 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2963 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2964 char *tmpbuf = tbuf;
2970 if (SvGMAGICAL(sv)) {
2971 if (flags & SV_GMAGIC)
2979 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2981 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2986 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2991 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2992 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2999 if (SvTHINKFIRST(sv)) {
3002 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3003 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3004 char *pv = SvPV(tmpstr, *lp);
3018 switch (SvTYPE(sv)) {
3020 if ( ((SvFLAGS(sv) &
3021 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3022 == (SVs_OBJECT|SVs_SMG))
3023 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3024 regexp *re = (regexp *)mg->mg_obj;
3027 char *fptr = "msix";
3032 char need_newline = 0;
3033 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3035 while((ch = *fptr++)) {
3037 reflags[left++] = ch;
3040 reflags[right--] = ch;
3045 reflags[left] = '-';
3049 mg->mg_len = re->prelen + 4 + left;
3051 * If /x was used, we have to worry about a regex
3052 * ending with a comment later being embedded
3053 * within another regex. If so, we don't want this
3054 * regex's "commentization" to leak out to the
3055 * right part of the enclosing regex, we must cap
3056 * it with a newline.
3058 * So, if /x was used, we scan backwards from the
3059 * end of the regex. If we find a '#' before we
3060 * find a newline, we need to add a newline
3061 * ourself. If we find a '\n' first (or if we
3062 * don't find '#' or '\n'), we don't need to add
3063 * anything. -jfriedl
3065 if (PMf_EXTENDED & re->reganch)
3067 char *endptr = re->precomp + re->prelen;
3068 while (endptr >= re->precomp)
3070 char c = *(endptr--);
3072 break; /* don't need another */
3074 /* we end while in a comment, so we
3076 mg->mg_len++; /* save space for it */
3077 need_newline = 1; /* note to add it */
3083 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3084 Copy("(?", mg->mg_ptr, 2, char);
3085 Copy(reflags, mg->mg_ptr+2, left, char);
3086 Copy(":", mg->mg_ptr+left+2, 1, char);
3087 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3089 mg->mg_ptr[mg->mg_len - 2] = '\n';
3090 mg->mg_ptr[mg->mg_len - 1] = ')';
3091 mg->mg_ptr[mg->mg_len] = 0;
3093 PL_reginterp_cnt += re->program[0].next_off;
3095 if (re->reganch & ROPT_UTF8)
3110 case SVt_PVBM: if (SvROK(sv))
3113 s = "SCALAR"; break;
3114 case SVt_PVLV: s = SvROK(sv) ? "REF"
3115 /* tied lvalues should appear to be
3116 * scalars for backwards compatitbility */
3117 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3118 ? "SCALAR" : "LVALUE"; break;
3119 case SVt_PVAV: s = "ARRAY"; break;
3120 case SVt_PVHV: s = "HASH"; break;
3121 case SVt_PVCV: s = "CODE"; break;
3122 case SVt_PVGV: s = "GLOB"; break;
3123 case SVt_PVFM: s = "FORMAT"; break;
3124 case SVt_PVIO: s = "IO"; break;
3125 default: s = "UNKNOWN"; break;
3129 HV *svs = SvSTASH(sv);
3132 /* [20011101.072] This bandaid for C<package;>
3133 should eventually be removed. AMS 20011103 */
3134 (svs ? HvNAME(svs) : "<none>"), s
3139 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
3145 if (SvREADONLY(sv) && !SvOK(sv)) {
3146 if (ckWARN(WARN_UNINITIALIZED))
3152 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3153 /* I'm assuming that if both IV and NV are equally valid then
3154 converting the IV is going to be more efficient */
3155 U32 isIOK = SvIOK(sv);
3156 U32 isUIOK = SvIsUV(sv);
3157 char buf[TYPE_CHARS(UV)];
3160 if (SvTYPE(sv) < SVt_PVIV)
3161 sv_upgrade(sv, SVt_PVIV);
3163 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3165 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3166 SvGROW(sv, (STRLEN)(ebuf - ptr + 1)); /* inlined from sv_setpvn */
3167 Move(ptr,SvPVX(sv),ebuf - ptr,char);
3168 SvCUR_set(sv, ebuf - ptr);
3178 else if (SvNOKp(sv)) {
3179 if (SvTYPE(sv) < SVt_PVNV)
3180 sv_upgrade(sv, SVt_PVNV);
3181 /* The +20 is pure guesswork. Configure test needed. --jhi */
3182 SvGROW(sv, NV_DIG + 20);
3184 olderrno = errno; /* some Xenix systems wipe out errno here */
3186 if (SvNVX(sv) == 0.0)
3187 (void)strcpy(s,"0");
3191 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3194 #ifdef FIXNEGATIVEZERO
3195 if (*s == '-' && s[1] == '0' && !s[2])
3205 if (ckWARN(WARN_UNINITIALIZED)
3206 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3209 if (SvTYPE(sv) < SVt_PV)
3210 /* Typically the caller expects that sv_any is not NULL now. */
3211 sv_upgrade(sv, SVt_PV);
3214 *lp = s - SvPVX(sv);
3217 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3218 PTR2UV(sv),SvPVX(sv)));
3222 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3223 /* Sneaky stuff here */
3227 tsv = newSVpv(tmpbuf, 0);
3243 len = strlen(tmpbuf);
3245 #ifdef FIXNEGATIVEZERO
3246 if (len == 2 && t[0] == '-' && t[1] == '0') {
3251 (void)SvUPGRADE(sv, SVt_PV);
3253 s = SvGROW(sv, len + 1);
3262 =for apidoc sv_copypv
3264 Copies a stringified representation of the source SV into the
3265 destination SV. Automatically performs any necessary mg_get and
3266 coercion of numeric values into strings. Guaranteed to preserve
3267 UTF-8 flag even from overloaded objects. Similar in nature to
3268 sv_2pv[_flags] but operates directly on an SV instead of just the
3269 string. Mostly uses sv_2pv_flags to do its work, except when that
3270 would lose the UTF-8'ness of the PV.
3276 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3281 sv_setpvn(dsv,s,len);
3289 =for apidoc sv_2pvbyte_nolen
3291 Return a pointer to the byte-encoded representation of the SV.
3292 May cause the SV to be downgraded from UTF-8 as a side-effect.
3294 Usually accessed via the C<SvPVbyte_nolen> macro.
3300 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3303 return sv_2pvbyte(sv, &n_a);
3307 =for apidoc sv_2pvbyte
3309 Return a pointer to the byte-encoded representation of the SV, and set *lp
3310 to its length. May cause the SV to be downgraded from UTF-8 as a
3313 Usually accessed via the C<SvPVbyte> macro.
3319 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3321 sv_utf8_downgrade(sv,0);
3322 return SvPV(sv,*lp);
3326 =for apidoc sv_2pvutf8_nolen
3328 Return a pointer to the UTF-8-encoded representation of the SV.
3329 May cause the SV to be upgraded to UTF-8 as a side-effect.
3331 Usually accessed via the C<SvPVutf8_nolen> macro.
3337 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3340 return sv_2pvutf8(sv, &n_a);
3344 =for apidoc sv_2pvutf8
3346 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3347 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3349 Usually accessed via the C<SvPVutf8> macro.
3355 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3357 sv_utf8_upgrade(sv);
3358 return SvPV(sv,*lp);
3362 =for apidoc sv_2bool
3364 This function is only called on magical items, and is only used by
3365 sv_true() or its macro equivalent.
3371 Perl_sv_2bool(pTHX_ register SV *sv)
3380 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3381 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3382 return (bool)SvTRUE(tmpsv);
3383 return SvRV(sv) != 0;
3386 register XPV* Xpvtmp;
3387 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3388 (*Xpvtmp->xpv_pv > '0' ||
3389 Xpvtmp->xpv_cur > 1 ||
3390 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
3397 return SvIVX(sv) != 0;
3400 return SvNVX(sv) != 0.0;
3407 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3408 * this function provided for binary compatibility only
3413 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3415 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3419 =for apidoc sv_utf8_upgrade
3421 Converts the PV of an SV to its UTF-8-encoded form.
3422 Forces the SV to string form if it is not already.
3423 Always sets the SvUTF8 flag to avoid future validity checks even
3424 if all the bytes have hibit clear.
3426 This is not as a general purpose byte encoding to Unicode interface:
3427 use the Encode extension for that.
3429 =for apidoc sv_utf8_upgrade_flags
3431 Converts the PV of an SV to its UTF-8-encoded form.
3432 Forces the SV to string form if it is not already.
3433 Always sets the SvUTF8 flag to avoid future validity checks even
3434 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3435 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3436 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3438 This is not as a general purpose byte encoding to Unicode interface:
3439 use the Encode extension for that.
3445 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3452 (void) SvPV_force(sv,len);
3460 if (SvREADONLY(sv) && SvFAKE(sv)) {
3461 sv_force_normal(sv);
3464 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3465 sv_recode_to_utf8(sv, PL_encoding);
3466 else { /* Assume Latin-1/EBCDIC */
3467 /* This function could be much more efficient if we
3468 * had a FLAG in SVs to signal if there are any hibit
3469 * chars in the PV. Given that there isn't such a flag
3470 * make the loop as fast as possible. */
3471 s = (U8 *) SvPVX(sv);
3472 e = (U8 *) SvEND(sv);
3476 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3481 (void)SvOOK_off(sv);
3483 len = SvCUR(sv) + 1; /* Plus the \0 */
3484 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
3485 SvCUR(sv) = len - 1;
3487 Safefree(s); /* No longer using what was there before. */
3488 SvLEN(sv) = len; /* No longer know the real size. */
3490 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3498 =for apidoc sv_utf8_downgrade
3500 Attempts to convert the PV of an SV from characters to bytes.
3501 If the PV contains a character beyond byte, this conversion will fail;
3502 in this case, either returns false or, if C<fail_ok> is not
3505 This is not as a general purpose Unicode to byte encoding interface:
3506 use the Encode extension for that.
3512 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3514 if (SvPOKp(sv) && SvUTF8(sv)) {
3519 if (SvREADONLY(sv) && SvFAKE(sv))
3520 sv_force_normal(sv);
3521 s = (U8 *) SvPV(sv, len);
3522 if (!utf8_to_bytes(s, &len)) {
3527 Perl_croak(aTHX_ "Wide character in %s",
3530 Perl_croak(aTHX_ "Wide character");
3541 =for apidoc sv_utf8_encode
3543 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3544 flag off so that it looks like octets again.
3550 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3552 (void) sv_utf8_upgrade(sv);
3554 sv_force_normal_flags(sv, 0);
3556 if (SvREADONLY(sv)) {
3557 Perl_croak(aTHX_ PL_no_modify);
3563 =for apidoc sv_utf8_decode
3565 If the PV of the SV is an octet sequence in UTF-8
3566 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3567 so that it looks like a character. If the PV contains only single-byte
3568 characters, the C<SvUTF8> flag stays being off.
3569 Scans PV for validity and returns false if the PV is invalid UTF-8.
3575 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3581 /* The octets may have got themselves encoded - get them back as
3584 if (!sv_utf8_downgrade(sv, TRUE))
3587 /* it is actually just a matter of turning the utf8 flag on, but
3588 * we want to make sure everything inside is valid utf8 first.
3590 c = (U8 *) SvPVX(sv);
3591 if (!is_utf8_string(c, SvCUR(sv)+1))
3593 e = (U8 *) SvEND(sv);
3596 if (!UTF8_IS_INVARIANT(ch)) {
3605 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
3606 * this function provided for binary compatibility only
3610 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3612 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
3616 =for apidoc sv_setsv
3618 Copies the contents of the source SV C<ssv> into the destination SV
3619 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3620 function if the source SV needs to be reused. Does not handle 'set' magic.
3621 Loosely speaking, it performs a copy-by-value, obliterating any previous
3622 content of the destination.
3624 You probably want to use one of the assortment of wrappers, such as
3625 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3626 C<SvSetMagicSV_nosteal>.
3628 =for apidoc sv_setsv_flags
3630 Copies the contents of the source SV C<ssv> into the destination SV
3631 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3632 function if the source SV needs to be reused. Does not handle 'set' magic.
3633 Loosely speaking, it performs a copy-by-value, obliterating any previous
3634 content of the destination.
3635 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3636 C<ssv> if appropriate, else not. C<sv_setsv> and C<sv_setsv_nomg> are
3637 implemented in terms of this function.
3639 You probably want to use one of the assortment of wrappers, such as
3640 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3641 C<SvSetMagicSV_nosteal>.
3643 This is the primary function for copying scalars, and most other
3644 copy-ish functions and macros use this underneath.
3650 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3652 register U32 sflags;
3658 SV_CHECK_THINKFIRST(dstr);
3660 sstr = &PL_sv_undef;
3661 stype = SvTYPE(sstr);
3662 dtype = SvTYPE(dstr);
3667 /* need to nuke the magic */
3669 SvRMAGICAL_off(dstr);
3672 /* There's a lot of redundancy below but we're going for speed here */
3677 if (dtype != SVt_PVGV) {
3678 (void)SvOK_off(dstr);
3686 sv_upgrade(dstr, SVt_IV);
3689 sv_upgrade(dstr, SVt_PVNV);
3693 sv_upgrade(dstr, SVt_PVIV);
3696 (void)SvIOK_only(dstr);
3697 SvIVX(dstr) = SvIVX(sstr);
3700 if (SvTAINTED(sstr))
3711 sv_upgrade(dstr, SVt_NV);
3716 sv_upgrade(dstr, SVt_PVNV);
3719 SvNVX(dstr) = SvNVX(sstr);
3720 (void)SvNOK_only(dstr);
3721 if (SvTAINTED(sstr))
3729 sv_upgrade(dstr, SVt_RV);
3730 else if (dtype == SVt_PVGV &&
3731 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3734 if (GvIMPORTED(dstr) != GVf_IMPORTED
3735 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3737 GvIMPORTED_on(dstr);
3748 sv_upgrade(dstr, SVt_PV);
3751 if (dtype < SVt_PVIV)
3752 sv_upgrade(dstr, SVt_PVIV);
3755 if (dtype < SVt_PVNV)
3756 sv_upgrade(dstr, SVt_PVNV);
3763 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3766 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3770 if (dtype <= SVt_PVGV) {
3772 if (dtype != SVt_PVGV) {
3773 char *name = GvNAME(sstr);
3774 STRLEN len = GvNAMELEN(sstr);
3775 sv_upgrade(dstr, SVt_PVGV);
3776 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
3777 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3778 GvNAME(dstr) = savepvn(name, len);
3779 GvNAMELEN(dstr) = len;
3780 SvFAKE_on(dstr); /* can coerce to non-glob */
3782 /* ahem, death to those who redefine active sort subs */
3783 else if (PL_curstackinfo->si_type == PERLSI_SORT
3784 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3785 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3788 #ifdef GV_UNIQUE_CHECK
3789 if (GvUNIQUE((GV*)dstr)) {
3790 Perl_croak(aTHX_ PL_no_modify);
3794 (void)SvOK_off(dstr);
3795 GvINTRO_off(dstr); /* one-shot flag */
3797 GvGP(dstr) = gp_ref(GvGP(sstr));
3798 if (SvTAINTED(sstr))
3800 if (GvIMPORTED(dstr) != GVf_IMPORTED
3801 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3803 GvIMPORTED_on(dstr);
3811 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3813 if ((int)SvTYPE(sstr) != stype) {
3814 stype = SvTYPE(sstr);
3815 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3819 if (stype == SVt_PVLV)
3820 (void)SvUPGRADE(dstr, SVt_PVNV);
3822 (void)SvUPGRADE(dstr, (U32)stype);
3825 sflags = SvFLAGS(sstr);
3827 if (sflags & SVf_ROK) {
3828 if (dtype >= SVt_PV) {
3829 if (dtype == SVt_PVGV) {
3830 SV *sref = SvREFCNT_inc(SvRV(sstr));
3832 int intro = GvINTRO(dstr);
3834 #ifdef GV_UNIQUE_CHECK
3835 if (GvUNIQUE((GV*)dstr)) {
3836 Perl_croak(aTHX_ PL_no_modify);
3841 GvINTRO_off(dstr); /* one-shot flag */
3842 GvLINE(dstr) = CopLINE(PL_curcop);
3843 GvEGV(dstr) = (GV*)dstr;
3846 switch (SvTYPE(sref)) {
3849 SAVEGENERICSV(GvAV(dstr));
3851 dref = (SV*)GvAV(dstr);
3852 GvAV(dstr) = (AV*)sref;
3853 if (!GvIMPORTED_AV(dstr)
3854 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3856 GvIMPORTED_AV_on(dstr);
3861 SAVEGENERICSV(GvHV(dstr));
3863 dref = (SV*)GvHV(dstr);
3864 GvHV(dstr) = (HV*)sref;
3865 if (!GvIMPORTED_HV(dstr)
3866 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3868 GvIMPORTED_HV_on(dstr);
3873 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3874 SvREFCNT_dec(GvCV(dstr));
3875 GvCV(dstr) = Nullcv;
3876 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3877 PL_sub_generation++;
3879 SAVEGENERICSV(GvCV(dstr));
3882 dref = (SV*)GvCV(dstr);
3883 if (GvCV(dstr) != (CV*)sref) {
3884 CV* cv = GvCV(dstr);
3886 if (!GvCVGEN((GV*)dstr) &&
3887 (CvROOT(cv) || CvXSUB(cv)))
3889 /* ahem, death to those who redefine
3890 * active sort subs */
3891 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3892 PL_sortcop == CvSTART(cv))
3894 "Can't redefine active sort subroutine %s",
3895 GvENAME((GV*)dstr));
3896 /* Redefining a sub - warning is mandatory if
3897 it was a const and its value changed. */
3898 if (ckWARN(WARN_REDEFINE)
3900 && (!CvCONST((CV*)sref)
3901 || sv_cmp(cv_const_sv(cv),
3902 cv_const_sv((CV*)sref)))))
3904 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3906 ? "Constant subroutine %s::%s redefined"
3907 : "Subroutine %s::%s redefined",
3908 HvNAME(GvSTASH((GV*)dstr)),
3909 GvENAME((GV*)dstr));
3913 cv_ckproto(cv, (GV*)dstr,
3914 SvPOK(sref) ? SvPVX(sref) : Nullch);
3916 GvCV(dstr) = (CV*)sref;
3917 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3918 GvASSUMECV_on(dstr);
3919 PL_sub_generation++;
3921 if (!GvIMPORTED_CV(dstr)
3922 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3924 GvIMPORTED_CV_on(dstr);
3929 SAVEGENERICSV(GvIOp(dstr));
3931 dref = (SV*)GvIOp(dstr);
3932 GvIOp(dstr) = (IO*)sref;
3936 SAVEGENERICSV(GvFORM(dstr));
3938 dref = (SV*)GvFORM(dstr);
3939 GvFORM(dstr) = (CV*)sref;
3943 SAVEGENERICSV(GvSV(dstr));
3945 dref = (SV*)GvSV(dstr);
3947 if (!GvIMPORTED_SV(dstr)
3948 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3950 GvIMPORTED_SV_on(dstr);
3956 if (SvTAINTED(sstr))
3961 (void)SvOOK_off(dstr); /* backoff */
3963 Safefree(SvPVX(dstr));
3964 SvLEN(dstr)=SvCUR(dstr)=0;
3967 (void)SvOK_off(dstr);
3968 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3970 if (sflags & SVp_NOK) {
3972 /* Only set the public OK flag if the source has public OK. */
3973 if (sflags & SVf_NOK)
3974 SvFLAGS(dstr) |= SVf_NOK;
3975 SvNVX(dstr) = SvNVX(sstr);
3977 if (sflags & SVp_IOK) {
3978 (void)SvIOKp_on(dstr);
3979 if (sflags & SVf_IOK)
3980 SvFLAGS(dstr) |= SVf_IOK;
3981 if (sflags & SVf_IVisUV)
3983 SvIVX(dstr) = SvIVX(sstr);
3985 if (SvAMAGIC(sstr)) {
3989 else if (sflags & SVp_POK) {
3992 * Check to see if we can just swipe the string. If so, it's a
3993 * possible small lose on short strings, but a big win on long ones.
3994 * It might even be a win on short strings if SvPVX(dstr)
3995 * has to be allocated and SvPVX(sstr) has to be freed.
3998 if (SvTEMP(sstr) && /* slated for free anyway? */
3999 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4000 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4001 SvLEN(sstr) && /* and really is a string */
4002 /* and won't be needed again, potentially */
4003 !(PL_op && PL_op->op_type == OP_AASSIGN))
4005 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
4007 SvFLAGS(dstr) &= ~SVf_OOK;
4008 Safefree(SvPVX(dstr) - SvIVX(dstr));
4010 else if (SvLEN(dstr))
4011 Safefree(SvPVX(dstr));
4013 (void)SvPOK_only(dstr);
4014 SvPV_set(dstr, SvPVX(sstr));
4015 SvLEN_set(dstr, SvLEN(sstr));
4016 SvCUR_set(dstr, SvCUR(sstr));
4019 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4020 SvPV_set(sstr, Nullch);
4025 else { /* have to copy actual string */
4026 STRLEN len = SvCUR(sstr);
4027 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4028 Move(SvPVX(sstr),SvPVX(dstr),len,char);
4029 SvCUR_set(dstr, len);
4030 *SvEND(dstr) = '\0';
4031 (void)SvPOK_only(dstr);
4033 if (sflags & SVf_UTF8)
4036 if (sflags & SVp_NOK) {
4038 if (sflags & SVf_NOK)
4039 SvFLAGS(dstr) |= SVf_NOK;
4040 SvNVX(dstr) = SvNVX(sstr);
4042 if (sflags & SVp_IOK) {
4043 (void)SvIOKp_on(dstr);
4044 if (sflags & SVf_IOK)
4045 SvFLAGS(dstr) |= SVf_IOK;
4046 if (sflags & SVf_IVisUV)
4048 SvIVX(dstr) = SvIVX(sstr);
4050 if ( SvVOK(sstr) ) {
4051 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4052 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4053 smg->mg_ptr, smg->mg_len);
4054 SvRMAGICAL_on(dstr);
4057 else if (sflags & SVp_IOK) {
4058 if (sflags & SVf_IOK)
4059 (void)SvIOK_only(dstr);
4061 (void)SvOK_off(dstr);
4062 (void)SvIOKp_on(dstr);
4064 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4065 if (sflags & SVf_IVisUV)
4067 SvIVX(dstr) = SvIVX(sstr);
4068 if (sflags & SVp_NOK) {
4069 if (sflags & SVf_NOK)
4070 (void)SvNOK_on(dstr);
4072 (void)SvNOKp_on(dstr);
4073 SvNVX(dstr) = SvNVX(sstr);
4076 else if (sflags & SVp_NOK) {
4077 if (sflags & SVf_NOK)
4078 (void)SvNOK_only(dstr);
4080 (void)SvOK_off(dstr);
4083 SvNVX(dstr) = SvNVX(sstr);
4086 if (dtype == SVt_PVGV) {
4087 if (ckWARN(WARN_MISC))
4088 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4091 (void)SvOK_off(dstr);
4093 if (SvTAINTED(sstr))
4098 =for apidoc sv_setsv_mg
4100 Like C<sv_setsv>, but also handles 'set' magic.
4106 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4108 sv_setsv(dstr,sstr);
4113 =for apidoc sv_setpvn
4115 Copies a string into an SV. The C<len> parameter indicates the number of
4116 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4117 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4123 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4125 register char *dptr;
4127 SV_CHECK_THINKFIRST(sv);
4133 /* len is STRLEN which is unsigned, need to copy to signed */
4136 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4138 (void)SvUPGRADE(sv, SVt_PV);
4140 SvGROW(sv, len + 1);
4142 Move(ptr,dptr,len,char);
4145 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4150 =for apidoc sv_setpvn_mg
4152 Like C<sv_setpvn>, but also handles 'set' magic.
4158 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4160 sv_setpvn(sv,ptr,len);
4165 =for apidoc sv_setpv
4167 Copies a string into an SV. The string must be null-terminated. Does not
4168 handle 'set' magic. See C<sv_setpv_mg>.
4174 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4176 register STRLEN len;
4178 SV_CHECK_THINKFIRST(sv);
4184 (void)SvUPGRADE(sv, SVt_PV);
4186 SvGROW(sv, len + 1);
4187 Move(ptr,SvPVX(sv),len+1,char);
4189 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4194 =for apidoc sv_setpv_mg
4196 Like C<sv_setpv>, but also handles 'set' magic.
4202 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4209 =for apidoc sv_usepvn
4211 Tells an SV to use C<ptr> to find its string value. Normally the string is
4212 stored inside the SV but sv_usepvn allows the SV to use an outside string.
4213 The C<ptr> should point to memory that was allocated by C<malloc>. The
4214 string length, C<len>, must be supplied. This function will realloc the
4215 memory pointed to by C<ptr>, so that pointer should not be freed or used by
4216 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
4217 See C<sv_usepvn_mg>.
4223 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4225 SV_CHECK_THINKFIRST(sv);
4226 (void)SvUPGRADE(sv, SVt_PV);
4231 (void)SvOOK_off(sv);
4232 if (SvPVX(sv) && SvLEN(sv))
4233 Safefree(SvPVX(sv));
4234 Renew(ptr, len+1, char);
4237 SvLEN_set(sv, len+1);
4239 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4244 =for apidoc sv_usepvn_mg
4246 Like C<sv_usepvn>, but also handles 'set' magic.
4252 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4254 sv_usepvn(sv,ptr,len);
4259 =for apidoc sv_force_normal_flags
4261 Undo various types of fakery on an SV: if the PV is a shared string, make
4262 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4263 an xpvmg. The C<flags> parameter gets passed to C<sv_unref_flags()>
4264 when unrefing. C<sv_force_normal> calls this function with flags set to 0.
4270 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4272 if (SvREADONLY(sv)) {
4274 char *pvx = SvPVX(sv);
4275 STRLEN len = SvCUR(sv);
4276 U32 hash = SvUVX(sv);
4279 SvGROW(sv, len + 1);
4280 Move(pvx,SvPVX(sv),len,char);
4282 unsharepvn(pvx, SvUTF8(sv) ? -(I32)len : len, hash);
4284 else if (IN_PERL_RUNTIME)
4285 Perl_croak(aTHX_ PL_no_modify);
4288 sv_unref_flags(sv, flags);
4289 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4294 =for apidoc sv_force_normal
4296 Undo various types of fakery on an SV: if the PV is a shared string, make
4297 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4298 an xpvmg. See also C<sv_force_normal_flags>.
4304 Perl_sv_force_normal(pTHX_ register SV *sv)
4306 sv_force_normal_flags(sv, 0);
4312 Efficient removal of characters from the beginning of the string buffer.
4313 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4314 the string buffer. The C<ptr> becomes the first character of the adjusted
4315 string. Uses the "OOK hack".
4316 Beware: after this function returns, C<ptr> and SvPVX(sv) may no longer
4317 refer to the same chunk of data.
4323 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr)
4325 register STRLEN delta;
4326 if (!ptr || !SvPOKp(sv))
4328 delta = ptr - SvPVX(sv);
4329 SV_CHECK_THINKFIRST(sv);
4330 if (SvTYPE(sv) < SVt_PVIV)
4331 sv_upgrade(sv,SVt_PVIV);
4334 if (!SvLEN(sv)) { /* make copy of shared string */
4335 char *pvx = SvPVX(sv);
4336 STRLEN len = SvCUR(sv);
4337 SvGROW(sv, len + 1);
4338 Move(pvx,SvPVX(sv),len,char);
4342 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4343 and we do that anyway inside the SvNIOK_off
4345 SvFLAGS(sv) |= SVf_OOK;
4354 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
4355 * this function provided for binary compatibility only
4359 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
4361 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
4365 =for apidoc sv_catpvn
4367 Concatenates the string onto the end of the string which is in the SV. The
4368 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4369 status set, then the bytes appended should be valid UTF-8.
4370 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4372 =for apidoc sv_catpvn_flags
4374 Concatenates the string onto the end of the string which is in the SV. The
4375 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4376 status set, then the bytes appended should be valid UTF-8.
4377 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4378 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4379 in terms of this function.
4385 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4390 dstr = SvPV_force_flags(dsv, dlen, flags);
4391 SvGROW(dsv, dlen + slen + 1);
4394 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4397 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4402 =for apidoc sv_catpvn_mg
4404 Like C<sv_catpvn>, but also handles 'set' magic.
4410 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4412 sv_catpvn(sv,ptr,len);
4416 /* sv_catsv() is now a macro using Perl_sv_catsv_flags();
4417 * this function provided for binary compatibility only
4421 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
4423 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
4427 =for apidoc sv_catsv
4429 Concatenates the string from SV C<ssv> onto the end of the string in
4430 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4431 not 'set' magic. See C<sv_catsv_mg>.
4433 =for apidoc sv_catsv_flags
4435 Concatenates the string from SV C<ssv> onto the end of the string in
4436 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4437 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4438 and C<sv_catsv_nomg> are implemented in terms of this function.
4443 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4449 if ((spv = SvPV(ssv, slen))) {
4450 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4451 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4452 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4453 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4454 dsv->sv_flags doesn't have that bit set.
4455 Andy Dougherty 12 Oct 2001
4457 I32 sutf8 = DO_UTF8(ssv);
4460 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4462 dutf8 = DO_UTF8(dsv);
4464 if (dutf8 != sutf8) {
4466 /* Not modifying source SV, so taking a temporary copy. */
4467 SV* csv = sv_2mortal(newSVpvn(spv, slen));
4469 sv_utf8_upgrade(csv);
4470 spv = SvPV(csv, slen);
4473 sv_utf8_upgrade_nomg(dsv);
4475 sv_catpvn_nomg(dsv, spv, slen);
4480 =for apidoc sv_catsv_mg
4482 Like C<sv_catsv>, but also handles 'set' magic.
4488 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
4495 =for apidoc sv_catpv
4497 Concatenates the string onto the end of the string which is in the SV.
4498 If the SV has the UTF-8 status set, then the bytes appended should be
4499 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4504 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4506 register STRLEN len;
4512 junk = SvPV_force(sv, tlen);
4514 SvGROW(sv, tlen + len + 1);
4517 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4519 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4524 =for apidoc sv_catpv_mg
4526 Like C<sv_catpv>, but also handles 'set' magic.
4532 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4541 Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
4542 with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
4549 Perl_newSV(pTHX_ STRLEN len)
4555 sv_upgrade(sv, SVt_PV);
4556 SvGROW(sv, len + 1);
4561 =for apidoc sv_magicext
4563 Adds magic to an SV, upgrading it if necessary. Applies the
4564 supplied vtable and returns pointer to the magic added.
4566 Note that sv_magicext will allow things that sv_magic will not.
4567 In particular you can add magic to SvREADONLY SVs and and more than
4568 one instance of the same 'how'
4570 I C<namelen> is greater then zero then a savepvn() I<copy> of C<name> is stored,
4571 if C<namelen> is zero then C<name> is stored as-is and - as another special
4572 case - if C<(name && namelen == HEf_SVKEY)> then C<name> is assumed to contain
4573 an C<SV*> and has its REFCNT incremented
4575 (This is now used as a subroutine by sv_magic.)
4580 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
4581 const char* name, I32 namlen)
4585 if (SvTYPE(sv) < SVt_PVMG) {
4586 (void)SvUPGRADE(sv, SVt_PVMG);
4588 Newz(702,mg, 1, MAGIC);
4589 mg->mg_moremagic = SvMAGIC(sv);
4592 /* Some magic sontains a reference loop, where the sv and object refer to
4593 each other. To prevent a reference loop that would prevent such
4594 objects being freed, we look for such loops and if we find one we
4595 avoid incrementing the object refcount.
4597 Note we cannot do this to avoid self-tie loops as intervening RV must
4598 have its REFCNT incremented to keep it in existence.
4601 if (!obj || obj == sv ||
4602 how == PERL_MAGIC_arylen ||
4603 how == PERL_MAGIC_qr ||
4604 (SvTYPE(obj) == SVt_PVGV &&
4605 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4606 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4607 GvFORM(obj) == (CV*)sv)))
4612 mg->mg_obj = SvREFCNT_inc(obj);
4613 mg->mg_flags |= MGf_REFCOUNTED;
4616 /* Normal self-ties simply pass a null object, and instead of
4617 using mg_obj directly, use the SvTIED_obj macro to produce a
4618 new RV as needed. For glob "self-ties", we are tieing the PVIO
4619 with an RV obj pointing to the glob containing the PVIO. In
4620 this case, to avoid a reference loop, we need to weaken the
4624 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4625 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4631 mg->mg_len = namlen;
4634 mg->mg_ptr = savepvn(name, namlen);
4635 else if (namlen == HEf_SVKEY)
4636 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4638 mg->mg_ptr = (char *) name;
4640 mg->mg_virtual = vtable;
4644 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4649 =for apidoc sv_magic
4651 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4652 then adds a new magic item of type C<how> to the head of the magic list.
4658 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4663 if (SvREADONLY(sv)) {
4665 && how != PERL_MAGIC_regex_global
4666 && how != PERL_MAGIC_bm
4667 && how != PERL_MAGIC_fm
4668 && how != PERL_MAGIC_sv
4669 && how != PERL_MAGIC_backref
4672 Perl_croak(aTHX_ PL_no_modify);
4675 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4676 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4677 /* sv_magic() refuses to add a magic of the same 'how' as an
4680 if (how == PERL_MAGIC_taint)
4688 vtable = &PL_vtbl_sv;
4690 case PERL_MAGIC_overload:
4691 vtable = &PL_vtbl_amagic;
4693 case PERL_MAGIC_overload_elem:
4694 vtable = &PL_vtbl_amagicelem;
4696 case PERL_MAGIC_overload_table:
4697 vtable = &PL_vtbl_ovrld;
4700 vtable = &PL_vtbl_bm;
4702 case PERL_MAGIC_regdata:
4703 vtable = &PL_vtbl_regdata;
4705 case PERL_MAGIC_regdatum:
4706 vtable = &PL_vtbl_regdatum;
4708 case PERL_MAGIC_env:
4709 vtable = &PL_vtbl_env;
4712 vtable = &PL_vtbl_fm;
4714 case PERL_MAGIC_envelem:
4715 vtable = &PL_vtbl_envelem;
4717 case PERL_MAGIC_regex_global:
4718 vtable = &PL_vtbl_mglob;
4720 case PERL_MAGIC_isa:
4721 vtable = &PL_vtbl_isa;
4723 case PERL_MAGIC_isaelem:
4724 vtable = &PL_vtbl_isaelem;
4726 case PERL_MAGIC_nkeys:
4727 vtable = &PL_vtbl_nkeys;
4729 case PERL_MAGIC_dbfile:
4732 case PERL_MAGIC_dbline:
4733 vtable = &PL_vtbl_dbline;
4735 #ifdef USE_5005THREADS
4736 case PERL_MAGIC_mutex:
4737 vtable = &PL_vtbl_mutex;
4739 #endif /* USE_5005THREADS */
4740 #ifdef USE_LOCALE_COLLATE
4741 case PERL_MAGIC_collxfrm:
4742 vtable = &PL_vtbl_collxfrm;
4744 #endif /* USE_LOCALE_COLLATE */
4745 case PERL_MAGIC_tied:
4746 vtable = &PL_vtbl_pack;
4748 case PERL_MAGIC_tiedelem:
4749 case PERL_MAGIC_tiedscalar:
4750 vtable = &PL_vtbl_packelem;
4753 vtable = &PL_vtbl_regexp;
4755 case PERL_MAGIC_sig:
4756 vtable = &PL_vtbl_sig;
4758 case PERL_MAGIC_sigelem:
4759 vtable = &PL_vtbl_sigelem;
4761 case PERL_MAGIC_taint:
4762 vtable = &PL_vtbl_taint;
4764 case PERL_MAGIC_uvar:
4765 vtable = &PL_vtbl_uvar;
4767 case PERL_MAGIC_vec:
4768 vtable = &PL_vtbl_vec;
4770 case PERL_MAGIC_vstring:
4773 case PERL_MAGIC_utf8:
4774 vtable = &PL_vtbl_utf8;
4776 case PERL_MAGIC_substr:
4777 vtable = &PL_vtbl_substr;
4779 case PERL_MAGIC_defelem:
4780 vtable = &PL_vtbl_defelem;
4782 case PERL_MAGIC_glob:
4783 vtable = &PL_vtbl_glob;
4785 case PERL_MAGIC_arylen:
4786 vtable = &PL_vtbl_arylen;
4788 case PERL_MAGIC_pos:
4789 vtable = &PL_vtbl_pos;
4791 case PERL_MAGIC_backref:
4792 vtable = &PL_vtbl_backref;
4794 case PERL_MAGIC_ext:
4795 /* Reserved for use by extensions not perl internals. */
4796 /* Useful for attaching extension internal data to perl vars. */
4797 /* Note that multiple extensions may clash if magical scalars */
4798 /* etc holding private data from one are passed to another. */
4801 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4804 /* Rest of work is done else where */
4805 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4808 case PERL_MAGIC_taint:
4811 case PERL_MAGIC_ext:
4812 case PERL_MAGIC_dbfile:
4819 =for apidoc sv_unmagic
4821 Removes all magic of type C<type> from an SV.
4827 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4831 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4834 for (mg = *mgp; mg; mg = *mgp) {
4835 if (mg->mg_type == type) {
4836 MGVTBL* vtbl = mg->mg_virtual;
4837 *mgp = mg->mg_moremagic;
4838 if (vtbl && vtbl->svt_free)
4839 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4840 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4842 Safefree(mg->mg_ptr);
4843 else if (mg->mg_len == HEf_SVKEY)
4844 SvREFCNT_dec((SV*)mg->mg_ptr);
4845 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
4846 Safefree(mg->mg_ptr);
4848 if (mg->mg_flags & MGf_REFCOUNTED)
4849 SvREFCNT_dec(mg->mg_obj);
4853 mgp = &mg->mg_moremagic;
4857 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4864 =for apidoc sv_rvweaken
4866 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4867 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4868 push a back-reference to this RV onto the array of backreferences
4869 associated with that magic.
4875 Perl_sv_rvweaken(pTHX_ SV *sv)
4878 if (!SvOK(sv)) /* let undefs pass */
4881 Perl_croak(aTHX_ "Can't weaken a nonreference");
4882 else if (SvWEAKREF(sv)) {
4883 if (ckWARN(WARN_MISC))
4884 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4888 sv_add_backref(tsv, sv);
4894 /* Give tsv backref magic if it hasn't already got it, then push a
4895 * back-reference to sv onto the array associated with the backref magic.
4899 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4903 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
4904 av = (AV*)mg->mg_obj;
4907 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4908 /* av now has a refcnt of 2, which avoids it getting freed
4909 * before us during global cleanup. The extra ref is removed
4910 * by magic_killbackrefs() when tsv is being freed */
4912 if (AvFILLp(av) >= AvMAX(av)) {
4914 SV **svp = AvARRAY(av);
4915 for (i = AvFILLp(av); i >= 0; i--)
4917 svp[i] = sv; /* reuse the slot */
4920 av_extend(av, AvFILLp(av)+1);
4922 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
4925 /* delete a back-reference to ourselves from the backref magic associated
4926 * with the SV we point to.
4930 S_sv_del_backref(pTHX_ SV *sv)
4937 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
4938 Perl_croak(aTHX_ "panic: del_backref");
4939 av = (AV *)mg->mg_obj;
4941 for (i = AvFILLp(av); i >= 0; i--)
4942 if (svp[i] == sv) svp[i] = Nullsv;
4946 =for apidoc sv_insert
4948 Inserts a string at the specified offset/length within the SV. Similar to
4949 the Perl substr() function.
4955 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4959 register char *midend;
4960 register char *bigend;
4966 Perl_croak(aTHX_ "Can't modify non-existent substring");
4967 SvPV_force(bigstr, curlen);
4968 (void)SvPOK_only_UTF8(bigstr);
4969 if (offset + len > curlen) {
4970 SvGROW(bigstr, offset+len+1);
4971 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4972 SvCUR_set(bigstr, offset+len);
4976 i = littlelen - len;
4977 if (i > 0) { /* string might grow */
4978 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4979 mid = big + offset + len;
4980 midend = bigend = big + SvCUR(bigstr);
4983 while (midend > mid) /* shove everything down */
4984 *--bigend = *--midend;
4985 Move(little,big+offset,littlelen,char);
4991 Move(little,SvPVX(bigstr)+offset,len,char);
4996 big = SvPVX(bigstr);
4999 bigend = big + SvCUR(bigstr);
5001 if (midend > bigend)
5002 Perl_croak(aTHX_ "panic: sv_insert");
5004 if (mid - big > bigend - midend) { /* faster to shorten from end */
5006 Move(little, mid, littlelen,char);
5009 i = bigend - midend;
5011 Move(midend, mid, i,char);
5015 SvCUR_set(bigstr, mid - big);
5018 else if ((i = mid - big)) { /* faster from front */
5019 midend -= littlelen;
5021 sv_chop(bigstr,midend-i);
5026 Move(little, mid, littlelen,char);
5028 else if (littlelen) {
5029 midend -= littlelen;
5030 sv_chop(bigstr,midend);
5031 Move(little,midend,littlelen,char);
5034 sv_chop(bigstr,midend);
5040 =for apidoc sv_replace
5042 Make the first argument a copy of the second, then delete the original.
5043 The target SV physically takes over ownership of the body of the source SV
5044 and inherits its flags; however, the target keeps any magic it owns,
5045 and any magic in the source is discarded.
5046 Note that this is a rather specialist SV copying operation; most of the
5047 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5053 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
5055 U32 refcnt = SvREFCNT(sv);
5056 SV_CHECK_THINKFIRST(sv);
5057 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
5058 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Reference miscount in sv_replace()");
5059 if (SvMAGICAL(sv)) {
5063 sv_upgrade(nsv, SVt_PVMG);
5064 SvMAGIC(nsv) = SvMAGIC(sv);
5065 SvFLAGS(nsv) |= SvMAGICAL(sv);
5071 assert(!SvREFCNT(sv));
5072 StructCopy(nsv,sv,SV);
5073 SvREFCNT(sv) = refcnt;
5074 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5080 =for apidoc sv_clear
5082 Clear an SV: call any destructors, free up any memory used by the body,
5083 and free the body itself. The SV's head is I<not> freed, although
5084 its type is set to all 1's so that it won't inadvertently be assumed
5085 to be live during global destruction etc.
5086 This function should only be called when REFCNT is zero. Most of the time
5087 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5094 Perl_sv_clear(pTHX_ register SV *sv)
5098 assert(SvREFCNT(sv) == 0);
5101 if (PL_defstash) { /* Still have a symbol table? */
5108 stash = SvSTASH(sv);
5109 destructor = StashHANDLER(stash,DESTROY);
5111 SV* tmpref = newRV(sv);
5112 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5114 PUSHSTACKi(PERLSI_DESTROY);
5119 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5125 if(SvREFCNT(tmpref) < 2) {
5126 /* tmpref is not kept alive! */
5131 SvREFCNT_dec(tmpref);
5133 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5137 if (PL_in_clean_objs)
5138 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5140 /* DESTROY gave object new lease on life */
5146 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5147 SvOBJECT_off(sv); /* Curse the object. */
5148 if (SvTYPE(sv) != SVt_PVIO)
5149 --PL_sv_objcount; /* XXX Might want something more general */
5152 if (SvTYPE(sv) >= SVt_PVMG) {
5155 if (SvFLAGS(sv) & SVpad_TYPED)
5156 SvREFCNT_dec(SvSTASH(sv));
5159 switch (SvTYPE(sv)) {
5162 IoIFP(sv) != PerlIO_stdin() &&
5163 IoIFP(sv) != PerlIO_stdout() &&
5164 IoIFP(sv) != PerlIO_stderr())
5166 io_close((IO*)sv, FALSE);
5168 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5169 PerlDir_close(IoDIRP(sv));
5170 IoDIRP(sv) = (DIR*)NULL;
5171 Safefree(IoTOP_NAME(sv));
5172 Safefree(IoFMT_NAME(sv));
5173 Safefree(IoBOTTOM_NAME(sv));
5188 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5189 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5190 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5191 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5193 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5194 SvREFCNT_dec(LvTARG(sv));
5198 Safefree(GvNAME(sv));
5199 /* cannot decrease stash refcount yet, as we might recursively delete
5200 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
5201 of stash until current sv is completely gone.
5202 -- JohnPC, 27 Mar 1998 */
5203 stash = GvSTASH(sv);
5209 (void)SvOOK_off(sv);
5217 SvREFCNT_dec(SvRV(sv));
5219 else if (SvPVX(sv) && SvLEN(sv))
5220 Safefree(SvPVX(sv));
5221 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5222 unsharepvn(SvPVX(sv),
5223 SvUTF8(sv) ? -(I32)SvCUR(sv) : SvCUR(sv),
5236 switch (SvTYPE(sv)) {
5252 del_XPVIV(SvANY(sv));
5255 del_XPVNV(SvANY(sv));
5258 del_XPVMG(SvANY(sv));
5261 del_XPVLV(SvANY(sv));
5264 del_XPVAV(SvANY(sv));
5267 del_XPVHV(SvANY(sv));
5270 del_XPVCV(SvANY(sv));
5273 del_XPVGV(SvANY(sv));
5274 /* code duplication for increased performance. */
5275 SvFLAGS(sv) &= SVf_BREAK;
5276 SvFLAGS(sv) |= SVTYPEMASK;
5277 /* decrease refcount of the stash that owns this GV, if any */
5279 SvREFCNT_dec(stash);
5280 return; /* not break, SvFLAGS reset already happened */
5282 del_XPVBM(SvANY(sv));
5285 del_XPVFM(SvANY(sv));
5288 del_XPVIO(SvANY(sv));
5291 SvFLAGS(sv) &= SVf_BREAK;
5292 SvFLAGS(sv) |= SVTYPEMASK;
5296 =for apidoc sv_newref
5298 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5305 Perl_sv_newref(pTHX_ SV *sv)
5308 ATOMIC_INC(SvREFCNT(sv));
5315 Decrement an SV's reference count, and if it drops to zero, call
5316 C<sv_clear> to invoke destructors and free up any memory used by
5317 the body; finally, deallocate the SV's head itself.
5318 Normally called via a wrapper macro C<SvREFCNT_dec>.
5324 Perl_sv_free(pTHX_ SV *sv)
5326 int refcount_is_zero;
5330 if (SvREFCNT(sv) == 0) {
5331 if (SvFLAGS(sv) & SVf_BREAK)
5332 /* this SV's refcnt has been artificially decremented to
5333 * trigger cleanup */
5335 if (PL_in_clean_all) /* All is fair */
5337 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5338 /* make sure SvREFCNT(sv)==0 happens very seldom */
5339 SvREFCNT(sv) = (~(U32)0)/2;
5342 if (ckWARN_d(WARN_INTERNAL))
5343 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5344 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5345 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5348 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
5349 if (!refcount_is_zero)
5353 if (ckWARN_d(WARN_DEBUGGING))
5354 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5355 "Attempt to free temp prematurely: SV 0x%"UVxf
5356 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5360 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5361 /* make sure SvREFCNT(sv)==0 happens very seldom */
5362 SvREFCNT(sv) = (~(U32)0)/2;
5373 Returns the length of the string in the SV. Handles magic and type
5374 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5380 Perl_sv_len(pTHX_ register SV *sv)
5388 len = mg_length(sv);
5390 (void)SvPV(sv, len);
5395 =for apidoc sv_len_utf8
5397 Returns the number of characters in the string in an SV, counting wide
5398 UTF-8 bytes as a single character. Handles magic and type coercion.
5404 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
5405 * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init().
5406 * (Note that the mg_len is not the length of the mg_ptr field.)
5411 Perl_sv_len_utf8(pTHX_ register SV *sv)
5417 return mg_length(sv);
5421 U8 *s = (U8*)SvPV(sv, len);
5422 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
5424 if (mg && mg->mg_len != -1 && (mg->mg_len > 0 || len == 0)) {
5426 #ifdef PERL_UTF8_CACHE_ASSERT
5427 assert(ulen == Perl_utf8_length(aTHX_ s, s + len));
5431 ulen = Perl_utf8_length(aTHX_ s, s + len);
5432 if (!mg && !SvREADONLY(sv)) {
5433 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5434 mg = mg_find(sv, PERL_MAGIC_utf8);
5444 /* S_utf8_mg_pos_init() is used to initialize the mg_ptr field of
5445 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5446 * between UTF-8 and byte offsets. There are two (substr offset and substr
5447 * length, the i offset, PERL_MAGIC_UTF8_CACHESIZE) times two (UTF-8 offset
5448 * and byte offset) cache positions.
5450 * The mg_len field is used by sv_len_utf8(), see its comments.
5451 * Note that the mg_len is not the length of the mg_ptr field.
5455 S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, U8 *s, U8 *start)
5459 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5461 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
5465 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5467 Newz(0, *cachep, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5468 (*mgp)->mg_ptr = (char *) *cachep;
5472 (*cachep)[i] = *offsetp;
5473 (*cachep)[i+1] = s - start;
5481 * S_utf8_mg_pos() is used to query and update mg_ptr field of
5482 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5483 * between UTF-8 and byte offsets. See also the comments of
5484 * S_utf8_mg_pos_init().
5488 S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I32 uoff, U8 **sp, U8 *start, U8 *send)
5492 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5494 *mgp = mg_find(sv, PERL_MAGIC_utf8);
5495 if (*mgp && (*mgp)->mg_ptr) {
5496 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5497 ASSERT_UTF8_CACHE(*cachep);
5498 if ((*cachep)[i] == (STRLEN)uoff) /* An exact match. */
5500 else { /* We will skip to the right spot. */
5505 /* The assumption is that going backward is half
5506 * the speed of going forward (that's where the
5507 * 2 * backw in the below comes from). (The real
5508 * figure of course depends on the UTF-8 data.) */
5510 if ((*cachep)[i] > (STRLEN)uoff) {
5512 backw = (*cachep)[i] - (STRLEN)uoff;
5514 if (forw < 2 * backw)
5517 p = start + (*cachep)[i+1];
5519 /* Try this only for the substr offset (i == 0),
5520 * not for the substr length (i == 2). */
5521 else if (i == 0) { /* (*cachep)[i] < uoff */
5522 STRLEN ulen = sv_len_utf8(sv);
5524 if ((STRLEN)uoff < ulen) {
5525 forw = (STRLEN)uoff - (*cachep)[i];
5526 backw = ulen - (STRLEN)uoff;
5528 if (forw < 2 * backw)
5529 p = start + (*cachep)[i+1];
5534 /* If the string is not long enough for uoff,
5535 * we could extend it, but not at this low a level. */
5539 if (forw < 2 * backw) {
5546 while (UTF8_IS_CONTINUATION(*p))
5551 /* Update the cache. */
5552 (*cachep)[i] = (STRLEN)uoff;
5553 (*cachep)[i+1] = p - start;
5555 /* Drop the stale "length" cache */
5564 if (found) { /* Setup the return values. */
5565 *offsetp = (*cachep)[i+1];
5566 *sp = start + *offsetp;
5569 *offsetp = send - start;
5571 else if (*sp < start) {
5577 #ifdef PERL_UTF8_CACHE_ASSERT
5582 while (n-- && s < send)
5586 assert(*offsetp == s - start);
5587 assert((*cachep)[0] == (STRLEN)uoff);
5588 assert((*cachep)[1] == *offsetp);
5590 ASSERT_UTF8_CACHE(*cachep);
5599 =for apidoc sv_pos_u2b
5601 Converts the value pointed to by offsetp from a count of UTF-8 chars from
5602 the start of the string, to a count of the equivalent number of bytes; if
5603 lenp is non-zero, it does the same to lenp, but this time starting from
5604 the offset, rather than from the start of the string. Handles magic and
5611 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5612 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5613 * byte offsets. See also the comments of S_utf8_mg_pos().
5618 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
5629 start = s = (U8*)SvPV(sv, len);
5631 I32 uoffset = *offsetp;
5636 if (utf8_mg_pos(sv, &mg, &cache, 0, offsetp, *offsetp, &s, start, send))
5638 if (!found && uoffset > 0) {
5639 while (s < send && uoffset--)
5643 if (utf8_mg_pos_init(sv, &mg, &cache, 0, offsetp, s, start))
5645 *offsetp = s - start;
5650 if (utf8_mg_pos(sv, &mg, &cache, 2, lenp, *lenp + *offsetp, &s, start, send)) {
5654 if (!found && *lenp > 0) {
5657 while (s < send && ulen--)
5661 utf8_mg_pos_init(sv, &mg, &cache, 2, lenp, s, start);
5665 ASSERT_UTF8_CACHE(cache);
5677 =for apidoc sv_pos_b2u
5679 Converts the value pointed to by offsetp from a count of bytes from the
5680 start of the string, to a count of the equivalent number of UTF-8 chars.
5681 Handles magic and type coercion.
5687 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5688 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5689 * byte offsets. See also the comments of S_utf8_mg_pos().
5694 Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
5702 s = (U8*)SvPV(sv, len);
5703 if ((I32)len < *offsetp)
5704 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
5706 U8* send = s + *offsetp;
5708 STRLEN *cache = NULL;
5712 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5713 mg = mg_find(sv, PERL_MAGIC_utf8);
5714 if (mg && mg->mg_ptr) {
5715 cache = (STRLEN *) mg->mg_ptr;
5716 if (cache[1] == (STRLEN)*offsetp) {
5717 /* An exact match. */
5718 *offsetp = cache[0];
5722 else if (cache[1] < (STRLEN)*offsetp) {
5723 /* We already know part of the way. */
5726 /* Let the below loop do the rest. */
5728 else { /* cache[1] > *offsetp */
5729 /* We already know all of the way, now we may
5730 * be able to walk back. The same assumption
5731 * is made as in S_utf8_mg_pos(), namely that
5732 * walking backward is twice slower than
5733 * walking forward. */
5734 STRLEN forw = *offsetp;
5735 STRLEN backw = cache[1] - *offsetp;
5737 if (!(forw < 2 * backw)) {
5738 U8 *p = s + cache[1];
5745 while (UTF8_IS_CONTINUATION(*p)) {
5753 *offsetp = cache[0];
5755 /* Drop the stale "length" cache */
5763 ASSERT_UTF8_CACHE(cache);
5769 /* Call utf8n_to_uvchr() to validate the sequence
5770 * (unless a simple non-UTF character) */
5771 if (!UTF8_IS_INVARIANT(*s))
5772 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
5781 if (!SvREADONLY(sv)) {
5783 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5784 mg = mg_find(sv, PERL_MAGIC_utf8);
5789 Newz(0, cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5790 mg->mg_ptr = (char *) cache;
5795 cache[1] = *offsetp;
5796 /* Drop the stale "length" cache */
5810 Returns a boolean indicating whether the strings in the two SVs are
5811 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5812 coerce its args to strings if necessary.
5818 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
5826 SV* svrecode = Nullsv;
5833 pv1 = SvPV(sv1, cur1);
5840 pv2 = SvPV(sv2, cur2);
5842 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5843 /* Differing utf8ness.
5844 * Do not UTF8size the comparands as a side-effect. */
5847 svrecode = newSVpvn(pv2, cur2);
5848 sv_recode_to_utf8(svrecode, PL_encoding);
5849 pv2 = SvPV(svrecode, cur2);
5852 svrecode = newSVpvn(pv1, cur1);
5853 sv_recode_to_utf8(svrecode, PL_encoding);
5854 pv1 = SvPV(svrecode, cur1);
5856 /* Now both are in UTF-8. */
5858 SvREFCNT_dec(svrecode);
5863 bool is_utf8 = TRUE;
5866 /* sv1 is the UTF-8 one,
5867 * if is equal it must be downgrade-able */
5868 char *pv = (char*)bytes_from_utf8((U8*)pv1,
5874 /* sv2 is the UTF-8 one,
5875 * if is equal it must be downgrade-able */
5876 char *pv = (char *)bytes_from_utf8((U8*)pv2,
5882 /* Downgrade not possible - cannot be eq */
5889 eq = memEQ(pv1, pv2, cur1);
5892 SvREFCNT_dec(svrecode);
5903 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
5904 string in C<sv1> is less than, equal to, or greater than the string in
5905 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5906 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
5912 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
5915 char *pv1, *pv2, *tpv = Nullch;
5917 SV *svrecode = Nullsv;
5924 pv1 = SvPV(sv1, cur1);
5931 pv2 = SvPV(sv2, cur2);
5933 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5934 /* Differing utf8ness.
5935 * Do not UTF8size the comparands as a side-effect. */
5938 svrecode = newSVpvn(pv2, cur2);
5939 sv_recode_to_utf8(svrecode, PL_encoding);
5940 pv2 = SvPV(svrecode, cur2);
5943 pv2 = tpv = (char*)bytes_to_utf8((U8*)pv2, &cur2);
5948 svrecode = newSVpvn(pv1, cur1);
5949 sv_recode_to_utf8(svrecode, PL_encoding);
5950 pv1 = SvPV(svrecode, cur1);
5953 pv1 = tpv = (char*)bytes_to_utf8((U8*)pv1, &cur1);
5959 cmp = cur2 ? -1 : 0;
5963 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
5966 cmp = retval < 0 ? -1 : 1;
5967 } else if (cur1 == cur2) {
5970 cmp = cur1 < cur2 ? -1 : 1;
5975 SvREFCNT_dec(svrecode);
5984 =for apidoc sv_cmp_locale
5986 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
5987 'use bytes' aware, handles get magic, and will coerce its args to strings
5988 if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
5994 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
5996 #ifdef USE_LOCALE_COLLATE
6002 if (PL_collation_standard)
6006 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6008 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6010 if (!pv1 || !len1) {
6021 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6024 return retval < 0 ? -1 : 1;
6027 * When the result of collation is equality, that doesn't mean
6028 * that there are no differences -- some locales exclude some
6029 * characters from consideration. So to avoid false equalities,
6030 * we use the raw string as a tiebreaker.
6036 #endif /* USE_LOCALE_COLLATE */
6038 return sv_cmp(sv1, sv2);
6042 #ifdef USE_LOCALE_COLLATE
6045 =for apidoc sv_collxfrm
6047 Add Collate Transform magic to an SV if it doesn't already have it.
6049 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6050 scalar data of the variable, but transformed to such a format that a normal
6051 memory comparison can be used to compare the data according to the locale
6058 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
6062 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6063 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6068 Safefree(mg->mg_ptr);
6070 if ((xf = mem_collxfrm(s, len, &xlen))) {
6071 if (SvREADONLY(sv)) {
6074 return xf + sizeof(PL_collation_ix);
6077 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
6078 mg = mg_find(sv, PERL_MAGIC_collxfrm);
6091 if (mg && mg->mg_ptr) {
6093 return mg->mg_ptr + sizeof(PL_collation_ix);
6101 #endif /* USE_LOCALE_COLLATE */
6106 Get a line from the filehandle and store it into the SV, optionally
6107 appending to the currently-stored string.
6113 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
6117 register STDCHAR rslast;
6118 register STDCHAR *bp;
6124 if (SvTHINKFIRST(sv))
6125 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6126 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6128 However, perlbench says it's slower, because the existing swipe code
6129 is faster than copy on write.
6130 Swings and roundabouts. */
6131 (void)SvUPGRADE(sv, SVt_PV);
6136 if (PerlIO_isutf8(fp)) {
6138 sv_utf8_upgrade_nomg(sv);
6139 sv_pos_u2b(sv,&append,0);
6141 } else if (SvUTF8(sv)) {
6142 SV *tsv = NEWSV(0,0);
6143 sv_gets(tsv, fp, 0);
6144 sv_utf8_upgrade_nomg(tsv);
6145 SvCUR_set(sv,append);
6148 goto return_string_or_null;
6153 if (PerlIO_isutf8(fp))
6156 if (IN_PERL_COMPILETIME) {
6157 /* we always read code in line mode */
6161 else if (RsSNARF(PL_rs)) {
6162 /* If it is a regular disk file use size from stat() as estimate
6163 of amount we are going to read - may result in malloc-ing
6164 more memory than we realy need if layers bellow reduce
6165 size we read (e.g. CRLF or a gzip layer)
6168 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
6169 Off_t offset = PerlIO_tell(fp);
6170 if (offset != (Off_t) -1 && st.st_size + append > offset) {
6171 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6177 else if (RsRECORD(PL_rs)) {
6181 /* Grab the size of the record we're getting */
6182 recsize = SvIV(SvRV(PL_rs));
6183 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6186 /* VMS wants read instead of fread, because fread doesn't respect */
6187 /* RMS record boundaries. This is not necessarily a good thing to be */
6188 /* doing, but we've got no other real choice - except avoid stdio
6189 as implementation - perhaps write a :vms layer ?
6191 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6193 bytesread = PerlIO_read(fp, buffer, recsize);
6197 SvCUR_set(sv, bytesread += append);
6198 buffer[bytesread] = '\0';
6199 goto return_string_or_null;
6201 else if (RsPARA(PL_rs)) {
6207 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6208 if (PerlIO_isutf8(fp)) {
6209 rsptr = SvPVutf8(PL_rs, rslen);
6212 if (SvUTF8(PL_rs)) {
6213 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6214 Perl_croak(aTHX_ "Wide character in $/");
6217 rsptr = SvPV(PL_rs, rslen);
6221 rslast = rslen ? rsptr[rslen - 1] : '\0';
6223 if (rspara) { /* have to do this both before and after */
6224 do { /* to make sure file boundaries work right */
6227 i = PerlIO_getc(fp);
6231 PerlIO_ungetc(fp,i);
6237 /* See if we know enough about I/O mechanism to cheat it ! */
6239 /* This used to be #ifdef test - it is made run-time test for ease
6240 of abstracting out stdio interface. One call should be cheap
6241 enough here - and may even be a macro allowing compile
6245 if (PerlIO_fast_gets(fp)) {
6248 * We're going to steal some values from the stdio struct
6249 * and put EVERYTHING in the innermost loop into registers.
6251 register STDCHAR *ptr;
6255 #if defined(VMS) && defined(PERLIO_IS_STDIO)
6256 /* An ungetc()d char is handled separately from the regular
6257 * buffer, so we getc() it back out and stuff it in the buffer.
6259 i = PerlIO_getc(fp);
6260 if (i == EOF) return 0;
6261 *(--((*fp)->_ptr)) = (unsigned char) i;
6265 /* Here is some breathtakingly efficient cheating */
6267 cnt = PerlIO_get_cnt(fp); /* get count into register */
6268 /* make sure we have the room */
6269 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6270 /* Not room for all of it
6271 if we are looking for a separator and room for some
6273 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6274 /* just process what we have room for */
6275 shortbuffered = cnt - SvLEN(sv) + append + 1;
6276 cnt -= shortbuffered;
6280 /* remember that cnt can be negative */
6281 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6286 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
6287 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6288 DEBUG_P(PerlIO_printf(Perl_debug_log,
6289 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6290 DEBUG_P(PerlIO_printf(Perl_debug_log,
6291 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6292 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6293 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6298 while (cnt > 0) { /* this | eat */
6300 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6301 goto thats_all_folks; /* screams | sed :-) */
6305 Copy(ptr, bp, cnt, char); /* this | eat */
6306 bp += cnt; /* screams | dust */
6307 ptr += cnt; /* louder | sed :-) */
6312 if (shortbuffered) { /* oh well, must extend */
6313 cnt = shortbuffered;
6315 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
6317 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6318 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
6322 DEBUG_P(PerlIO_printf(Perl_debug_log,
6323 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6324 PTR2UV(ptr),(long)cnt));
6325 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6327 DEBUG_P(PerlIO_printf(Perl_debug_log,
6328 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6329 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6330 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6332 /* This used to call 'filbuf' in stdio form, but as that behaves like
6333 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6334 another abstraction. */
6335 i = PerlIO_getc(fp); /* get more characters */
6337 DEBUG_P(PerlIO_printf(Perl_debug_log,
6338 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6339 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6340 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6342 cnt = PerlIO_get_cnt(fp);
6343 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
6344 DEBUG_P(PerlIO_printf(Perl_debug_log,
6345 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6347 if (i == EOF) /* all done for ever? */
6348 goto thats_really_all_folks;
6350 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
6352 SvGROW(sv, bpx + cnt + 2);
6353 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
6355 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
6357 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
6358 goto thats_all_folks;
6362 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX(sv)) < rslen) ||
6363 memNE((char*)bp - rslen, rsptr, rslen))
6364 goto screamer; /* go back to the fray */
6365 thats_really_all_folks:
6367 cnt += shortbuffered;
6368 DEBUG_P(PerlIO_printf(Perl_debug_log,
6369 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6370 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
6371 DEBUG_P(PerlIO_printf(Perl_debug_log,
6372 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6373 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6374 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6376 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
6377 DEBUG_P(PerlIO_printf(Perl_debug_log,
6378 "Screamer: done, len=%ld, string=|%.*s|\n",
6379 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
6383 /*The big, slow, and stupid way. */
6385 /* Any stack-challenged places. */
6387 /* EPOC: need to work around SDK features. *
6388 * On WINS: MS VC5 generates calls to _chkstk, *
6389 * if a "large" stack frame is allocated. *
6390 * gcc on MARM does not generate calls like these. */
6391 # define USEHEAPINSTEADOFSTACK
6394 #ifdef USEHEAPINSTEADOFSTACK
6396 New(0, buf, 8192, STDCHAR);
6404 register STDCHAR *bpe = buf + sizeof(buf);
6406 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6407 ; /* keep reading */
6411 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6412 /* Accomodate broken VAXC compiler, which applies U8 cast to
6413 * both args of ?: operator, causing EOF to change into 255
6416 i = (U8)buf[cnt - 1];
6422 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6424 sv_catpvn(sv, (char *) buf, cnt);
6426 sv_setpvn(sv, (char *) buf, cnt);
6428 if (i != EOF && /* joy */
6430 SvCUR(sv) < rslen ||
6431 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6435 * If we're reading from a TTY and we get a short read,
6436 * indicating that the user hit his EOF character, we need
6437 * to notice it now, because if we try to read from the TTY
6438 * again, the EOF condition will disappear.
6440 * The comparison of cnt to sizeof(buf) is an optimization
6441 * that prevents unnecessary calls to feof().
6445 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
6449 #ifdef USEHEAPINSTEADOFSTACK
6454 if (rspara) { /* have to do this both before and after */
6455 while (i != EOF) { /* to make sure file boundaries work right */
6456 i = PerlIO_getc(fp);
6458 PerlIO_ungetc(fp,i);
6464 return_string_or_null:
6465 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
6471 Auto-increment of the value in the SV, doing string to numeric conversion
6472 if necessary. Handles 'get' magic.
6478 Perl_sv_inc(pTHX_ register SV *sv)
6487 if (SvTHINKFIRST(sv)) {
6488 if (SvREADONLY(sv) && SvFAKE(sv))
6489 sv_force_normal(sv);
6490 if (SvREADONLY(sv)) {
6491 if (IN_PERL_RUNTIME)
6492 Perl_croak(aTHX_ PL_no_modify);
6496 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6498 i = PTR2IV(SvRV(sv));
6503 flags = SvFLAGS(sv);
6504 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6505 /* It's (privately or publicly) a float, but not tested as an
6506 integer, so test it to see. */
6508 flags = SvFLAGS(sv);
6510 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6511 /* It's publicly an integer, or privately an integer-not-float */
6512 #ifdef PERL_PRESERVE_IVUV
6516 if (SvUVX(sv) == UV_MAX)
6517 sv_setnv(sv, UV_MAX_P1);
6519 (void)SvIOK_only_UV(sv);
6522 if (SvIVX(sv) == IV_MAX)
6523 sv_setuv(sv, (UV)IV_MAX + 1);
6525 (void)SvIOK_only(sv);
6531 if (flags & SVp_NOK) {
6532 (void)SvNOK_only(sv);
6537 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
6538 if ((flags & SVTYPEMASK) < SVt_PVIV)
6539 sv_upgrade(sv, SVt_IV);
6540 (void)SvIOK_only(sv);
6545 while (isALPHA(*d)) d++;
6546 while (isDIGIT(*d)) d++;
6548 #ifdef PERL_PRESERVE_IVUV
6549 /* Got to punt this as an integer if needs be, but we don't issue
6550 warnings. Probably ought to make the sv_iv_please() that does
6551 the conversion if possible, and silently. */
6552 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
6553 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6554 /* Need to try really hard to see if it's an integer.
6555 9.22337203685478e+18 is an integer.
6556 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6557 so $a="9.22337203685478e+18"; $a+0; $a++
6558 needs to be the same as $a="9.22337203685478e+18"; $a++
6565 /* sv_2iv *should* have made this an NV */
6566 if (flags & SVp_NOK) {
6567 (void)SvNOK_only(sv);
6571 /* I don't think we can get here. Maybe I should assert this
6572 And if we do get here I suspect that sv_setnv will croak. NWC
6574 #if defined(USE_LONG_DOUBLE)
6575 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
6576 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
6578 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6579 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
6582 #endif /* PERL_PRESERVE_IVUV */
6583 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
6587 while (d >= SvPVX(sv)) {
6595 /* MKS: The original code here died if letters weren't consecutive.
6596 * at least it didn't have to worry about non-C locales. The
6597 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
6598 * arranged in order (although not consecutively) and that only
6599 * [A-Za-z] are accepted by isALPHA in the C locale.
6601 if (*d != 'z' && *d != 'Z') {
6602 do { ++*d; } while (!isALPHA(*d));
6605 *(d--) -= 'z' - 'a';
6610 *(d--) -= 'z' - 'a' + 1;
6614 /* oh,oh, the number grew */
6615 SvGROW(sv, SvCUR(sv) + 2);
6617 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
6628 Auto-decrement of the value in the SV, doing string to numeric conversion
6629 if necessary. Handles 'get' magic.
6635 Perl_sv_dec(pTHX_ register SV *sv)
6643 if (SvTHINKFIRST(sv)) {
6644 if (SvREADONLY(sv) && SvFAKE(sv))
6645 sv_force_normal(sv);
6646 if (SvREADONLY(sv)) {
6647 if (IN_PERL_RUNTIME)
6648 Perl_croak(aTHX_ PL_no_modify);
6652 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6654 i = PTR2IV(SvRV(sv));
6659 /* Unlike sv_inc we don't have to worry about string-never-numbers
6660 and keeping them magic. But we mustn't warn on punting */
6661 flags = SvFLAGS(sv);
6662 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6663 /* It's publicly an integer, or privately an integer-not-float */
6664 #ifdef PERL_PRESERVE_IVUV
6668 if (SvUVX(sv) == 0) {
6669 (void)SvIOK_only(sv);
6673 (void)SvIOK_only_UV(sv);
6677 if (SvIVX(sv) == IV_MIN)
6678 sv_setnv(sv, (NV)IV_MIN - 1.0);
6680 (void)SvIOK_only(sv);
6686 if (flags & SVp_NOK) {
6688 (void)SvNOK_only(sv);
6691 if (!(flags & SVp_POK)) {
6692 if ((flags & SVTYPEMASK) < SVt_PVNV)
6693 sv_upgrade(sv, SVt_NV);
6695 (void)SvNOK_only(sv);
6698 #ifdef PERL_PRESERVE_IVUV
6700 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
6701 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6702 /* Need to try really hard to see if it's an integer.
6703 9.22337203685478e+18 is an integer.
6704 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6705 so $a="9.22337203685478e+18"; $a+0; $a--
6706 needs to be the same as $a="9.22337203685478e+18"; $a--
6713 /* sv_2iv *should* have made this an NV */
6714 if (flags & SVp_NOK) {
6715 (void)SvNOK_only(sv);
6719 /* I don't think we can get here. Maybe I should assert this
6720 And if we do get here I suspect that sv_setnv will croak. NWC
6722 #if defined(USE_LONG_DOUBLE)
6723 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
6724 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
6726 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6727 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
6731 #endif /* PERL_PRESERVE_IVUV */
6732 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
6736 =for apidoc sv_mortalcopy
6738 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
6739 The new SV is marked as mortal. It will be destroyed "soon", either by an
6740 explicit call to FREETMPS, or by an implicit call at places such as
6741 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
6746 /* Make a string that will exist for the duration of the expression
6747 * evaluation. Actually, it may have to last longer than that, but
6748 * hopefully we won't free it until it has been assigned to a
6749 * permanent location. */
6752 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
6757 sv_setsv(sv,oldstr);
6759 PL_tmps_stack[++PL_tmps_ix] = sv;
6765 =for apidoc sv_newmortal
6767 Creates a new null SV which is mortal. The reference count of the SV is
6768 set to 1. It will be destroyed "soon", either by an explicit call to
6769 FREETMPS, or by an implicit call at places such as statement boundaries.
6770 See also C<sv_mortalcopy> and C<sv_2mortal>.
6776 Perl_sv_newmortal(pTHX)
6781 SvFLAGS(sv) = SVs_TEMP;
6783 PL_tmps_stack[++PL_tmps_ix] = sv;
6788 =for apidoc sv_2mortal
6790 Marks an existing SV as mortal. The SV will be destroyed "soon", either
6791 by an explicit call to FREETMPS, or by an implicit call at places such as
6792 statement boundaries. See also C<sv_newmortal> and C<sv_mortalcopy>.
6798 Perl_sv_2mortal(pTHX_ register SV *sv)
6802 if (SvREADONLY(sv) && SvIMMORTAL(sv))
6805 PL_tmps_stack[++PL_tmps_ix] = sv;
6813 Creates a new SV and copies a string into it. The reference count for the
6814 SV is set to 1. If C<len> is zero, Perl will compute the length using
6815 strlen(). For efficiency, consider using C<newSVpvn> instead.
6821 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
6828 sv_setpvn(sv,s,len);
6833 =for apidoc newSVpvn
6835 Creates a new SV and copies a string into it. The reference count for the
6836 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
6837 string. You are responsible for ensuring that the source string is at least
6838 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
6844 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
6849 sv_setpvn(sv,s,len);
6854 =for apidoc newSVpvn_share
6856 Creates a new SV with its SvPVX pointing to a shared string in the string
6857 table. If the string does not already exist in the table, it is created
6858 first. Turns on READONLY and FAKE. The string's hash is stored in the UV
6859 slot of the SV; if the C<hash> parameter is non-zero, that value is used;
6860 otherwise the hash is computed. The idea here is that as the string table
6861 is used for shared hash keys these strings will have SvPVX == HeKEY and
6862 hash lookup will avoid string compare.
6868 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
6871 bool is_utf8 = FALSE;
6873 STRLEN tmplen = -len;
6875 /* See the note in hv.c:hv_fetch() --jhi */
6876 src = (char*)bytes_from_utf8((U8*)src, &tmplen, &is_utf8);
6880 PERL_HASH(hash, src, len);
6882 sv_upgrade(sv, SVt_PVIV);
6883 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
6896 #if defined(PERL_IMPLICIT_CONTEXT)
6898 /* pTHX_ magic can't cope with varargs, so this is a no-context
6899 * version of the main function, (which may itself be aliased to us).
6900 * Don't access this version directly.
6904 Perl_newSVpvf_nocontext(const char* pat, ...)
6909 va_start(args, pat);
6910 sv = vnewSVpvf(pat, &args);
6917 =for apidoc newSVpvf
6919 Creates a new SV and initializes it with the string formatted like
6926 Perl_newSVpvf(pTHX_ const char* pat, ...)
6930 va_start(args, pat);
6931 sv = vnewSVpvf(pat, &args);
6936 /* backend for newSVpvf() and newSVpvf_nocontext() */
6939 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
6943 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6950 Creates a new SV and copies a floating point value into it.
6951 The reference count for the SV is set to 1.
6957 Perl_newSVnv(pTHX_ NV n)
6969 Creates a new SV and copies an integer into it. The reference count for the
6976 Perl_newSViv(pTHX_ IV i)
6988 Creates a new SV and copies an unsigned integer into it.
6989 The reference count for the SV is set to 1.
6995 Perl_newSVuv(pTHX_ UV u)
7005 =for apidoc newRV_noinc
7007 Creates an RV wrapper for an SV. The reference count for the original
7008 SV is B<not> incremented.
7014 Perl_newRV_noinc(pTHX_ SV *tmpRef)
7019 sv_upgrade(sv, SVt_RV);
7026 /* newRV_inc is the official function name to use now.
7027 * newRV_inc is in fact #defined to newRV in sv.h
7031 Perl_newRV(pTHX_ SV *tmpRef)
7033 return newRV_noinc(SvREFCNT_inc(tmpRef));
7039 Creates a new SV which is an exact duplicate of the original SV.
7046 Perl_newSVsv(pTHX_ register SV *old)
7052 if (SvTYPE(old) == SVTYPEMASK) {
7053 if (ckWARN_d(WARN_INTERNAL))
7054 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7069 =for apidoc sv_reset
7071 Underlying implementation for the C<reset> Perl function.
7072 Note that the perl-level function is vaguely deprecated.
7078 Perl_sv_reset(pTHX_ register char *s, HV *stash)
7086 char todo[PERL_UCHAR_MAX+1];
7091 if (!*s) { /* reset ?? searches */
7092 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
7093 pm->op_pmdynflags &= ~PMdf_USED;
7098 /* reset variables */
7100 if (!HvARRAY(stash))
7103 Zero(todo, 256, char);
7105 i = (unsigned char)*s;
7109 max = (unsigned char)*s++;
7110 for ( ; i <= max; i++) {
7113 for (i = 0; i <= (I32) HvMAX(stash); i++) {
7114 for (entry = HvARRAY(stash)[i];
7116 entry = HeNEXT(entry))
7118 if (!todo[(U8)*HeKEY(entry)])
7120 gv = (GV*)HeVAL(entry);
7122 if (SvTHINKFIRST(sv)) {
7123 if (!SvREADONLY(sv) && SvROK(sv))
7128 if (SvTYPE(sv) >= SVt_PV) {
7130 if (SvPVX(sv) != Nullch)
7137 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
7140 #ifdef USE_ENVIRON_ARRAY
7142 # ifdef USE_ITHREADS
7143 && PL_curinterp == aTHX
7147 environ[0] = Nullch;
7150 #endif /* !PERL_MICRO */
7160 Using various gambits, try to get an IO from an SV: the IO slot if its a
7161 GV; or the recursive result if we're an RV; or the IO slot of the symbol
7162 named after the PV if we're a string.
7168 Perl_sv_2io(pTHX_ SV *sv)
7174 switch (SvTYPE(sv)) {
7182 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7186 Perl_croak(aTHX_ PL_no_usym, "filehandle");
7188 return sv_2io(SvRV(sv));
7189 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
7195 Perl_croak(aTHX_ "Bad filehandle: %"SVf, sv);
7204 Using various gambits, try to get a CV from an SV; in addition, try if
7205 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7211 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
7218 return *gvp = Nullgv, Nullcv;
7219 switch (SvTYPE(sv)) {
7238 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
7239 tryAMAGICunDEREF(to_cv);
7242 if (SvTYPE(sv) == SVt_PVCV) {
7251 Perl_croak(aTHX_ "Not a subroutine reference");
7256 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
7262 if (lref && !GvCVu(gv)) {
7265 tmpsv = NEWSV(704,0);
7266 gv_efullname3(tmpsv, gv, Nullch);
7267 /* XXX this is probably not what they think they're getting.
7268 * It has the same effect as "sub name;", i.e. just a forward
7270 newSUB(start_subparse(FALSE, 0),
7271 newSVOP(OP_CONST, 0, tmpsv),
7276 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7286 Returns true if the SV has a true value by Perl's rules.
7287 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7288 instead use an in-line version.
7294 Perl_sv_true(pTHX_ register SV *sv)
7300 if ((tXpv = (XPV*)SvANY(sv)) &&
7301 (tXpv->xpv_cur > 1 ||
7302 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
7309 return SvIVX(sv) != 0;
7312 return SvNVX(sv) != 0.0;
7314 return sv_2bool(sv);
7322 A private implementation of the C<SvIVx> macro for compilers which can't
7323 cope with complex macro expressions. Always use the macro instead.
7329 Perl_sv_iv(pTHX_ register SV *sv)
7333 return (IV)SvUVX(sv);
7342 A private implementation of the C<SvUVx> macro for compilers which can't
7343 cope with complex macro expressions. Always use the macro instead.
7349 Perl_sv_uv(pTHX_ register SV *sv)
7354 return (UV)SvIVX(sv);
7362 A private implementation of the C<SvNVx> macro for compilers which can't
7363 cope with complex macro expressions. Always use the macro instead.
7369 Perl_sv_nv(pTHX_ register SV *sv)
7376 /* sv_pv() is now a macro using SvPV_nolen();
7377 * this function provided for binary compatibility only
7381 Perl_sv_pv(pTHX_ SV *sv)
7388 return sv_2pv(sv, &n_a);
7394 Use the C<SvPV_nolen> macro instead
7398 A private implementation of the C<SvPV> macro for compilers which can't
7399 cope with complex macro expressions. Always use the macro instead.
7405 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
7411 return sv_2pv(sv, lp);
7416 Perl_sv_pvn_nomg(pTHX_ register SV *sv, STRLEN *lp)
7422 return sv_2pv_flags(sv, lp, 0);
7425 /* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags();
7426 * this function provided for binary compatibility only
7430 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
7432 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
7436 =for apidoc sv_pvn_force
7438 Get a sensible string out of the SV somehow.
7439 A private implementation of the C<SvPV_force> macro for compilers which
7440 can't cope with complex macro expressions. Always use the macro instead.
7442 =for apidoc sv_pvn_force_flags
7444 Get a sensible string out of the SV somehow.
7445 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7446 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7447 implemented in terms of this function.
7448 You normally want to use the various wrapper macros instead: see
7449 C<SvPV_force> and C<SvPV_force_nomg>
7455 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7459 if (SvTHINKFIRST(sv) && !SvROK(sv))
7460 sv_force_normal(sv);
7466 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
7467 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
7471 s = sv_2pv_flags(sv, lp, flags);
7472 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
7477 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
7478 SvGROW(sv, len + 1);
7479 Move(s,SvPVX(sv),len,char);
7484 SvPOK_on(sv); /* validate pointer */
7486 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
7487 PTR2UV(sv),SvPVX(sv)));
7493 /* sv_pvbyte () is now a macro using Perl_sv_2pv_flags();
7494 * this function provided for binary compatibility only
7498 Perl_sv_pvbyte(pTHX_ SV *sv)
7500 sv_utf8_downgrade(sv,0);
7505 =for apidoc sv_pvbyte
7507 Use C<SvPVbyte_nolen> instead.
7509 =for apidoc sv_pvbyten
7511 A private implementation of the C<SvPVbyte> macro for compilers
7512 which can't cope with complex macro expressions. Always use the macro
7519 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
7521 sv_utf8_downgrade(sv,0);
7522 return sv_pvn(sv,lp);
7526 =for apidoc sv_pvbyten_force
7528 A private implementation of the C<SvPVbytex_force> macro for compilers
7529 which can't cope with complex macro expressions. Always use the macro
7536 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7538 sv_pvn_force(sv,lp);
7539 sv_utf8_downgrade(sv,0);
7544 /* sv_pvutf8 () is now a macro using Perl_sv_2pv_flags();
7545 * this function provided for binary compatibility only
7549 Perl_sv_pvutf8(pTHX_ SV *sv)
7551 sv_utf8_upgrade(sv);
7556 =for apidoc sv_pvutf8
7558 Use the C<SvPVutf8_nolen> macro instead
7560 =for apidoc sv_pvutf8n
7562 A private implementation of the C<SvPVutf8> macro for compilers
7563 which can't cope with complex macro expressions. Always use the macro
7570 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
7572 sv_utf8_upgrade(sv);
7573 return sv_pvn(sv,lp);
7577 =for apidoc sv_pvutf8n_force
7579 A private implementation of the C<SvPVutf8_force> macro for compilers
7580 which can't cope with complex macro expressions. Always use the macro
7587 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7589 sv_pvn_force(sv,lp);
7590 sv_utf8_upgrade(sv);
7596 =for apidoc sv_reftype
7598 Returns a string describing what the SV is a reference to.
7604 Perl_sv_reftype(pTHX_ SV *sv, int ob)
7606 if (ob && SvOBJECT(sv)) {
7607 HV *svs = SvSTASH(sv);
7608 /* [20011101.072] This bandaid for C<package;> should eventually
7609 be removed. AMS 20011103 */
7610 return (svs ? HvNAME(svs) : "<none>");
7613 switch (SvTYPE(sv)) {
7628 case SVt_PVLV: return SvROK(sv) ? "REF"
7629 /* tied lvalues should appear to be
7630 * scalars for backwards compatitbility */
7631 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
7632 ? "SCALAR" : "LVALUE";
7633 case SVt_PVAV: return "ARRAY";
7634 case SVt_PVHV: return "HASH";
7635 case SVt_PVCV: return "CODE";
7636 case SVt_PVGV: return "GLOB";
7637 case SVt_PVFM: return "FORMAT";
7638 case SVt_PVIO: return "IO";
7639 default: return "UNKNOWN";
7645 =for apidoc sv_isobject
7647 Returns a boolean indicating whether the SV is an RV pointing to a blessed
7648 object. If the SV is not an RV, or if the object is not blessed, then this
7655 Perl_sv_isobject(pTHX_ SV *sv)
7672 Returns a boolean indicating whether the SV is blessed into the specified
7673 class. This does not check for subtypes; use C<sv_derived_from> to verify
7674 an inheritance relationship.
7680 Perl_sv_isa(pTHX_ SV *sv, const char *name)
7692 return strEQ(HvNAME(SvSTASH(sv)), name);
7698 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7699 it will be upgraded to one. If C<classname> is non-null then the new SV will
7700 be blessed in the specified package. The new SV is returned and its
7701 reference count is 1.
7707 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
7713 SV_CHECK_THINKFIRST(rv);
7716 if (SvTYPE(rv) >= SVt_PVMG) {
7717 U32 refcnt = SvREFCNT(rv);
7721 SvREFCNT(rv) = refcnt;
7724 if (SvTYPE(rv) < SVt_RV)
7725 sv_upgrade(rv, SVt_RV);
7726 else if (SvTYPE(rv) > SVt_RV) {
7727 (void)SvOOK_off(rv);
7728 if (SvPVX(rv) && SvLEN(rv))
7729 Safefree(SvPVX(rv));
7739 HV* stash = gv_stashpv(classname, TRUE);
7740 (void)sv_bless(rv, stash);
7746 =for apidoc sv_setref_pv
7748 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7749 argument will be upgraded to an RV. That RV will be modified to point to
7750 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7751 into the SV. The C<classname> argument indicates the package for the
7752 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7753 will have a reference count of 1, and the RV will be returned.
7755 Do not use with other Perl types such as HV, AV, SV, CV, because those
7756 objects will become corrupted by the pointer copy process.
7758 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7764 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
7767 sv_setsv(rv, &PL_sv_undef);
7771 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
7776 =for apidoc sv_setref_iv
7778 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7779 argument will be upgraded to an RV. That RV will be modified to point to
7780 the new SV. The C<classname> argument indicates the package for the
7781 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7782 will have a reference count of 1, and the RV will be returned.
7788 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
7790 sv_setiv(newSVrv(rv,classname), iv);
7795 =for apidoc sv_setref_uv
7797 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7798 argument will be upgraded to an RV. That RV will be modified to point to
7799 the new SV. The C<classname> argument indicates the package for the
7800 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7801 will have a reference count of 1, and the RV will be returned.
7807 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7809 sv_setuv(newSVrv(rv,classname), uv);
7814 =for apidoc sv_setref_nv
7816 Copies a double into a new SV, optionally blessing the SV. The C<rv>
7817 argument will be upgraded to an RV. That RV will be modified to point to
7818 the new SV. The C<classname> argument indicates the package for the
7819 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7820 will have a reference count of 1, and the RV will be returned.
7826 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
7828 sv_setnv(newSVrv(rv,classname), nv);
7833 =for apidoc sv_setref_pvn
7835 Copies a string into a new SV, optionally blessing the SV. The length of the
7836 string must be specified with C<n>. The C<rv> argument will be upgraded to
7837 an RV. That RV will be modified to point to the new SV. The C<classname>
7838 argument indicates the package for the blessing. Set C<classname> to
7839 C<Nullch> to avoid the blessing. The new SV will have a reference count
7840 of 1, and the RV will be returned.
7842 Note that C<sv_setref_pv> copies the pointer while this copies the string.
7848 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
7850 sv_setpvn(newSVrv(rv,classname), pv, n);
7855 =for apidoc sv_bless
7857 Blesses an SV into a specified package. The SV must be an RV. The package
7858 must be designated by its stash (see C<gv_stashpv()>). The reference count
7859 of the SV is unaffected.
7865 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
7869 Perl_croak(aTHX_ "Can't bless non-reference value");
7871 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
7872 if (SvREADONLY(tmpRef))
7873 Perl_croak(aTHX_ PL_no_modify);
7874 if (SvOBJECT(tmpRef)) {
7875 if (SvTYPE(tmpRef) != SVt_PVIO)
7877 SvREFCNT_dec(SvSTASH(tmpRef));
7880 SvOBJECT_on(tmpRef);
7881 if (SvTYPE(tmpRef) != SVt_PVIO)
7883 (void)SvUPGRADE(tmpRef, SVt_PVMG);
7884 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
7891 if(SvSMAGICAL(tmpRef))
7892 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
7900 /* Downgrades a PVGV to a PVMG.
7904 S_sv_unglob(pTHX_ SV *sv)
7908 assert(SvTYPE(sv) == SVt_PVGV);
7913 SvREFCNT_dec(GvSTASH(sv));
7914 GvSTASH(sv) = Nullhv;
7916 sv_unmagic(sv, PERL_MAGIC_glob);
7917 Safefree(GvNAME(sv));
7920 /* need to keep SvANY(sv) in the right arena */
7921 xpvmg = new_XPVMG();
7922 StructCopy(SvANY(sv), xpvmg, XPVMG);
7923 del_XPVGV(SvANY(sv));
7926 SvFLAGS(sv) &= ~SVTYPEMASK;
7927 SvFLAGS(sv) |= SVt_PVMG;
7931 =for apidoc sv_unref_flags
7933 Unsets the RV status of the SV, and decrements the reference count of
7934 whatever was being referenced by the RV. This can almost be thought of
7935 as a reversal of C<newSVrv>. The C<cflags> argument can contain
7936 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
7937 (otherwise the decrementing is conditional on the reference count being
7938 different from one or the reference being a readonly SV).
7945 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
7949 if (SvWEAKREF(sv)) {
7957 /* You can't have a || SvREADONLY(rv) here, as $a = $$a, where $a was
7958 assigned to as BEGIN {$a = \"Foo"} will fail. */
7959 if (SvREFCNT(rv) != 1 || (flags & SV_IMMEDIATE_UNREF))
7961 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
7962 sv_2mortal(rv); /* Schedule for freeing later */
7966 =for apidoc sv_unref
7968 Unsets the RV status of the SV, and decrements the reference count of
7969 whatever was being referenced by the RV. This can almost be thought of
7970 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
7971 being zero. See C<SvROK_off>.
7977 Perl_sv_unref(pTHX_ SV *sv)
7979 sv_unref_flags(sv, 0);
7983 =for apidoc sv_taint
7985 Taint an SV. Use C<SvTAINTED_on> instead.
7990 Perl_sv_taint(pTHX_ SV *sv)
7992 sv_magic((sv), Nullsv, PERL_MAGIC_taint, Nullch, 0);
7996 =for apidoc sv_untaint
7998 Untaint an SV. Use C<SvTAINTED_off> instead.
8003 Perl_sv_untaint(pTHX_ SV *sv)
8005 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8006 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8013 =for apidoc sv_tainted
8015 Test an SV for taintedness. Use C<SvTAINTED> instead.
8020 Perl_sv_tainted(pTHX_ SV *sv)
8022 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8023 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8024 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
8031 =for apidoc sv_setpviv
8033 Copies an integer into the given SV, also updating its string value.
8034 Does not handle 'set' magic. See C<sv_setpviv_mg>.
8040 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8042 char buf[TYPE_CHARS(UV)];
8044 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8046 sv_setpvn(sv, ptr, ebuf - ptr);
8050 =for apidoc sv_setpviv_mg
8052 Like C<sv_setpviv>, but also handles 'set' magic.
8058 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8060 char buf[TYPE_CHARS(UV)];
8062 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8064 sv_setpvn(sv, ptr, ebuf - ptr);
8068 #if defined(PERL_IMPLICIT_CONTEXT)
8070 /* pTHX_ magic can't cope with varargs, so this is a no-context
8071 * version of the main function, (which may itself be aliased to us).
8072 * Don't access this version directly.
8076 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8080 va_start(args, pat);
8081 sv_vsetpvf(sv, pat, &args);
8085 /* pTHX_ magic can't cope with varargs, so this is a no-context
8086 * version of the main function, (which may itself be aliased to us).
8087 * Don't access this version directly.
8091 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8095 va_start(args, pat);
8096 sv_vsetpvf_mg(sv, pat, &args);
8102 =for apidoc sv_setpvf
8104 Processes its arguments like C<sprintf> and sets an SV to the formatted
8105 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
8111 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
8114 va_start(args, pat);
8115 sv_vsetpvf(sv, pat, &args);
8119 /* backend for C<sv_setpvf> and C<sv_setpvf_nocontext> */
8122 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8124 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8128 =for apidoc sv_setpvf_mg
8130 Like C<sv_setpvf>, but also handles 'set' magic.
8136 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8139 va_start(args, pat);
8140 sv_vsetpvf_mg(sv, pat, &args);
8144 /* backend for C<sv_setpvf_mg> C<setpvf_mg_nocontext> */
8147 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8149 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8153 #if defined(PERL_IMPLICIT_CONTEXT)
8155 /* pTHX_ magic can't cope with varargs, so this is a no-context
8156 * version of the main function, (which may itself be aliased to us).
8157 * Don't access this version directly.
8161 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8165 va_start(args, pat);
8166 sv_vcatpvf(sv, pat, &args);
8170 /* pTHX_ magic can't cope with varargs, so this is a no-context
8171 * version of the main function, (which may itself be aliased to us).
8172 * Don't access this version directly.
8176 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8180 va_start(args, pat);
8181 sv_vcatpvf_mg(sv, pat, &args);
8187 =for apidoc sv_catpvf
8189 Processes its arguments like C<sprintf> and appends the formatted
8190 output to an SV. If the appended data contains "wide" characters
8191 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8192 and characters >255 formatted with %c), the original SV might get
8193 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic.
8194 C<SvSETMAGIC()> must typically be called after calling this function
8195 to handle 'set' magic.
8200 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
8203 va_start(args, pat);
8204 sv_vcatpvf(sv, pat, &args);
8208 /* backend for C<sv_catpvf> and C<catpvf_mg_nocontext> */
8211 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8213 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8217 =for apidoc sv_catpvf_mg
8219 Like C<sv_catpvf>, but also handles 'set' magic.
8225 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8228 va_start(args, pat);
8229 sv_vcatpvf_mg(sv, pat, &args);
8233 /* backend for C<catpvf_mg> and C<catpvf_mg_nocontext> */
8236 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8238 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8243 =for apidoc sv_vsetpvfn
8245 Works like C<vcatpvfn> but copies the text into the SV instead of
8248 Usually used via one of its frontends C<sv_setpvf> and C<sv_setpvf_mg>.
8254 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8256 sv_setpvn(sv, "", 0);
8257 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8260 /* private function for use in sv_vcatpvfn via the EXPECT_NUMBER macro */
8263 S_expect_number(pTHX_ char** pattern)
8266 switch (**pattern) {
8267 case '1': case '2': case '3':
8268 case '4': case '5': case '6':
8269 case '7': case '8': case '9':
8270 while (isDIGIT(**pattern))
8271 var = var * 10 + (*(*pattern)++ - '0');
8275 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
8278 F0convert(NV nv, char *endbuf, STRLEN *len)
8289 if (uv & 1 && uv == nv)
8290 uv--; /* Round to even */
8292 unsigned dig = uv % 10;
8305 =for apidoc sv_vcatpvfn
8307 Processes its arguments like C<vsprintf> and appends the formatted output
8308 to an SV. Uses an array of SVs if the C style variable argument list is
8309 missing (NULL). When running with taint checks enabled, indicates via
8310 C<maybe_tainted> if results are untrustworthy (often due to the use of
8313 Usually used via one of its frontends C<sv_catpvf> and C<sv_catpvf_mg>.
8319 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8326 static char nullstr[] = "(null)";
8328 bool has_utf8; /* has the result utf8? */
8329 bool pat_utf8; /* the pattern is in utf8? */
8331 /* Times 4: a decimal digit takes more than 3 binary digits.
8332 * NV_DIG: mantissa takes than many decimal digits.
8333 * Plus 32: Playing safe. */
8334 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8335 /* large enough for "%#.#f" --chip */
8336 /* what about long double NVs? --jhi */
8338 has_utf8 = pat_utf8 = DO_UTF8(sv);
8340 /* no matter what, this is a string now */
8341 (void)SvPV_force(sv, origlen);
8343 /* special-case "", "%s", and "%_" */
8346 if (patlen == 2 && pat[0] == '%') {
8350 char *s = va_arg(*args, char*);
8351 sv_catpv(sv, s ? s : nullstr);
8353 else if (svix < svmax) {
8354 sv_catsv(sv, *svargs);
8355 if (DO_UTF8(*svargs))
8361 argsv = va_arg(*args, SV*);
8362 sv_catsv(sv, argsv);
8367 /* See comment on '_' below */
8372 #ifndef USE_LONG_DOUBLE
8373 /* special-case "%.<number>[gf]" */
8374 if ( patlen <= 5 && pat[0] == '%' && pat[1] == '.'
8375 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8376 unsigned digits = 0;
8380 while (*pp >= '0' && *pp <= '9')
8381 digits = 10 * digits + (*pp++ - '0');
8382 if (pp - pat == (int)patlen - 1) {
8386 nv = (NV)va_arg(*args, double);
8387 else if (svix < svmax)
8392 /* Add check for digits != 0 because it seems that some
8393 gconverts are buggy in this case, and we don't yet have
8394 a Configure test for this. */
8395 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8396 /* 0, point, slack */
8397 Gconvert(nv, (int)digits, 0, ebuf);
8399 if (*ebuf) /* May return an empty string for digits==0 */
8402 } else if (!digits) {
8405 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8406 sv_catpvn(sv, p, l);
8412 #endif /* !USE_LONG_DOUBLE */
8414 if (!args && svix < svmax && DO_UTF8(*svargs))
8417 patend = (char*)pat + patlen;
8418 for (p = (char*)pat; p < patend; p = q) {
8421 bool vectorize = FALSE;
8422 bool vectorarg = FALSE;
8423 bool vec_utf8 = FALSE;
8429 bool has_precis = FALSE;
8432 bool is_utf8 = FALSE; /* is this item utf8? */
8433 #ifdef HAS_LDBL_SPRINTF_BUG
8434 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
8435 with sfio - Allen <allens@cpan.org> */
8436 bool fix_ldbl_sprintf_bug = FALSE;
8440 U8 utf8buf[UTF8_MAXLEN+1];
8441 STRLEN esignlen = 0;
8443 char *eptr = Nullch;
8446 U8 *vecstr = Null(U8*);
8453 /* we need a long double target in case HAS_LONG_DOUBLE but
8456 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
8465 STRLEN dotstrlen = 1;
8466 I32 efix = 0; /* explicit format parameter index */
8467 I32 ewix = 0; /* explicit width index */
8468 I32 epix = 0; /* explicit precision index */
8469 I32 evix = 0; /* explicit vector index */
8470 bool asterisk = FALSE;
8472 /* echo everything up to the next format specification */
8473 for (q = p; q < patend && *q != '%'; ++q) ;
8475 if (has_utf8 && !pat_utf8)
8476 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8478 sv_catpvn(sv, p, q - p);
8485 We allow format specification elements in this order:
8486 \d+\$ explicit format parameter index
8488 v|\*(\d+\$)?v vector with optional (optionally specified) arg
8489 0 flag (as above): repeated to allow "v02"
8490 \d+|\*(\d+\$)? width using optional (optionally specified) arg
8491 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8493 [%bcdefginopsux_DFOUX] format (mandatory)
8495 if (EXPECT_NUMBER(q, width)) {
8536 if (EXPECT_NUMBER(q, ewix))
8545 if ((vectorarg = asterisk)) {
8557 EXPECT_NUMBER(q, width);
8562 vecsv = va_arg(*args, SV*);
8564 vecsv = (evix ? evix <= svmax : svix < svmax) ?
8565 svargs[evix ? evix-1 : svix++] : &PL_sv_undef;
8566 dotstr = SvPVx(vecsv, dotstrlen);
8571 vecsv = va_arg(*args, SV*);
8572 vecstr = (U8*)SvPVx(vecsv,veclen);
8573 vec_utf8 = DO_UTF8(vecsv);
8575 else if (efix ? efix <= svmax : svix < svmax) {
8576 vecsv = svargs[efix ? efix-1 : svix++];
8577 vecstr = (U8*)SvPVx(vecsv,veclen);
8578 vec_utf8 = DO_UTF8(vecsv);
8588 i = va_arg(*args, int);
8590 i = (ewix ? ewix <= svmax : svix < svmax) ?
8591 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8593 width = (i < 0) ? -i : i;
8603 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
8605 /* XXX: todo, support specified precision parameter */
8609 i = va_arg(*args, int);
8611 i = (ewix ? ewix <= svmax : svix < svmax)
8612 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8613 precis = (i < 0) ? 0 : i;
8618 precis = precis * 10 + (*q++ - '0');
8627 case 'I': /* Ix, I32x, and I64x */
8629 if (q[1] == '6' && q[2] == '4') {
8635 if (q[1] == '3' && q[2] == '2') {
8645 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8656 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8657 if (*(q + 1) == 'l') { /* lld, llf */
8682 argsv = (efix ? efix <= svmax : svix < svmax) ?
8683 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
8690 uv = (args && !vectorize) ? va_arg(*args, int) : SvIVx(argsv);
8692 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
8694 eptr = (char*)utf8buf;
8695 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
8706 if (args && !vectorize) {
8707 eptr = va_arg(*args, char*);
8709 #ifdef MACOS_TRADITIONAL
8710 /* On MacOS, %#s format is used for Pascal strings */
8715 elen = strlen(eptr);
8718 elen = sizeof nullstr - 1;
8722 eptr = SvPVx(argsv, elen);
8723 if (DO_UTF8(argsv)) {
8724 if (has_precis && precis < elen) {
8726 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
8729 if (width) { /* fudge width (can't fudge elen) */
8730 width += elen - sv_len_utf8(argsv);
8739 * The "%_" hack might have to be changed someday,
8740 * if ISO or ANSI decide to use '_' for something.
8741 * So we keep it hidden from users' code.
8743 if (!args || vectorize)
8745 argsv = va_arg(*args, SV*);
8746 eptr = SvPVx(argsv, elen);
8752 if (has_precis && elen > precis)
8759 if (alt || vectorize)
8761 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
8779 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8788 esignbuf[esignlen++] = plus;
8792 case 'h': iv = (short)va_arg(*args, int); break;
8793 case 'l': iv = va_arg(*args, long); break;
8794 case 'V': iv = va_arg(*args, IV); break;
8795 default: iv = va_arg(*args, int); break;
8797 case 'q': iv = va_arg(*args, Quad_t); break;
8802 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
8804 case 'h': iv = (short)tiv; break;
8805 case 'l': iv = (long)tiv; break;
8807 default: iv = tiv; break;
8809 case 'q': iv = (Quad_t)tiv; break;
8813 if ( !vectorize ) /* we already set uv above */
8818 esignbuf[esignlen++] = plus;
8822 esignbuf[esignlen++] = '-';
8865 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8876 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
8877 case 'l': uv = va_arg(*args, unsigned long); break;
8878 case 'V': uv = va_arg(*args, UV); break;
8879 default: uv = va_arg(*args, unsigned); break;
8881 case 'q': uv = va_arg(*args, Uquad_t); break;
8886 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
8888 case 'h': uv = (unsigned short)tuv; break;
8889 case 'l': uv = (unsigned long)tuv; break;
8891 default: uv = tuv; break;
8893 case 'q': uv = (Uquad_t)tuv; break;
8899 eptr = ebuf + sizeof ebuf;
8905 p = (char*)((c == 'X')
8906 ? "0123456789ABCDEF" : "0123456789abcdef");
8912 esignbuf[esignlen++] = '0';
8913 esignbuf[esignlen++] = c; /* 'x' or 'X' */
8919 *--eptr = '0' + dig;
8921 if (alt && *eptr != '0')
8927 *--eptr = '0' + dig;
8930 esignbuf[esignlen++] = '0';
8931 esignbuf[esignlen++] = 'b';
8934 default: /* it had better be ten or less */
8935 #if defined(PERL_Y2KWARN)
8936 if (ckWARN(WARN_Y2K)) {
8938 char *s = SvPV(sv,n);
8939 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
8940 && (n == 2 || !isDIGIT(s[n-3])))
8942 Perl_warner(aTHX_ packWARN(WARN_Y2K),
8943 "Possible Y2K bug: %%%c %s",
8944 c, "format string following '19'");
8950 *--eptr = '0' + dig;
8951 } while (uv /= base);
8954 elen = (ebuf + sizeof ebuf) - eptr;
8957 zeros = precis - elen;
8958 else if (precis == 0 && elen == 1 && *eptr == '0')
8963 /* FLOATING POINT */
8966 c = 'f'; /* maybe %F isn't supported here */
8972 /* This is evil, but floating point is even more evil */
8974 /* for SV-style calling, we can only get NV
8975 for C-style calling, we assume %f is double;
8976 for simplicity we allow any of %Lf, %llf, %qf for long double
8980 #if defined(USE_LONG_DOUBLE)
8984 /* [perl #20339] - we should accept and ignore %lf rather than die */
8988 #if defined(USE_LONG_DOUBLE)
8989 intsize = args ? 0 : 'q';
8993 #if defined(HAS_LONG_DOUBLE)
9002 /* now we need (long double) if intsize == 'q', else (double) */
9003 nv = (args && !vectorize) ?
9004 #if LONG_DOUBLESIZE > DOUBLESIZE
9006 va_arg(*args, long double) :
9007 va_arg(*args, double)
9009 va_arg(*args, double)
9015 if (c != 'e' && c != 'E') {
9017 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9018 will cast our (long double) to (double) */
9019 (void)Perl_frexp(nv, &i);
9020 if (i == PERL_INT_MIN)
9021 Perl_die(aTHX_ "panic: frexp");
9023 need = BIT_DIGITS(i);
9025 need += has_precis ? precis : 6; /* known default */
9030 #ifdef HAS_LDBL_SPRINTF_BUG
9031 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9032 with sfio - Allen <allens@cpan.org> */
9035 # define MY_DBL_MAX DBL_MAX
9036 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9037 # if DOUBLESIZE >= 8
9038 # define MY_DBL_MAX 1.7976931348623157E+308L
9040 # define MY_DBL_MAX 3.40282347E+38L
9044 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9045 # define MY_DBL_MAX_BUG 1L
9047 # define MY_DBL_MAX_BUG MY_DBL_MAX
9051 # define MY_DBL_MIN DBL_MIN
9052 # else /* XXX guessing! -Allen */
9053 # if DOUBLESIZE >= 8
9054 # define MY_DBL_MIN 2.2250738585072014E-308L
9056 # define MY_DBL_MIN 1.17549435E-38L
9060 if ((intsize == 'q') && (c == 'f') &&
9061 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9063 /* it's going to be short enough that
9064 * long double precision is not needed */
9066 if ((nv <= 0L) && (nv >= -0L))
9067 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9069 /* would use Perl_fp_class as a double-check but not
9070 * functional on IRIX - see perl.h comments */
9072 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9073 /* It's within the range that a double can represent */
9074 #if defined(DBL_MAX) && !defined(DBL_MIN)
9075 if ((nv >= ((long double)1/DBL_MAX)) ||
9076 (nv <= (-(long double)1/DBL_MAX)))
9078 fix_ldbl_sprintf_bug = TRUE;
9081 if (fix_ldbl_sprintf_bug == TRUE) {
9091 # undef MY_DBL_MAX_BUG
9094 #endif /* HAS_LDBL_SPRINTF_BUG */
9096 need += 20; /* fudge factor */
9097 if (PL_efloatsize < need) {
9098 Safefree(PL_efloatbuf);
9099 PL_efloatsize = need + 20; /* more fudge */
9100 New(906, PL_efloatbuf, PL_efloatsize, char);
9101 PL_efloatbuf[0] = '\0';
9104 if ( !(width || left || plus || alt) && fill != '0'
9105 && has_precis && intsize != 'q' ) { /* Shortcuts */
9106 /* See earlier comment about buggy Gconvert when digits,
9108 if ( c == 'g' && precis) {
9109 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9110 if (*PL_efloatbuf) /* May return an empty string for digits==0 */
9111 goto float_converted;
9112 } else if ( c == 'f' && !precis) {
9113 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9117 eptr = ebuf + sizeof ebuf;
9120 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9121 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9122 if (intsize == 'q') {
9123 /* Copy the one or more characters in a long double
9124 * format before the 'base' ([efgEFG]) character to
9125 * the format string. */
9126 static char const prifldbl[] = PERL_PRIfldbl;
9127 char const *p = prifldbl + sizeof(prifldbl) - 3;
9128 while (p >= prifldbl) { *--eptr = *p--; }
9133 do { *--eptr = '0' + (base % 10); } while (base /= 10);
9138 do { *--eptr = '0' + (base % 10); } while (base /= 10);
9150 /* No taint. Otherwise we are in the strange situation
9151 * where printf() taints but print($float) doesn't.
9153 #if defined(HAS_LONG_DOUBLE)
9155 (void)sprintf(PL_efloatbuf, eptr, nv);
9157 (void)sprintf(PL_efloatbuf, eptr, (double)nv);
9159 (void)sprintf(PL_efloatbuf, eptr, nv);
9162 eptr = PL_efloatbuf;
9163 elen = strlen(PL_efloatbuf);
9169 i = SvCUR(sv) - origlen;
9170 if (args && !vectorize) {
9172 case 'h': *(va_arg(*args, short*)) = i; break;
9173 default: *(va_arg(*args, int*)) = i; break;
9174 case 'l': *(va_arg(*args, long*)) = i; break;
9175 case 'V': *(va_arg(*args, IV*)) = i; break;
9177 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9182 sv_setuv_mg(argsv, (UV)i);
9184 continue; /* not "break" */
9190 if (!args && ckWARN(WARN_PRINTF) &&
9191 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
9192 SV *msg = sv_newmortal();
9193 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9194 (PL_op->op_type == OP_PRTF) ? "" : "s");
9197 Perl_sv_catpvf(aTHX_ msg,
9198 "\"%%%c\"", c & 0xFF);
9200 Perl_sv_catpvf(aTHX_ msg,
9201 "\"%%\\%03"UVof"\"",
9204 sv_catpv(msg, "end of string");
9205 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, msg); /* yes, this is reentrant */
9208 /* output mangled stuff ... */
9214 /* ... right here, because formatting flags should not apply */
9215 SvGROW(sv, SvCUR(sv) + elen + 1);
9217 Copy(eptr, p, elen, char);
9220 SvCUR(sv) = p - SvPVX(sv);
9222 continue; /* not "break" */
9225 /* calculate width before utf8_upgrade changes it */
9226 have = esignlen + zeros + elen;
9228 if (is_utf8 != has_utf8) {
9231 sv_utf8_upgrade(sv);
9234 SV *nsv = sv_2mortal(newSVpvn(eptr, elen));
9235 sv_utf8_upgrade(nsv);
9239 SvGROW(sv, SvCUR(sv) + elen + 1);
9243 /* Use memchr() instead of strchr(), as eptr is not guaranteed */
9244 /* to point to a null-terminated string. */
9245 if (left && ckWARN(WARN_PRINTF) && memchr(eptr, '\n', elen) &&
9246 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF))
9247 Perl_warner(aTHX_ packWARN(WARN_PRINTF),
9248 "Newline in left-justified string for %sprintf",
9249 (PL_op->op_type == OP_PRTF) ? "" : "s");
9251 need = (have > width ? have : width);
9254 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9256 if (esignlen && fill == '0') {
9257 for (i = 0; i < (int)esignlen; i++)
9261 memset(p, fill, gap);
9264 if (esignlen && fill != '0') {
9265 for (i = 0; i < (int)esignlen; i++)
9269 for (i = zeros; i; i--)
9273 Copy(eptr, p, elen, char);
9277 memset(p, ' ', gap);
9282 Copy(dotstr, p, dotstrlen, char);
9286 vectorize = FALSE; /* done iterating over vecstr */
9293 SvCUR(sv) = p - SvPVX(sv);
9301 /* =========================================================================
9303 =head1 Cloning an interpreter
9305 All the macros and functions in this section are for the private use of
9306 the main function, perl_clone().
9308 The foo_dup() functions make an exact copy of an existing foo thinngy.
9309 During the course of a cloning, a hash table is used to map old addresses
9310 to new addresses. The table is created and manipulated with the
9311 ptr_table_* functions.
9315 ============================================================================*/
9318 #if defined(USE_ITHREADS)
9320 #if defined(USE_5005THREADS)
9321 # include "error: USE_5005THREADS and USE_ITHREADS are incompatible"
9324 #ifndef GpREFCNT_inc
9325 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9329 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
9330 #define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
9331 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9332 #define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
9333 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9334 #define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
9335 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9336 #define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
9337 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9338 #define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
9339 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9340 #define SAVEPV(p) (p ? savepv(p) : Nullch)
9341 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
9344 /* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
9345 regcomp.c. AMS 20010712 */
9348 Perl_re_dup(pTHX_ REGEXP *r, CLONE_PARAMS *param)
9352 struct reg_substr_datum *s;
9355 return (REGEXP *)NULL;
9357 if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
9360 len = r->offsets[0];
9361 npar = r->nparens+1;
9363 Newc(0, ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
9364 Copy(r->program, ret->program, len+1, regnode);
9366 New(0, ret->startp, npar, I32);
9367 Copy(r->startp, ret->startp, npar, I32);
9368 New(0, ret->endp, npar, I32);
9369 Copy(r->startp, ret->startp, npar, I32);
9371 New(0, ret->substrs, 1, struct reg_substr_data);
9372 for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
9373 s->min_offset = r->substrs->data[i].min_offset;
9374 s->max_offset = r->substrs->data[i].max_offset;
9375 s->substr = sv_dup_inc(r->substrs->data[i].substr, param);
9376 s->utf8_substr = sv_dup_inc(r->substrs->data[i].utf8_substr, param);
9379 ret->regstclass = NULL;
9382 int count = r->data->count;
9384 Newc(0, d, sizeof(struct reg_data) + count*sizeof(void *),
9385 char, struct reg_data);
9386 New(0, d->what, count, U8);
9389 for (i = 0; i < count; i++) {
9390 d->what[i] = r->data->what[i];
9391 switch (d->what[i]) {
9393 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
9396 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
9399 /* This is cheating. */
9400 New(0, d->data[i], 1, struct regnode_charclass_class);
9401 StructCopy(r->data->data[i], d->data[i],
9402 struct regnode_charclass_class);
9403 ret->regstclass = (regnode*)d->data[i];
9406 /* Compiled op trees are readonly, and can thus be
9407 shared without duplication. */
9408 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
9411 d->data[i] = r->data->data[i];
9421 New(0, ret->offsets, 2*len+1, U32);
9422 Copy(r->offsets, ret->offsets, 2*len+1, U32);
9424 ret->precomp = SAVEPVN(r->precomp, r->prelen);
9425 ret->refcnt = r->refcnt;
9426 ret->minlen = r->minlen;
9427 ret->prelen = r->prelen;
9428 ret->nparens = r->nparens;
9429 ret->lastparen = r->lastparen;
9430 ret->lastcloseparen = r->lastcloseparen;
9431 ret->reganch = r->reganch;
9433 ret->sublen = r->sublen;
9435 if (RX_MATCH_COPIED(ret))
9436 ret->subbeg = SAVEPVN(r->subbeg, r->sublen);
9438 ret->subbeg = Nullch;
9440 ptr_table_store(PL_ptr_table, r, ret);
9444 /* duplicate a file handle */
9447 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
9451 return (PerlIO*)NULL;
9453 /* look for it in the table first */
9454 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9458 /* create anew and remember what it is */
9459 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
9460 ptr_table_store(PL_ptr_table, fp, ret);
9464 /* duplicate a directory handle */
9467 Perl_dirp_dup(pTHX_ DIR *dp)
9475 /* duplicate a typeglob */
9478 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
9483 /* look for it in the table first */
9484 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9488 /* create anew and remember what it is */
9489 Newz(0, ret, 1, GP);
9490 ptr_table_store(PL_ptr_table, gp, ret);
9493 ret->gp_refcnt = 0; /* must be before any other dups! */
9494 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
9495 ret->gp_io = io_dup_inc(gp->gp_io, param);
9496 ret->gp_form = cv_dup_inc(gp->gp_form, param);
9497 ret->gp_av = av_dup_inc(gp->gp_av, param);
9498 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
9499 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9500 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
9501 ret->gp_cvgen = gp->gp_cvgen;
9502 ret->gp_flags = gp->gp_flags;
9503 ret->gp_line = gp->gp_line;
9504 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
9508 /* duplicate a chain of magic */
9511 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
9513 MAGIC *mgprev = (MAGIC*)NULL;
9516 return (MAGIC*)NULL;
9517 /* look for it in the table first */
9518 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9522 for (; mg; mg = mg->mg_moremagic) {
9524 Newz(0, nmg, 1, MAGIC);
9526 mgprev->mg_moremagic = nmg;
9529 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
9530 nmg->mg_private = mg->mg_private;
9531 nmg->mg_type = mg->mg_type;
9532 nmg->mg_flags = mg->mg_flags;
9533 if (mg->mg_type == PERL_MAGIC_qr) {
9534 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
9536 else if(mg->mg_type == PERL_MAGIC_backref) {
9537 AV *av = (AV*) mg->mg_obj;
9540 SvREFCNT_inc(nmg->mg_obj = (SV*)newAV());
9542 for (i = AvFILLp(av); i >= 0; i--) {
9543 if (!svp[i]) continue;
9544 av_push((AV*)nmg->mg_obj,sv_dup(svp[i],param));
9548 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
9549 ? sv_dup_inc(mg->mg_obj, param)
9550 : sv_dup(mg->mg_obj, param);
9552 nmg->mg_len = mg->mg_len;
9553 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
9554 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
9555 if (mg->mg_len > 0) {
9556 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
9557 if (mg->mg_type == PERL_MAGIC_overload_table &&
9558 AMT_AMAGIC((AMT*)mg->mg_ptr))
9560 AMT *amtp = (AMT*)mg->mg_ptr;
9561 AMT *namtp = (AMT*)nmg->mg_ptr;
9563 for (i = 1; i < NofAMmeth; i++) {
9564 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
9568 else if (mg->mg_len == HEf_SVKEY)
9569 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
9571 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9572 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9579 /* create a new pointer-mapping table */
9582 Perl_ptr_table_new(pTHX)
9585 Newz(0, tbl, 1, PTR_TBL_t);
9588 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
9593 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 3)
9595 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 2)
9598 /* map an existing pointer using a table */
9601 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
9603 PTR_TBL_ENT_t *tblent;
9604 UV hash = PTR_TABLE_HASH(sv);
9606 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9607 for (; tblent; tblent = tblent->next) {
9608 if (tblent->oldval == sv)
9609 return tblent->newval;
9614 /* add a new entry to a pointer-mapping table */
9617 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
9619 PTR_TBL_ENT_t *tblent, **otblent;
9620 /* XXX this may be pessimal on platforms where pointers aren't good
9621 * hash values e.g. if they grow faster in the most significant
9623 UV hash = PTR_TABLE_HASH(oldv);
9627 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
9628 for (tblent = *otblent; tblent; empty=0, tblent = tblent->next) {
9629 if (tblent->oldval == oldv) {
9630 tblent->newval = newv;
9634 Newz(0, tblent, 1, PTR_TBL_ENT_t);
9635 tblent->oldval = oldv;
9636 tblent->newval = newv;
9637 tblent->next = *otblent;
9640 if (!empty && tbl->tbl_items > tbl->tbl_max)
9641 ptr_table_split(tbl);
9644 /* double the hash bucket size of an existing ptr table */
9647 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9649 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
9650 UV oldsize = tbl->tbl_max + 1;
9651 UV newsize = oldsize * 2;
9654 Renew(ary, newsize, PTR_TBL_ENT_t*);
9655 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9656 tbl->tbl_max = --newsize;
9658 for (i=0; i < oldsize; i++, ary++) {
9659 PTR_TBL_ENT_t **curentp, **entp, *ent;
9662 curentp = ary + oldsize;
9663 for (entp = ary, ent = *ary; ent; ent = *entp) {
9664 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
9666 ent->next = *curentp;
9676 /* remove all the entries from a ptr table */
9679 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9681 register PTR_TBL_ENT_t **array;
9682 register PTR_TBL_ENT_t *entry;
9683 register PTR_TBL_ENT_t *oentry = Null(PTR_TBL_ENT_t*);
9687 if (!tbl || !tbl->tbl_items) {
9691 array = tbl->tbl_ary;
9698 entry = entry->next;
9702 if (++riter > max) {
9705 entry = array[riter];
9712 /* clear and free a ptr table */
9715 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9720 ptr_table_clear(tbl);
9721 Safefree(tbl->tbl_ary);
9729 /* attempt to make everything in the typeglob readonly */
9732 S_gv_share(pTHX_ SV *sstr, CLONE_PARAMS *param)
9735 SV *sv = ¶m->proto_perl->Isv_no; /* just need SvREADONLY-ness */
9737 if (GvIO(gv) || GvFORM(gv)) {
9738 GvUNIQUE_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
9740 else if (!GvCV(gv)) {
9744 /* CvPADLISTs cannot be shared */
9745 if (!SvREADONLY(GvCV(gv)) && !CvXSUB(GvCV(gv))) {
9750 if (!GvUNIQUE(gv)) {
9752 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
9753 HvNAME(GvSTASH(gv)), GvNAME(gv));
9759 * write attempts will die with
9760 * "Modification of a read-only value attempted"
9766 SvREADONLY_on(GvSV(gv));
9773 SvREADONLY_on(GvAV(gv));
9780 SvREADONLY_on(GvHV(gv));
9783 return sstr; /* he_dup() will SvREFCNT_inc() */
9786 /* duplicate an SV of any type (including AV, HV etc) */
9789 Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param)
9792 SvRV(dstr) = SvWEAKREF(sstr)
9793 ? sv_dup(SvRV(sstr), param)
9794 : sv_dup_inc(SvRV(sstr), param);
9796 else if (SvPVX(sstr)) {
9797 /* Has something there */
9799 /* Normal PV - clone whole allocated space */
9800 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
9803 /* Special case - not normally malloced for some reason */
9804 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
9805 /* A "shared" PV - clone it as unshared string */
9806 if(SvPADTMP(sstr)) {
9807 /* However, some of them live in the pad
9808 and they should not have these flags
9811 SvPVX(dstr) = sharepvn(SvPVX(sstr), SvCUR(sstr),
9813 SvUVX(dstr) = SvUVX(sstr);
9816 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvCUR(sstr));
9818 SvREADONLY_off(dstr);
9822 /* Some other special case - random pointer */
9823 SvPVX(dstr) = SvPVX(sstr);
9829 SvPVX(dstr) = SvPVX(sstr);
9834 Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param)
9838 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
9840 /* look for it in the table first */
9841 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
9845 if(param->flags & CLONEf_JOIN_IN) {
9846 /** We are joining here so we don't want do clone
9847 something that is bad **/
9849 if(SvTYPE(sstr) == SVt_PVHV &&
9851 /** don't clone stashes if they already exist **/
9852 HV* old_stash = gv_stashpv(HvNAME(sstr),0);
9853 return (SV*) old_stash;
9857 /* create anew and remember what it is */
9859 ptr_table_store(PL_ptr_table, sstr, dstr);
9862 SvFLAGS(dstr) = SvFLAGS(sstr);
9863 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
9864 SvREFCNT(dstr) = 0; /* must be before any other dups! */
9867 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
9868 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
9869 PL_watch_pvx, SvPVX(sstr));
9872 switch (SvTYPE(sstr)) {
9877 SvANY(dstr) = new_XIV();
9878 SvIVX(dstr) = SvIVX(sstr);
9881 SvANY(dstr) = new_XNV();
9882 SvNVX(dstr) = SvNVX(sstr);
9885 SvANY(dstr) = new_XRV();
9886 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9889 SvANY(dstr) = new_XPV();
9890 SvCUR(dstr) = SvCUR(sstr);
9891 SvLEN(dstr) = SvLEN(sstr);
9892 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9895 SvANY(dstr) = new_XPVIV();
9896 SvCUR(dstr) = SvCUR(sstr);
9897 SvLEN(dstr) = SvLEN(sstr);
9898 SvIVX(dstr) = SvIVX(sstr);
9899 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9902 SvANY(dstr) = new_XPVNV();
9903 SvCUR(dstr) = SvCUR(sstr);
9904 SvLEN(dstr) = SvLEN(sstr);
9905 SvIVX(dstr) = SvIVX(sstr);
9906 SvNVX(dstr) = SvNVX(sstr);
9907 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9910 SvANY(dstr) = new_XPVMG();
9911 SvCUR(dstr) = SvCUR(sstr);
9912 SvLEN(dstr) = SvLEN(sstr);
9913 SvIVX(dstr) = SvIVX(sstr);
9914 SvNVX(dstr) = SvNVX(sstr);
9915 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9916 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9917 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9920 SvANY(dstr) = new_XPVBM();
9921 SvCUR(dstr) = SvCUR(sstr);
9922 SvLEN(dstr) = SvLEN(sstr);
9923 SvIVX(dstr) = SvIVX(sstr);
9924 SvNVX(dstr) = SvNVX(sstr);
9925 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9926 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9927 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9928 BmRARE(dstr) = BmRARE(sstr);
9929 BmUSEFUL(dstr) = BmUSEFUL(sstr);
9930 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
9933 SvANY(dstr) = new_XPVLV();
9934 SvCUR(dstr) = SvCUR(sstr);
9935 SvLEN(dstr) = SvLEN(sstr);
9936 SvIVX(dstr) = SvIVX(sstr);
9937 SvNVX(dstr) = SvNVX(sstr);
9938 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9939 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9940 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9941 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
9942 LvTARGLEN(dstr) = LvTARGLEN(sstr);
9943 if (LvTYPE(sstr) == 't') /* for tie: unrefcnted fake (SV**) */
9944 LvTARG(dstr) = dstr;
9945 else if (LvTYPE(sstr) == 'T') /* for tie: fake HE */
9946 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(sstr), 0, param);
9948 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr), param);
9949 LvTYPE(dstr) = LvTYPE(sstr);
9952 if (GvUNIQUE((GV*)sstr)) {
9954 if ((share = gv_share(sstr, param))) {
9957 ptr_table_store(PL_ptr_table, sstr, dstr);
9959 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
9960 HvNAME(GvSTASH(share)), GvNAME(share));
9965 SvANY(dstr) = new_XPVGV();
9966 SvCUR(dstr) = SvCUR(sstr);
9967 SvLEN(dstr) = SvLEN(sstr);
9968 SvIVX(dstr) = SvIVX(sstr);
9969 SvNVX(dstr) = SvNVX(sstr);
9970 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9971 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9972 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9973 GvNAMELEN(dstr) = GvNAMELEN(sstr);
9974 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
9975 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr), param);
9976 GvFLAGS(dstr) = GvFLAGS(sstr);
9977 GvGP(dstr) = gp_dup(GvGP(sstr), param);
9978 (void)GpREFCNT_inc(GvGP(dstr));
9981 SvANY(dstr) = new_XPVIO();
9982 SvCUR(dstr) = SvCUR(sstr);
9983 SvLEN(dstr) = SvLEN(sstr);
9984 SvIVX(dstr) = SvIVX(sstr);
9985 SvNVX(dstr) = SvNVX(sstr);
9986 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9987 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9988 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9989 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr), param);
9990 if (IoOFP(sstr) == IoIFP(sstr))
9991 IoOFP(dstr) = IoIFP(dstr);
9993 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr), param);
9994 /* PL_rsfp_filters entries have fake IoDIRP() */
9995 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
9996 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
9998 IoDIRP(dstr) = IoDIRP(sstr);
9999 IoLINES(dstr) = IoLINES(sstr);
10000 IoPAGE(dstr) = IoPAGE(sstr);
10001 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
10002 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
10003 if(IoFLAGS(sstr) & IOf_FAKE_DIRP) {
10004 /* I have no idea why fake dirp (rsfps)
10005 should be treaded differently but otherwise
10006 we end up with leaks -- sky*/
10007 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(sstr), param);
10008 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(sstr), param);
10009 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(sstr), param);
10011 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr), param);
10012 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr), param);
10013 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr), param);
10015 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
10016 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
10017 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
10018 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
10019 IoTYPE(dstr) = IoTYPE(sstr);
10020 IoFLAGS(dstr) = IoFLAGS(sstr);
10023 SvANY(dstr) = new_XPVAV();
10024 SvCUR(dstr) = SvCUR(sstr);
10025 SvLEN(dstr) = SvLEN(sstr);
10026 SvIVX(dstr) = SvIVX(sstr);
10027 SvNVX(dstr) = SvNVX(sstr);
10028 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
10029 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
10030 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param);
10031 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
10032 if (AvARRAY((AV*)sstr)) {
10033 SV **dst_ary, **src_ary;
10034 SSize_t items = AvFILLp((AV*)sstr) + 1;
10036 src_ary = AvARRAY((AV*)sstr);
10037 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
10038 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10039 SvPVX(dstr) = (char*)dst_ary;
10040 AvALLOC((AV*)dstr) = dst_ary;
10041 if (AvREAL((AV*)sstr)) {
10042 while (items-- > 0)
10043 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10046 while (items-- > 0)
10047 *dst_ary++ = sv_dup(*src_ary++, param);
10049 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10050 while (items-- > 0) {
10051 *dst_ary++ = &PL_sv_undef;
10055 SvPVX(dstr) = Nullch;
10056 AvALLOC((AV*)dstr) = (SV**)NULL;
10060 SvANY(dstr) = new_XPVHV();
10061 SvCUR(dstr) = SvCUR(sstr);
10062 SvLEN(dstr) = SvLEN(sstr);
10063 SvIVX(dstr) = SvIVX(sstr);
10064 SvNVX(dstr) = SvNVX(sstr);
10065 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
10066 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
10067 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
10068 if (HvARRAY((HV*)sstr)) {
10070 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
10071 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
10072 Newz(0, dxhv->xhv_array,
10073 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
10074 while (i <= sxhv->xhv_max) {
10075 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
10076 (bool)!!HvSHAREKEYS(sstr),
10080 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter,
10081 (bool)!!HvSHAREKEYS(sstr), param);
10084 SvPVX(dstr) = Nullch;
10085 HvEITER((HV*)dstr) = (HE*)NULL;
10087 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
10088 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
10089 /* Record stashes for possible cloning in Perl_clone(). */
10090 if(HvNAME((HV*)dstr))
10091 av_push(param->stashes, dstr);
10094 SvANY(dstr) = new_XPVFM();
10095 FmLINES(dstr) = FmLINES(sstr);
10099 SvANY(dstr) = new_XPVCV();
10101 SvCUR(dstr) = SvCUR(sstr);
10102 SvLEN(dstr) = SvLEN(sstr);
10103 SvIVX(dstr) = SvIVX(sstr);
10104 SvNVX(dstr) = SvNVX(sstr);
10105 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
10106 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
10107 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10108 CvSTASH(dstr) = hv_dup(CvSTASH(sstr), param); /* NOTE: not refcounted */
10109 CvSTART(dstr) = CvSTART(sstr);
10110 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
10111 CvXSUB(dstr) = CvXSUB(sstr);
10112 CvXSUBANY(dstr) = CvXSUBANY(sstr);
10113 if (CvCONST(sstr)) {
10114 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(sstr)) ?
10115 SvREFCNT_inc(CvXSUBANY(sstr).any_ptr) :
10116 sv_dup_inc(CvXSUBANY(sstr).any_ptr, param);
10118 /* don't dup if copying back - CvGV isn't refcounted, so the
10119 * duped GV may never be freed. A bit of a hack! DAPM */
10120 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
10121 Nullgv : gv_dup(CvGV(sstr), param) ;
10122 if (param->flags & CLONEf_COPY_STACKS) {
10123 CvDEPTH(dstr) = CvDEPTH(sstr);
10127 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10128 CvOUTSIDE_SEQ(dstr) = CvOUTSIDE_SEQ(sstr);
10130 CvWEAKOUTSIDE(sstr)
10131 ? cv_dup( CvOUTSIDE(sstr), param)
10132 : cv_dup_inc(CvOUTSIDE(sstr), param);
10133 CvFLAGS(dstr) = CvFLAGS(sstr);
10134 CvFILE(dstr) = CvXSUB(sstr) ? CvFILE(sstr) : SAVEPV(CvFILE(sstr));
10137 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
10141 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10147 /* duplicate a context */
10150 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10152 PERL_CONTEXT *ncxs;
10155 return (PERL_CONTEXT*)NULL;
10157 /* look for it in the table first */
10158 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10162 /* create anew and remember what it is */
10163 Newz(56, ncxs, max + 1, PERL_CONTEXT);
10164 ptr_table_store(PL_ptr_table, cxs, ncxs);
10167 PERL_CONTEXT *cx = &cxs[ix];
10168 PERL_CONTEXT *ncx = &ncxs[ix];
10169 ncx->cx_type = cx->cx_type;
10170 if (CxTYPE(cx) == CXt_SUBST) {
10171 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10174 ncx->blk_oldsp = cx->blk_oldsp;
10175 ncx->blk_oldcop = cx->blk_oldcop;
10176 ncx->blk_oldretsp = cx->blk_oldretsp;
10177 ncx->blk_oldmarksp = cx->blk_oldmarksp;
10178 ncx->blk_oldscopesp = cx->blk_oldscopesp;
10179 ncx->blk_oldpm = cx->blk_oldpm;
10180 ncx->blk_gimme = cx->blk_gimme;
10181 switch (CxTYPE(cx)) {
10183 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
10184 ? cv_dup_inc(cx->blk_sub.cv, param)
10185 : cv_dup(cx->blk_sub.cv,param));
10186 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
10187 ? av_dup_inc(cx->blk_sub.argarray, param)
10189 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
10190 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
10191 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10192 ncx->blk_sub.lval = cx->blk_sub.lval;
10195 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10196 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
10197 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
10198 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
10199 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
10202 ncx->blk_loop.label = cx->blk_loop.label;
10203 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
10204 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
10205 ncx->blk_loop.next_op = cx->blk_loop.next_op;
10206 ncx->blk_loop.last_op = cx->blk_loop.last_op;
10207 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
10208 ? cx->blk_loop.iterdata
10209 : gv_dup((GV*)cx->blk_loop.iterdata, param));
10210 ncx->blk_loop.oldcomppad
10211 = (PAD*)ptr_table_fetch(PL_ptr_table,
10212 cx->blk_loop.oldcomppad);
10213 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
10214 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
10215 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
10216 ncx->blk_loop.iterix = cx->blk_loop.iterix;
10217 ncx->blk_loop.itermax = cx->blk_loop.itermax;
10220 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
10221 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
10222 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
10223 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10235 /* duplicate a stack info structure */
10238 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
10243 return (PERL_SI*)NULL;
10245 /* look for it in the table first */
10246 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10250 /* create anew and remember what it is */
10251 Newz(56, nsi, 1, PERL_SI);
10252 ptr_table_store(PL_ptr_table, si, nsi);
10254 nsi->si_stack = av_dup_inc(si->si_stack, param);
10255 nsi->si_cxix = si->si_cxix;
10256 nsi->si_cxmax = si->si_cxmax;
10257 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
10258 nsi->si_type = si->si_type;
10259 nsi->si_prev = si_dup(si->si_prev, param);
10260 nsi->si_next = si_dup(si->si_next, param);
10261 nsi->si_markoff = si->si_markoff;
10266 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10267 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
10268 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10269 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
10270 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10271 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
10272 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10273 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
10274 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10275 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10276 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10277 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10278 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10279 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10282 #define pv_dup_inc(p) SAVEPV(p)
10283 #define pv_dup(p) SAVEPV(p)
10284 #define svp_dup_inc(p,pp) any_dup(p,pp)
10286 /* map any object to the new equivent - either something in the
10287 * ptr table, or something in the interpreter structure
10291 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
10296 return (void*)NULL;
10298 /* look for it in the table first */
10299 ret = ptr_table_fetch(PL_ptr_table, v);
10303 /* see if it is part of the interpreter structure */
10304 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
10305 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
10313 /* duplicate the save stack */
10316 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
10318 ANY *ss = proto_perl->Tsavestack;
10319 I32 ix = proto_perl->Tsavestack_ix;
10320 I32 max = proto_perl->Tsavestack_max;
10333 void (*dptr) (void*);
10334 void (*dxptr) (pTHX_ void*);
10337 Newz(54, nss, max, ANY);
10341 TOPINT(nss,ix) = i;
10343 case SAVEt_ITEM: /* normal string */
10344 sv = (SV*)POPPTR(ss,ix);
10345 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10346 sv = (SV*)POPPTR(ss,ix);
10347 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10349 case SAVEt_SV: /* scalar reference */
10350 sv = (SV*)POPPTR(ss,ix);
10351 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10352 gv = (GV*)POPPTR(ss,ix);
10353 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10355 case SAVEt_GENERIC_PVREF: /* generic char* */
10356 c = (char*)POPPTR(ss,ix);
10357 TOPPTR(nss,ix) = pv_dup(c);
10358 ptr = POPPTR(ss,ix);
10359 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10361 case SAVEt_SHARED_PVREF: /* char* in shared space */
10362 c = (char*)POPPTR(ss,ix);
10363 TOPPTR(nss,ix) = savesharedpv(c);
10364 ptr = POPPTR(ss,ix);
10365 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10367 case SAVEt_GENERIC_SVREF: /* generic sv */
10368 case SAVEt_SVREF: /* scalar reference */
10369 sv = (SV*)POPPTR(ss,ix);
10370 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10371 ptr = POPPTR(ss,ix);
10372 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10374 case SAVEt_AV: /* array reference */
10375 av = (AV*)POPPTR(ss,ix);
10376 TOPPTR(nss,ix) = av_dup_inc(av, param);
10377 gv = (GV*)POPPTR(ss,ix);
10378 TOPPTR(nss,ix) = gv_dup(gv, param);
10380 case SAVEt_HV: /* hash reference */
10381 hv = (HV*)POPPTR(ss,ix);
10382 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10383 gv = (GV*)POPPTR(ss,ix);
10384 TOPPTR(nss,ix) = gv_dup(gv, param);
10386 case SAVEt_INT: /* int reference */
10387 ptr = POPPTR(ss,ix);
10388 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10389 intval = (int)POPINT(ss,ix);
10390 TOPINT(nss,ix) = intval;
10392 case SAVEt_LONG: /* long reference */
10393 ptr = POPPTR(ss,ix);
10394 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10395 longval = (long)POPLONG(ss,ix);
10396 TOPLONG(nss,ix) = longval;
10398 case SAVEt_I32: /* I32 reference */
10399 case SAVEt_I16: /* I16 reference */
10400 case SAVEt_I8: /* I8 reference */
10401 ptr = POPPTR(ss,ix);
10402 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10404 TOPINT(nss,ix) = i;
10406 case SAVEt_IV: /* IV reference */
10407 ptr = POPPTR(ss,ix);
10408 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10410 TOPIV(nss,ix) = iv;
10412 case SAVEt_SPTR: /* SV* reference */
10413 ptr = POPPTR(ss,ix);
10414 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10415 sv = (SV*)POPPTR(ss,ix);
10416 TOPPTR(nss,ix) = sv_dup(sv, param);
10418 case SAVEt_VPTR: /* random* reference */
10419 ptr = POPPTR(ss,ix);
10420 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10421 ptr = POPPTR(ss,ix);
10422 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10424 case SAVEt_PPTR: /* char* reference */
10425 ptr = POPPTR(ss,ix);
10426 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10427 c = (char*)POPPTR(ss,ix);
10428 TOPPTR(nss,ix) = pv_dup(c);
10430 case SAVEt_HPTR: /* HV* reference */
10431 ptr = POPPTR(ss,ix);
10432 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10433 hv = (HV*)POPPTR(ss,ix);
10434 TOPPTR(nss,ix) = hv_dup(hv, param);
10436 case SAVEt_APTR: /* AV* reference */
10437 ptr = POPPTR(ss,ix);
10438 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10439 av = (AV*)POPPTR(ss,ix);
10440 TOPPTR(nss,ix) = av_dup(av, param);
10443 gv = (GV*)POPPTR(ss,ix);
10444 TOPPTR(nss,ix) = gv_dup(gv, param);
10446 case SAVEt_GP: /* scalar reference */
10447 gp = (GP*)POPPTR(ss,ix);
10448 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
10449 (void)GpREFCNT_inc(gp);
10450 gv = (GV*)POPPTR(ss,ix);
10451 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10452 c = (char*)POPPTR(ss,ix);
10453 TOPPTR(nss,ix) = pv_dup(c);
10455 TOPIV(nss,ix) = iv;
10457 TOPIV(nss,ix) = iv;
10460 case SAVEt_MORTALIZESV:
10461 sv = (SV*)POPPTR(ss,ix);
10462 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10465 ptr = POPPTR(ss,ix);
10466 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10467 /* these are assumed to be refcounted properly */
10468 switch (((OP*)ptr)->op_type) {
10470 case OP_LEAVESUBLV:
10474 case OP_LEAVEWRITE:
10475 TOPPTR(nss,ix) = ptr;
10480 TOPPTR(nss,ix) = Nullop;
10485 TOPPTR(nss,ix) = Nullop;
10488 c = (char*)POPPTR(ss,ix);
10489 TOPPTR(nss,ix) = pv_dup_inc(c);
10491 case SAVEt_CLEARSV:
10492 longval = POPLONG(ss,ix);
10493 TOPLONG(nss,ix) = longval;
10496 hv = (HV*)POPPTR(ss,ix);
10497 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10498 c = (char*)POPPTR(ss,ix);
10499 TOPPTR(nss,ix) = pv_dup_inc(c);
10501 TOPINT(nss,ix) = i;
10503 case SAVEt_DESTRUCTOR:
10504 ptr = POPPTR(ss,ix);
10505 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10506 dptr = POPDPTR(ss,ix);
10507 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
10509 case SAVEt_DESTRUCTOR_X:
10510 ptr = POPPTR(ss,ix);
10511 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10512 dxptr = POPDXPTR(ss,ix);
10513 TOPDXPTR(nss,ix) = (void (*)(pTHX_ void*))any_dup((void *)dxptr, proto_perl);
10515 case SAVEt_REGCONTEXT:
10518 TOPINT(nss,ix) = i;
10521 case SAVEt_STACK_POS: /* Position on Perl stack */
10523 TOPINT(nss,ix) = i;
10525 case SAVEt_AELEM: /* array element */
10526 sv = (SV*)POPPTR(ss,ix);
10527 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10529 TOPINT(nss,ix) = i;
10530 av = (AV*)POPPTR(ss,ix);
10531 TOPPTR(nss,ix) = av_dup_inc(av, param);
10533 case SAVEt_HELEM: /* hash element */
10534 sv = (SV*)POPPTR(ss,ix);
10535 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10536 sv = (SV*)POPPTR(ss,ix);
10537 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10538 hv = (HV*)POPPTR(ss,ix);
10539 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10542 ptr = POPPTR(ss,ix);
10543 TOPPTR(nss,ix) = ptr;
10547 TOPINT(nss,ix) = i;
10549 case SAVEt_COMPPAD:
10550 av = (AV*)POPPTR(ss,ix);
10551 TOPPTR(nss,ix) = av_dup(av, param);
10554 longval = (long)POPLONG(ss,ix);
10555 TOPLONG(nss,ix) = longval;
10556 ptr = POPPTR(ss,ix);
10557 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10558 sv = (SV*)POPPTR(ss,ix);
10559 TOPPTR(nss,ix) = sv_dup(sv, param);
10562 ptr = POPPTR(ss,ix);
10563 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10564 longval = (long)POPBOOL(ss,ix);
10565 TOPBOOL(nss,ix) = (bool)longval;
10568 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
10576 =for apidoc perl_clone
10578 Create and return a new interpreter by cloning the current one.
10580 perl_clone takes these flags as parameters:
10582 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10583 without it we only clone the data and zero the stacks,
10584 with it we copy the stacks and the new perl interpreter is
10585 ready to run at the exact same point as the previous one.
10586 The pseudo-fork code uses COPY_STACKS while the
10587 threads->new doesn't.
10589 CLONEf_KEEP_PTR_TABLE
10590 perl_clone keeps a ptr_table with the pointer of the old
10591 variable as a key and the new variable as a value,
10592 this allows it to check if something has been cloned and not
10593 clone it again but rather just use the value and increase the
10594 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10595 the ptr_table using the function
10596 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10597 reason to keep it around is if you want to dup some of your own
10598 variable who are outside the graph perl scans, example of this
10599 code is in threads.xs create
10602 This is a win32 thing, it is ignored on unix, it tells perls
10603 win32host code (which is c++) to clone itself, this is needed on
10604 win32 if you want to run two threads at the same time,
10605 if you just want to do some stuff in a separate perl interpreter
10606 and then throw it away and return to the original one,
10607 you don't need to do anything.
10612 /* XXX the above needs expanding by someone who actually understands it ! */
10613 EXTERN_C PerlInterpreter *
10614 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10617 perl_clone(PerlInterpreter *proto_perl, UV flags)
10619 #ifdef PERL_IMPLICIT_SYS
10621 /* perlhost.h so we need to call into it
10622 to clone the host, CPerlHost should have a c interface, sky */
10624 if (flags & CLONEf_CLONE_HOST) {
10625 return perl_clone_host(proto_perl,flags);
10627 return perl_clone_using(proto_perl, flags,
10629 proto_perl->IMemShared,
10630 proto_perl->IMemParse,
10632 proto_perl->IStdIO,
10636 proto_perl->IProc);
10640 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10641 struct IPerlMem* ipM, struct IPerlMem* ipMS,
10642 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10643 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10644 struct IPerlDir* ipD, struct IPerlSock* ipS,
10645 struct IPerlProc* ipP)
10647 /* XXX many of the string copies here can be optimized if they're
10648 * constants; they need to be allocated as common memory and just
10649 * their pointers copied. */
10652 CLONE_PARAMS clone_params;
10653 CLONE_PARAMS* param = &clone_params;
10655 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
10656 PERL_SET_THX(my_perl);
10659 Poison(my_perl, 1, PerlInterpreter);
10663 PL_savestack_ix = 0;
10664 PL_savestack_max = -1;
10666 PL_sig_pending = 0;
10667 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10668 # else /* !DEBUGGING */
10669 Zero(my_perl, 1, PerlInterpreter);
10670 # endif /* DEBUGGING */
10672 /* host pointers */
10674 PL_MemShared = ipMS;
10675 PL_MemParse = ipMP;
10682 #else /* !PERL_IMPLICIT_SYS */
10684 CLONE_PARAMS clone_params;
10685 CLONE_PARAMS* param = &clone_params;
10686 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
10687 PERL_SET_THX(my_perl);
10692 Poison(my_perl, 1, PerlInterpreter);
10696 PL_savestack_ix = 0;
10697 PL_savestack_max = -1;
10699 PL_sig_pending = 0;
10700 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10701 # else /* !DEBUGGING */
10702 Zero(my_perl, 1, PerlInterpreter);
10703 # endif /* DEBUGGING */
10704 #endif /* PERL_IMPLICIT_SYS */
10705 param->flags = flags;
10706 param->proto_perl = proto_perl;
10709 PL_xiv_arenaroot = NULL;
10710 PL_xiv_root = NULL;
10711 PL_xnv_arenaroot = NULL;
10712 PL_xnv_root = NULL;
10713 PL_xrv_arenaroot = NULL;
10714 PL_xrv_root = NULL;
10715 PL_xpv_arenaroot = NULL;
10716 PL_xpv_root = NULL;
10717 PL_xpviv_arenaroot = NULL;
10718 PL_xpviv_root = NULL;
10719 PL_xpvnv_arenaroot = NULL;
10720 PL_xpvnv_root = NULL;
10721 PL_xpvcv_arenaroot = NULL;
10722 PL_xpvcv_root = NULL;
10723 PL_xpvav_arenaroot = NULL;
10724 PL_xpvav_root = NULL;
10725 PL_xpvhv_arenaroot = NULL;
10726 PL_xpvhv_root = NULL;
10727 PL_xpvmg_arenaroot = NULL;
10728 PL_xpvmg_root = NULL;
10729 PL_xpvlv_arenaroot = NULL;
10730 PL_xpvlv_root = NULL;
10731 PL_xpvbm_arenaroot = NULL;
10732 PL_xpvbm_root = NULL;
10733 PL_he_arenaroot = NULL;
10735 PL_nice_chunk = NULL;
10736 PL_nice_chunk_size = 0;
10738 PL_sv_objcount = 0;
10739 PL_sv_root = Nullsv;
10740 PL_sv_arenaroot = Nullsv;
10742 PL_debug = proto_perl->Idebug;
10744 #ifdef USE_REENTRANT_API
10745 /* XXX: things like -Dm will segfault here in perlio, but doing
10746 * PERL_SET_CONTEXT(proto_perl);
10747 * breaks too many other things
10749 Perl_reentrant_init(aTHX);
10752 /* create SV map for pointer relocation */
10753 PL_ptr_table = ptr_table_new();
10755 /* initialize these special pointers as early as possible */
10756 SvANY(&PL_sv_undef) = NULL;
10757 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
10758 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
10759 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
10761 SvANY(&PL_sv_no) = new_XPVNV();
10762 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
10763 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10764 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
10765 SvCUR(&PL_sv_no) = 0;
10766 SvLEN(&PL_sv_no) = 1;
10767 SvNVX(&PL_sv_no) = 0;
10768 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
10770 SvANY(&PL_sv_yes) = new_XPVNV();
10771 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
10772 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10773 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
10774 SvCUR(&PL_sv_yes) = 1;
10775 SvLEN(&PL_sv_yes) = 2;
10776 SvNVX(&PL_sv_yes) = 1;
10777 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
10779 /* create (a non-shared!) shared string table */
10780 PL_strtab = newHV();
10781 HvSHAREKEYS_off(PL_strtab);
10782 hv_ksplit(PL_strtab, 512);
10783 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
10785 PL_compiling = proto_perl->Icompiling;
10787 /* These two PVs will be free'd special way so must set them same way op.c does */
10788 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
10789 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
10791 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
10792 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
10794 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
10795 if (!specialWARN(PL_compiling.cop_warnings))
10796 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
10797 if (!specialCopIO(PL_compiling.cop_io))
10798 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
10799 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
10801 /* pseudo environmental stuff */
10802 PL_origargc = proto_perl->Iorigargc;
10803 PL_origargv = proto_perl->Iorigargv;
10805 param->stashes = newAV(); /* Setup array of objects to call clone on */
10807 #ifdef PERLIO_LAYERS
10808 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
10809 PerlIO_clone(aTHX_ proto_perl, param);
10812 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
10813 PL_incgv = gv_dup(proto_perl->Iincgv, param);
10814 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
10815 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
10816 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
10817 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
10820 PL_minus_c = proto_perl->Iminus_c;
10821 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
10822 PL_localpatches = proto_perl->Ilocalpatches;
10823 PL_splitstr = proto_perl->Isplitstr;
10824 PL_preprocess = proto_perl->Ipreprocess;
10825 PL_minus_n = proto_perl->Iminus_n;
10826 PL_minus_p = proto_perl->Iminus_p;
10827 PL_minus_l = proto_perl->Iminus_l;
10828 PL_minus_a = proto_perl->Iminus_a;
10829 PL_minus_F = proto_perl->Iminus_F;
10830 PL_doswitches = proto_perl->Idoswitches;
10831 PL_dowarn = proto_perl->Idowarn;
10832 PL_doextract = proto_perl->Idoextract;
10833 PL_sawampersand = proto_perl->Isawampersand;
10834 PL_unsafe = proto_perl->Iunsafe;
10835 PL_inplace = SAVEPV(proto_perl->Iinplace);
10836 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
10837 PL_perldb = proto_perl->Iperldb;
10838 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
10839 PL_exit_flags = proto_perl->Iexit_flags;
10841 /* magical thingies */
10842 /* XXX time(&PL_basetime) when asked for? */
10843 PL_basetime = proto_perl->Ibasetime;
10844 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
10846 PL_maxsysfd = proto_perl->Imaxsysfd;
10847 PL_multiline = proto_perl->Imultiline;
10848 PL_statusvalue = proto_perl->Istatusvalue;
10850 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
10852 PL_encoding = sv_dup(proto_perl->Iencoding, param);
10854 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
10855 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
10856 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
10858 /* Clone the regex array */
10859 PL_regex_padav = newAV();
10861 I32 len = av_len((AV*)proto_perl->Iregex_padav);
10862 SV** regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
10863 av_push(PL_regex_padav,
10864 sv_dup_inc(regexen[0],param));
10865 for(i = 1; i <= len; i++) {
10866 if(SvREPADTMP(regexen[i])) {
10867 av_push(PL_regex_padav, sv_dup_inc(regexen[i], param));
10869 av_push(PL_regex_padav,
10871 newSViv(PTR2IV(re_dup(INT2PTR(REGEXP *,
10872 SvIVX(regexen[i])), param)))
10877 PL_regex_pad = AvARRAY(PL_regex_padav);
10879 /* shortcuts to various I/O objects */
10880 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
10881 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
10882 PL_defgv = gv_dup(proto_perl->Idefgv, param);
10883 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
10884 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
10885 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
10887 /* shortcuts to regexp stuff */
10888 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
10890 /* shortcuts to misc objects */
10891 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
10893 /* shortcuts to debugging objects */
10894 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
10895 PL_DBline = gv_dup(proto_perl->IDBline, param);
10896 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
10897 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
10898 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
10899 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
10900 PL_lineary = av_dup(proto_perl->Ilineary, param);
10901 PL_dbargs = av_dup(proto_perl->Idbargs, param);
10903 /* symbol tables */
10904 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
10905 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
10906 PL_nullstash = hv_dup(proto_perl->Inullstash, param);
10907 PL_debstash = hv_dup(proto_perl->Idebstash, param);
10908 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
10909 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
10911 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
10912 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
10913 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
10914 PL_endav = av_dup_inc(proto_perl->Iendav, param);
10915 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
10916 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
10918 PL_sub_generation = proto_perl->Isub_generation;
10920 /* funky return mechanisms */
10921 PL_forkprocess = proto_perl->Iforkprocess;
10923 /* subprocess state */
10924 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
10926 /* internal state */
10927 PL_tainting = proto_perl->Itainting;
10928 PL_taint_warn = proto_perl->Itaint_warn;
10929 PL_maxo = proto_perl->Imaxo;
10930 if (proto_perl->Iop_mask)
10931 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
10933 PL_op_mask = Nullch;
10935 /* current interpreter roots */
10936 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
10937 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
10938 PL_main_start = proto_perl->Imain_start;
10939 PL_eval_root = proto_perl->Ieval_root;
10940 PL_eval_start = proto_perl->Ieval_start;
10942 /* runtime control stuff */
10943 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
10944 PL_copline = proto_perl->Icopline;
10946 PL_filemode = proto_perl->Ifilemode;
10947 PL_lastfd = proto_perl->Ilastfd;
10948 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
10951 PL_gensym = proto_perl->Igensym;
10952 PL_preambled = proto_perl->Ipreambled;
10953 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
10954 PL_laststatval = proto_perl->Ilaststatval;
10955 PL_laststype = proto_perl->Ilaststype;
10956 PL_mess_sv = Nullsv;
10958 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
10959 PL_ofmt = SAVEPV(proto_perl->Iofmt);
10961 /* interpreter atexit processing */
10962 PL_exitlistlen = proto_perl->Iexitlistlen;
10963 if (PL_exitlistlen) {
10964 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
10965 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
10968 PL_exitlist = (PerlExitListEntry*)NULL;
10969 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
10970 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
10971 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
10973 PL_profiledata = NULL;
10974 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
10975 /* PL_rsfp_filters entries have fake IoDIRP() */
10976 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
10978 PL_compcv = cv_dup(proto_perl->Icompcv, param);
10980 PAD_CLONE_VARS(proto_perl, param);
10982 #ifdef HAVE_INTERP_INTERN
10983 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
10986 /* more statics moved here */
10987 PL_generation = proto_perl->Igeneration;
10988 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
10990 PL_in_clean_objs = proto_perl->Iin_clean_objs;
10991 PL_in_clean_all = proto_perl->Iin_clean_all;
10993 PL_uid = proto_perl->Iuid;
10994 PL_euid = proto_perl->Ieuid;
10995 PL_gid = proto_perl->Igid;
10996 PL_egid = proto_perl->Iegid;
10997 PL_nomemok = proto_perl->Inomemok;
10998 PL_an = proto_perl->Ian;
10999 PL_op_seqmax = proto_perl->Iop_seqmax;
11000 PL_evalseq = proto_perl->Ievalseq;
11001 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11002 PL_origalen = proto_perl->Iorigalen;
11003 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11004 PL_osname = SAVEPV(proto_perl->Iosname);
11005 PL_sh_path_compat = proto_perl->Ish_path_compat; /* XXX never deallocated */
11006 PL_sighandlerp = proto_perl->Isighandlerp;
11009 PL_runops = proto_perl->Irunops;
11011 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
11014 PL_cshlen = proto_perl->Icshlen;
11015 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
11018 PL_lex_state = proto_perl->Ilex_state;
11019 PL_lex_defer = proto_perl->Ilex_defer;
11020 PL_lex_expect = proto_perl->Ilex_expect;
11021 PL_lex_formbrack = proto_perl->Ilex_formbrack;
11022 PL_lex_dojoin = proto_perl->Ilex_dojoin;
11023 PL_lex_starts = proto_perl->Ilex_starts;
11024 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff, param);
11025 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl, param);
11026 PL_lex_op = proto_perl->Ilex_op;
11027 PL_lex_inpat = proto_perl->Ilex_inpat;
11028 PL_lex_inwhat = proto_perl->Ilex_inwhat;
11029 PL_lex_brackets = proto_perl->Ilex_brackets;
11030 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
11031 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
11032 PL_lex_casemods = proto_perl->Ilex_casemods;
11033 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
11034 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
11036 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
11037 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
11038 PL_nexttoke = proto_perl->Inexttoke;
11040 /* XXX This is probably masking the deeper issue of why
11041 * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
11042 * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
11043 * (A little debugging with a watchpoint on it may help.)
11045 if (SvANY(proto_perl->Ilinestr)) {
11046 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
11047 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
11048 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11049 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
11050 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11051 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
11052 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11053 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
11054 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11057 PL_linestr = NEWSV(65,79);
11058 sv_upgrade(PL_linestr,SVt_PVIV);
11059 sv_setpvn(PL_linestr,"",0);
11060 PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
11062 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
11063 PL_pending_ident = proto_perl->Ipending_ident;
11064 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
11066 PL_expect = proto_perl->Iexpect;
11068 PL_multi_start = proto_perl->Imulti_start;
11069 PL_multi_end = proto_perl->Imulti_end;
11070 PL_multi_open = proto_perl->Imulti_open;
11071 PL_multi_close = proto_perl->Imulti_close;
11073 PL_error_count = proto_perl->Ierror_count;
11074 PL_subline = proto_perl->Isubline;
11075 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
11077 /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
11078 if (SvANY(proto_perl->Ilinestr)) {
11079 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
11080 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11081 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
11082 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11083 PL_last_lop_op = proto_perl->Ilast_lop_op;
11086 PL_last_uni = SvPVX(PL_linestr);
11087 PL_last_lop = SvPVX(PL_linestr);
11088 PL_last_lop_op = 0;
11090 PL_in_my = proto_perl->Iin_my;
11091 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
11093 PL_cryptseen = proto_perl->Icryptseen;
11096 PL_hints = proto_perl->Ihints;
11098 PL_amagic_generation = proto_perl->Iamagic_generation;
11100 #ifdef USE_LOCALE_COLLATE
11101 PL_collation_ix = proto_perl->Icollation_ix;
11102 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11103 PL_collation_standard = proto_perl->Icollation_standard;
11104 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11105 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11106 #endif /* USE_LOCALE_COLLATE */
11108 #ifdef USE_LOCALE_NUMERIC
11109 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11110 PL_numeric_standard = proto_perl->Inumeric_standard;
11111 PL_numeric_local = proto_perl->Inumeric_local;
11112 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11113 #endif /* !USE_LOCALE_NUMERIC */
11115 /* utf8 character classes */
11116 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11117 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11118 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11119 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11120 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11121 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11122 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11123 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11124 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11125 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11126 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11127 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11128 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11129 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11130 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11131 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11132 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11133 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11134 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11135 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11137 /* Did the locale setup indicate UTF-8? */
11138 PL_utf8locale = proto_perl->Iutf8locale;
11139 /* Unicode features (see perlrun/-C) */
11140 PL_unicode = proto_perl->Iunicode;
11142 /* Pre-5.8 signals control */
11143 PL_signals = proto_perl->Isignals;
11145 /* times() ticks per second */
11146 PL_clocktick = proto_perl->Iclocktick;
11148 /* Recursion stopper for PerlIO_find_layer */
11149 PL_in_load_module = proto_perl->Iin_load_module;
11151 /* sort() routine */
11152 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
11154 /* Not really needed/useful since the reenrant_retint is "volatile",
11155 * but do it for consistency's sake. */
11156 PL_reentrant_retint = proto_perl->Ireentrant_retint;
11158 /* Hooks to shared SVs and locks. */
11159 PL_sharehook = proto_perl->Isharehook;
11160 PL_lockhook = proto_perl->Ilockhook;
11161 PL_unlockhook = proto_perl->Iunlockhook;
11162 PL_threadhook = proto_perl->Ithreadhook;
11164 PL_runops_std = proto_perl->Irunops_std;
11165 PL_runops_dbg = proto_perl->Irunops_dbg;
11167 #ifdef THREADS_HAVE_PIDS
11168 PL_ppid = proto_perl->Ippid;
11172 PL_last_swash_hv = Nullhv; /* reinits on demand */
11173 PL_last_swash_klen = 0;
11174 PL_last_swash_key[0]= '\0';
11175 PL_last_swash_tmps = (U8*)NULL;
11176 PL_last_swash_slen = 0;
11178 /* perly.c globals */
11179 PL_yydebug = proto_perl->Iyydebug;
11180 PL_yynerrs = proto_perl->Iyynerrs;
11181 PL_yyerrflag = proto_perl->Iyyerrflag;
11182 PL_yychar = proto_perl->Iyychar;
11183 PL_yyval = proto_perl->Iyyval;
11184 PL_yylval = proto_perl->Iyylval;
11186 PL_glob_index = proto_perl->Iglob_index;
11187 PL_srand_called = proto_perl->Isrand_called;
11188 PL_hash_seed = proto_perl->Ihash_seed;
11189 PL_rehash_seed = proto_perl->Irehash_seed;
11190 PL_uudmap['M'] = 0; /* reinits on demand */
11191 PL_bitcount = Nullch; /* reinits on demand */
11193 if (proto_perl->Ipsig_pend) {
11194 Newz(0, PL_psig_pend, SIG_SIZE, int);
11197 PL_psig_pend = (int*)NULL;
11200 if (proto_perl->Ipsig_ptr) {
11201 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
11202 Newz(0, PL_psig_name, SIG_SIZE, SV*);
11203 for (i = 1; i < SIG_SIZE; i++) {
11204 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11205 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11209 PL_psig_ptr = (SV**)NULL;
11210 PL_psig_name = (SV**)NULL;
11213 /* thrdvar.h stuff */
11215 if (flags & CLONEf_COPY_STACKS) {
11216 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11217 PL_tmps_ix = proto_perl->Ttmps_ix;
11218 PL_tmps_max = proto_perl->Ttmps_max;
11219 PL_tmps_floor = proto_perl->Ttmps_floor;
11220 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
11222 while (i <= PL_tmps_ix) {
11223 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
11227 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11228 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
11229 Newz(54, PL_markstack, i, I32);
11230 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
11231 - proto_perl->Tmarkstack);
11232 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
11233 - proto_perl->Tmarkstack);
11234 Copy(proto_perl->Tmarkstack, PL_markstack,
11235 PL_markstack_ptr - PL_markstack + 1, I32);
11237 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11238 * NOTE: unlike the others! */
11239 PL_scopestack_ix = proto_perl->Tscopestack_ix;
11240 PL_scopestack_max = proto_perl->Tscopestack_max;
11241 Newz(54, PL_scopestack, PL_scopestack_max, I32);
11242 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
11244 /* next push_return() sets PL_retstack[PL_retstack_ix]
11245 * NOTE: unlike the others! */
11246 PL_retstack_ix = proto_perl->Tretstack_ix;
11247 PL_retstack_max = proto_perl->Tretstack_max;
11248 Newz(54, PL_retstack, PL_retstack_max, OP*);
11249 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, OP*);
11251 /* NOTE: si_dup() looks at PL_markstack */
11252 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
11254 /* PL_curstack = PL_curstackinfo->si_stack; */
11255 PL_curstack = av_dup(proto_perl->Tcurstack, param);
11256 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
11258 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11259 PL_stack_base = AvARRAY(PL_curstack);
11260 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
11261 - proto_perl->Tstack_base);
11262 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
11264 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11265 * NOTE: unlike the others! */
11266 PL_savestack_ix = proto_perl->Tsavestack_ix;
11267 PL_savestack_max = proto_perl->Tsavestack_max;
11268 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
11269 PL_savestack = ss_dup(proto_perl, param);
11273 ENTER; /* perl_destruct() wants to LEAVE; */
11276 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
11277 PL_top_env = &PL_start_env;
11279 PL_op = proto_perl->Top;
11282 PL_Xpv = (XPV*)NULL;
11283 PL_na = proto_perl->Tna;
11285 PL_statbuf = proto_perl->Tstatbuf;
11286 PL_statcache = proto_perl->Tstatcache;
11287 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
11288 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
11290 PL_timesbuf = proto_perl->Ttimesbuf;
11293 PL_tainted = proto_perl->Ttainted;
11294 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
11295 PL_rs = sv_dup_inc(proto_perl->Trs, param);
11296 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
11297 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
11298 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
11299 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
11300 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
11301 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
11302 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
11304 PL_restartop = proto_perl->Trestartop;
11305 PL_in_eval = proto_perl->Tin_eval;
11306 PL_delaymagic = proto_perl->Tdelaymagic;
11307 PL_dirty = proto_perl->Tdirty;
11308 PL_localizing = proto_perl->Tlocalizing;
11310 #ifdef PERL_FLEXIBLE_EXCEPTIONS
11311 PL_protect = proto_perl->Tprotect;
11313 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
11314 PL_hv_fetch_ent_mh = Nullhe;
11315 PL_modcount = proto_perl->Tmodcount;
11316 PL_lastgotoprobe = Nullop;
11317 PL_dumpindent = proto_perl->Tdumpindent;
11319 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
11320 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
11321 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
11322 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
11323 PL_sortcxix = proto_perl->Tsortcxix;
11324 PL_efloatbuf = Nullch; /* reinits on demand */
11325 PL_efloatsize = 0; /* reinits on demand */
11329 PL_screamfirst = NULL;
11330 PL_screamnext = NULL;
11331 PL_maxscream = -1; /* reinits on demand */
11332 PL_lastscream = Nullsv;
11334 PL_watchaddr = NULL;
11335 PL_watchok = Nullch;
11337 PL_regdummy = proto_perl->Tregdummy;
11338 PL_regcomp_parse = Nullch;
11339 PL_regxend = Nullch;
11340 PL_regcode = (regnode*)NULL;
11343 PL_regprecomp = Nullch;
11348 PL_seen_zerolen = 0;
11350 PL_regcomp_rx = (regexp*)NULL;
11352 PL_colorset = 0; /* reinits PL_colors[] */
11353 /*PL_colors[6] = {0,0,0,0,0,0};*/
11354 PL_reg_whilem_seen = 0;
11355 PL_reginput = Nullch;
11356 PL_regbol = Nullch;
11357 PL_regeol = Nullch;
11358 PL_regstartp = (I32*)NULL;
11359 PL_regendp = (I32*)NULL;
11360 PL_reglastparen = (U32*)NULL;
11361 PL_reglastcloseparen = (U32*)NULL;
11362 PL_regtill = Nullch;
11363 PL_reg_start_tmp = (char**)NULL;
11364 PL_reg_start_tmpl = 0;
11365 PL_regdata = (struct reg_data*)NULL;
11368 PL_reg_eval_set = 0;
11370 PL_regprogram = (regnode*)NULL;
11372 PL_regcc = (CURCUR*)NULL;
11373 PL_reg_call_cc = (struct re_cc_state*)NULL;
11374 PL_reg_re = (regexp*)NULL;
11375 PL_reg_ganch = Nullch;
11376 PL_reg_sv = Nullsv;
11377 PL_reg_match_utf8 = FALSE;
11378 PL_reg_magic = (MAGIC*)NULL;
11380 PL_reg_oldcurpm = (PMOP*)NULL;
11381 PL_reg_curpm = (PMOP*)NULL;
11382 PL_reg_oldsaved = Nullch;
11383 PL_reg_oldsavedlen = 0;
11384 PL_reg_maxiter = 0;
11385 PL_reg_leftiter = 0;
11386 PL_reg_poscache = Nullch;
11387 PL_reg_poscache_size= 0;
11389 /* RE engine - function pointers */
11390 PL_regcompp = proto_perl->Tregcompp;
11391 PL_regexecp = proto_perl->Tregexecp;
11392 PL_regint_start = proto_perl->Tregint_start;
11393 PL_regint_string = proto_perl->Tregint_string;
11394 PL_regfree = proto_perl->Tregfree;
11396 PL_reginterp_cnt = 0;
11397 PL_reg_starttry = 0;
11399 /* Pluggable optimizer */
11400 PL_peepp = proto_perl->Tpeepp;
11402 PL_stashcache = newHV();
11404 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11405 ptr_table_free(PL_ptr_table);
11406 PL_ptr_table = NULL;
11409 /* Call the ->CLONE method, if it exists, for each of the stashes
11410 identified by sv_dup() above.
11412 while(av_len(param->stashes) != -1) {
11413 HV* stash = (HV*) av_shift(param->stashes);
11414 GV* cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11415 if (cloner && GvCV(cloner)) {
11420 XPUSHs(sv_2mortal(newSVpv(HvNAME(stash), 0)));
11422 call_sv((SV*)GvCV(cloner), G_DISCARD);
11428 SvREFCNT_dec(param->stashes);
11433 #endif /* USE_ITHREADS */
11436 =head1 Unicode Support
11438 =for apidoc sv_recode_to_utf8
11440 The encoding is assumed to be an Encode object, on entry the PV
11441 of the sv is assumed to be octets in that encoding, and the sv
11442 will be converted into Unicode (and UTF-8).
11444 If the sv already is UTF-8 (or if it is not POK), or if the encoding
11445 is not a reference, nothing is done to the sv. If the encoding is not
11446 an C<Encode::XS> Encoding object, bad things will happen.
11447 (See F<lib/encoding.pm> and L<Encode>).
11449 The PV of the sv is returned.
11454 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11456 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11470 Passing sv_yes is wrong - it needs to be or'ed set of constants
11471 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11472 remove converted chars from source.
11474 Both will default the value - let them.
11476 XPUSHs(&PL_sv_yes);
11479 call_method("decode", G_SCALAR);
11483 s = SvPV(uni, len);
11484 if (s != SvPVX(sv)) {
11485 SvGROW(sv, len + 1);
11486 Move(s, SvPVX(sv), len, char);
11487 SvCUR_set(sv, len);
11488 SvPVX(sv)[len] = 0;
11498 =for apidoc sv_cat_decode
11500 The encoding is assumed to be an Encode object, the PV of the ssv is
11501 assumed to be octets in that encoding and decoding the input starts
11502 from the position which (PV + *offset) pointed to. The dsv will be
11503 concatenated the decoded UTF-8 string from ssv. Decoding will terminate
11504 when the string tstr appears in decoding output or the input ends on
11505 the PV of the ssv. The value which the offset points will be modified
11506 to the last input position on the ssv.
11508 Returns TRUE if the terminator was found, else returns FALSE.
11513 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11514 SV *ssv, int *offset, char *tstr, int tlen)
11517 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11528 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11529 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11531 call_method("cat_decode", G_SCALAR);
11533 ret = SvTRUE(TOPs);
11534 *offset = SvIV(offsv);
11540 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");