3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
28 /* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
32 #ifdef PERL_UTF8_CACHE_ASSERT
33 /* The cache element 0 is the Unicode offset;
34 * the cache element 1 is the byte offset of the element 0;
35 * the cache element 2 is the Unicode length of the substring;
36 * the cache element 3 is the byte length of the substring;
37 * The checking of the substring side would be good
38 * but substr() has enough code paths to make my head spin;
39 * if adding more checks watch out for the following tests:
40 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
41 * lib/utf8.t lib/Unicode/Collate/t/index.t
44 #define ASSERT_UTF8_CACHE(cache) \
45 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
47 #define ASSERT_UTF8_CACHE(cache) NOOP
50 /* ============================================================================
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 by default are
60 approximately 4K chunks of memory parcelled up into N heads or bodies. The
61 first slot in each arena is reserved, and is used to hold a link to the next
62 arena. In the case of heads, the unused first slot also contains some flags
63 and 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 list.
67 The following global variables are associated with arenas:
69 PL_sv_arenaroot pointer to list of SV arenas
70 PL_sv_root pointer to list of free SV structures
72 PL_foo_arenaroot pointer to list of foo arenas,
73 PL_foo_root pointer to list of free foo bodies
74 ... for foo in xiv, xnv, xrv, xpv etc.
76 Note that some of the larger and more rarely used body types (eg xpvio)
77 are not allocated using arenas, but are instead just malloc()/free()ed as
78 required. Also, if PURIFY is defined, arenas are abandoned altogether,
79 with all items individually malloc()ed. In addition, a few SV heads are
80 not allocated from an arena, but are instead directly created as static
81 or auto variables, eg PL_sv_undef. The size of arenas can be changed from
82 the default by setting PERL_ARENA_SIZE appropriately at compile time.
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..."
162 #define plant_SV(p) \
164 SvANY(p) = (void *)PL_sv_root; \
165 SvFLAGS(p) = SVTYPEMASK; \
170 /* sv_mutex must be held while calling uproot_SV() */
171 #define uproot_SV(p) \
174 PL_sv_root = (SV*)SvANY(p); \
179 /* make some more SVs by adding another arena */
181 /* sv_mutex must be held while calling more_sv() */
188 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
189 PL_nice_chunk = Nullch;
190 PL_nice_chunk_size = 0;
193 char *chunk; /* must use New here to match call to */
194 New(704,chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
195 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
201 /* new_SV(): return a new, empty SV head */
203 #ifdef DEBUG_LEAKING_SCALARS
204 /* provide a real function for a debugger to play with */
214 sv = S_more_sv(aTHX);
221 # define new_SV(p) (p)=S_new_SV(aTHX)
230 (p) = S_more_sv(aTHX); \
239 /* del_SV(): return an empty SV head to the free list */
254 S_del_sv(pTHX_ SV *p)
259 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
261 SV *svend = &sva[SvREFCNT(sva)];
262 if (p >= sv && p < svend) {
268 if (ckWARN_d(WARN_INTERNAL))
269 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
270 "Attempt to free non-arena SV: 0x%"UVxf
271 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
278 #else /* ! DEBUGGING */
280 #define del_SV(p) plant_SV(p)
282 #endif /* DEBUGGING */
286 =head1 SV Manipulation Functions
288 =for apidoc sv_add_arena
290 Given a chunk of memory, link it to the head of the list of arenas,
291 and split it into a list of free SVs.
297 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
303 /* The first SV in an arena isn't an SV. */
304 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
305 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
306 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
308 PL_sv_arenaroot = sva;
309 PL_sv_root = sva + 1;
311 svend = &sva[SvREFCNT(sva) - 1];
314 SvANY(sv) = (void *)(SV*)(sv + 1);
318 /* Must always set typemask because it's awlays checked in on cleanup
319 when the arenas are walked looking for objects. */
320 SvFLAGS(sv) = SVTYPEMASK;
327 SvFLAGS(sv) = SVTYPEMASK;
330 /* visit(): call the named function for each non-free SV in the arenas
331 * whose flags field matches the flags/mask args. */
334 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
339 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
340 register SV * const svend = &sva[SvREFCNT(sva)];
342 for (sv = sva + 1; sv < svend; ++sv) {
343 if (SvTYPE(sv) != SVTYPEMASK
344 && (sv->sv_flags & mask) == flags
357 /* called by sv_report_used() for each live SV */
360 do_report_used(pTHX_ SV *sv)
362 if (SvTYPE(sv) != SVTYPEMASK) {
363 PerlIO_printf(Perl_debug_log, "****\n");
370 =for apidoc sv_report_used
372 Dump the contents of all SVs not yet freed. (Debugging aid).
378 Perl_sv_report_used(pTHX)
381 visit(do_report_used, 0, 0);
385 /* called by sv_clean_objs() for each live SV */
388 do_clean_objs(pTHX_ SV *sv)
392 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
393 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
405 /* XXX Might want to check arrays, etc. */
408 /* called by sv_clean_objs() for each live SV */
410 #ifndef DISABLE_DESTRUCTOR_KLUDGE
412 do_clean_named_objs(pTHX_ SV *sv)
414 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
415 if ( SvOBJECT(GvSV(sv)) ||
416 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
417 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
418 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
419 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
421 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
422 SvFLAGS(sv) |= SVf_BREAK;
430 =for apidoc sv_clean_objs
432 Attempt to destroy all objects not yet freed
438 Perl_sv_clean_objs(pTHX)
440 PL_in_clean_objs = TRUE;
441 visit(do_clean_objs, SVf_ROK, SVf_ROK);
442 #ifndef DISABLE_DESTRUCTOR_KLUDGE
443 /* some barnacles may yet remain, clinging to typeglobs */
444 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
446 PL_in_clean_objs = FALSE;
449 /* called by sv_clean_all() for each live SV */
452 do_clean_all(pTHX_ SV *sv)
454 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
455 SvFLAGS(sv) |= SVf_BREAK;
460 =for apidoc sv_clean_all
462 Decrement the refcnt of each remaining SV, possibly triggering a
463 cleanup. This function may have to be called multiple times to free
464 SVs which are in complex self-referential hierarchies.
470 Perl_sv_clean_all(pTHX)
473 PL_in_clean_all = TRUE;
474 cleaned = visit(do_clean_all, 0,0);
475 PL_in_clean_all = FALSE;
480 =for apidoc sv_free_arenas
482 Deallocate the memory used by all arenas. Note that all the individual SV
483 heads and bodies within the arenas must already have been freed.
489 Perl_sv_free_arenas(pTHX)
493 XPV *arena, *arenanext;
495 /* Free arenas here, but be careful about fake ones. (We assume
496 contiguity of the fake ones with the corresponding real ones.) */
498 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
499 svanext = (SV*) SvANY(sva);
500 while (svanext && SvFAKE(svanext))
501 svanext = (SV*) SvANY(svanext);
507 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
508 arenanext = (XPV*)arena->xpv_pv;
511 PL_xiv_arenaroot = 0;
514 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
515 arenanext = (XPV*)arena->xpv_pv;
518 PL_xnv_arenaroot = 0;
521 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
522 arenanext = (XPV*)arena->xpv_pv;
525 PL_xrv_arenaroot = 0;
528 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
529 arenanext = (XPV*)arena->xpv_pv;
532 PL_xpv_arenaroot = 0;
535 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
536 arenanext = (XPV*)arena->xpv_pv;
539 PL_xpviv_arenaroot = 0;
542 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
543 arenanext = (XPV*)arena->xpv_pv;
546 PL_xpvnv_arenaroot = 0;
549 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
550 arenanext = (XPV*)arena->xpv_pv;
553 PL_xpvcv_arenaroot = 0;
556 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
557 arenanext = (XPV*)arena->xpv_pv;
560 PL_xpvav_arenaroot = 0;
563 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
564 arenanext = (XPV*)arena->xpv_pv;
567 PL_xpvhv_arenaroot = 0;
570 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
571 arenanext = (XPV*)arena->xpv_pv;
574 PL_xpvmg_arenaroot = 0;
577 for (arena = (XPV*)PL_xpvgv_arenaroot; arena; arena = arenanext) {
578 arenanext = (XPV*)arena->xpv_pv;
581 PL_xpvgv_arenaroot = 0;
584 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
585 arenanext = (XPV*)arena->xpv_pv;
588 PL_xpvlv_arenaroot = 0;
591 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
592 arenanext = (XPV*)arena->xpv_pv;
595 PL_xpvbm_arenaroot = 0;
598 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
599 arenanext = (XPV*)arena->xpv_pv;
605 #if defined(USE_ITHREADS)
606 for (arena = (XPV*)PL_pte_arenaroot; arena; arena = arenanext) {
607 arenanext = (XPV*)arena->xpv_pv;
610 PL_pte_arenaroot = 0;
615 Safefree(PL_nice_chunk);
616 PL_nice_chunk = Nullch;
617 PL_nice_chunk_size = 0;
623 =for apidoc report_uninit
625 Print appropriate "Use of uninitialized variable" warning
631 Perl_report_uninit(pTHX)
634 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
635 " in ", OP_DESC(PL_op));
637 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit, "", "");
641 /* allocate another arena's worth of struct xrv */
649 New(712, ptr, PERL_ARENA_SIZE/sizeof(XPV), XPV);
650 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
651 PL_xrv_arenaroot = ptr;
654 xrvend = &xrv[PERL_ARENA_SIZE / sizeof(XRV) - 1];
655 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
657 while (xrv < xrvend) {
658 xrv->xrv_rv = (SV*)(xrv + 1);
664 /* allocate another arena's worth of IV bodies */
672 New(705, ptr, PERL_ARENA_SIZE/sizeof(XPV), XPV);
673 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
674 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
677 xivend = &xiv[PERL_ARENA_SIZE / sizeof(IV) - 1];
678 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
680 while (xiv < xivend) {
681 *(IV**)xiv = (IV *)(xiv + 1);
687 /* allocate another arena's worth of NV bodies */
695 New(711, ptr, PERL_ARENA_SIZE/sizeof(XPV), XPV);
696 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
697 PL_xnv_arenaroot = ptr;
700 xnvend = &xnv[PERL_ARENA_SIZE / sizeof(NV) - 1];
701 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
703 while (xnv < xnvend) {
704 *(NV**)xnv = (NV*)(xnv + 1);
710 /* allocate another arena's worth of struct xpv */
717 New(713, xpv, PERL_ARENA_SIZE/sizeof(XPV), XPV);
718 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
719 PL_xpv_arenaroot = xpv;
721 xpvend = &xpv[PERL_ARENA_SIZE / sizeof(XPV) - 1];
723 while (xpv < xpvend) {
724 xpv->xpv_pv = (char*)(xpv + 1);
730 /* allocate another arena's worth of struct xpviv */
737 New(714, xpviv, PERL_ARENA_SIZE/sizeof(XPVIV), XPVIV);
738 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
739 PL_xpviv_arenaroot = xpviv;
741 xpvivend = &xpviv[PERL_ARENA_SIZE / sizeof(XPVIV) - 1];
742 PL_xpviv_root = ++xpviv;
743 while (xpviv < xpvivend) {
744 xpviv->xpv_pv = (char*)(xpviv + 1);
750 /* allocate another arena's worth of struct xpvnv */
757 New(715, xpvnv, PERL_ARENA_SIZE/sizeof(XPVNV), XPVNV);
758 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
759 PL_xpvnv_arenaroot = xpvnv;
761 xpvnvend = &xpvnv[PERL_ARENA_SIZE / sizeof(XPVNV) - 1];
762 PL_xpvnv_root = ++xpvnv;
763 while (xpvnv < xpvnvend) {
764 xpvnv->xpv_pv = (char*)(xpvnv + 1);
770 /* allocate another arena's worth of struct xpvcv */
777 New(716, xpvcv, PERL_ARENA_SIZE/sizeof(XPVCV), XPVCV);
778 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
779 PL_xpvcv_arenaroot = xpvcv;
781 xpvcvend = &xpvcv[PERL_ARENA_SIZE / sizeof(XPVCV) - 1];
782 PL_xpvcv_root = ++xpvcv;
783 while (xpvcv < xpvcvend) {
784 xpvcv->xpv_pv = (char*)(xpvcv + 1);
790 /* allocate another arena's worth of struct xpvav */
797 New(717, xpvav, PERL_ARENA_SIZE/sizeof(XPVAV), XPVAV);
798 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
799 PL_xpvav_arenaroot = xpvav;
801 xpvavend = &xpvav[PERL_ARENA_SIZE / sizeof(XPVAV) - 1];
802 PL_xpvav_root = ++xpvav;
803 while (xpvav < xpvavend) {
804 xpvav->xav_array = (char*)(xpvav + 1);
807 xpvav->xav_array = 0;
810 /* allocate another arena's worth of struct xpvhv */
817 New(718, xpvhv, PERL_ARENA_SIZE/sizeof(XPVHV), XPVHV);
818 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
819 PL_xpvhv_arenaroot = xpvhv;
821 xpvhvend = &xpvhv[PERL_ARENA_SIZE / sizeof(XPVHV) - 1];
822 PL_xpvhv_root = ++xpvhv;
823 while (xpvhv < xpvhvend) {
824 xpvhv->xhv_array = (char*)(xpvhv + 1);
827 xpvhv->xhv_array = 0;
830 /* allocate another arena's worth of struct xpvmg */
837 New(719, xpvmg, PERL_ARENA_SIZE/sizeof(XPVMG), XPVMG);
838 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
839 PL_xpvmg_arenaroot = xpvmg;
841 xpvmgend = &xpvmg[PERL_ARENA_SIZE / sizeof(XPVMG) - 1];
842 PL_xpvmg_root = ++xpvmg;
843 while (xpvmg < xpvmgend) {
844 xpvmg->xpv_pv = (char*)(xpvmg + 1);
850 /* allocate another arena's worth of struct xpvgv */
857 New(720, xpvgv, PERL_ARENA_SIZE/sizeof(XPVGV), XPVGV);
858 xpvgv->xpv_pv = (char*)PL_xpvgv_arenaroot;
859 PL_xpvgv_arenaroot = xpvgv;
861 xpvgvend = &xpvgv[PERL_ARENA_SIZE / sizeof(XPVGV) - 1];
862 PL_xpvgv_root = ++xpvgv;
863 while (xpvgv < xpvgvend) {
864 xpvgv->xpv_pv = (char*)(xpvgv + 1);
870 /* allocate another arena's worth of struct xpvlv */
877 New(720, xpvlv, PERL_ARENA_SIZE/sizeof(XPVLV), XPVLV);
878 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
879 PL_xpvlv_arenaroot = xpvlv;
881 xpvlvend = &xpvlv[PERL_ARENA_SIZE / sizeof(XPVLV) - 1];
882 PL_xpvlv_root = ++xpvlv;
883 while (xpvlv < xpvlvend) {
884 xpvlv->xpv_pv = (char*)(xpvlv + 1);
890 /* allocate another arena's worth of struct xpvbm */
897 New(721, xpvbm, PERL_ARENA_SIZE/sizeof(XPVBM), XPVBM);
898 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
899 PL_xpvbm_arenaroot = xpvbm;
901 xpvbmend = &xpvbm[PERL_ARENA_SIZE / sizeof(XPVBM) - 1];
902 PL_xpvbm_root = ++xpvbm;
903 while (xpvbm < xpvbmend) {
904 xpvbm->xpv_pv = (char*)(xpvbm + 1);
910 /* grab a new struct xrv from the free list, allocating more if necessary */
920 PL_xrv_root = (XRV*)xrv->xrv_rv;
925 /* return a struct xrv to the free list */
928 S_del_xrv(pTHX_ XRV *p)
931 p->xrv_rv = (SV*)PL_xrv_root;
936 /* grab a new IV body from the free list, allocating more if necessary */
947 * See comment in more_xiv() -- RAM.
949 PL_xiv_root = *(IV**)xiv;
951 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
954 /* return an IV body to the free list */
957 S_del_xiv(pTHX_ XPVIV *p)
959 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
961 *(IV**)xiv = PL_xiv_root;
966 /* grab a new NV body from the free list, allocating more if necessary */
976 PL_xnv_root = *(NV**)xnv;
978 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
981 /* return an NV body to the free list */
984 S_del_xnv(pTHX_ XPVNV *p)
986 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
988 *(NV**)xnv = PL_xnv_root;
993 /* grab a new struct xpv from the free list, allocating more if necessary */
1003 PL_xpv_root = (XPV*)xpv->xpv_pv;
1008 /* return a struct xpv to the free list */
1011 S_del_xpv(pTHX_ XPV *p)
1014 p->xpv_pv = (char*)PL_xpv_root;
1019 /* grab a new struct xpviv from the free list, allocating more if necessary */
1028 xpviv = PL_xpviv_root;
1029 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
1034 /* return a struct xpviv to the free list */
1037 S_del_xpviv(pTHX_ XPVIV *p)
1040 p->xpv_pv = (char*)PL_xpviv_root;
1045 /* grab a new struct xpvnv from the free list, allocating more if necessary */
1054 xpvnv = PL_xpvnv_root;
1055 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
1060 /* return a struct xpvnv to the free list */
1063 S_del_xpvnv(pTHX_ XPVNV *p)
1066 p->xpv_pv = (char*)PL_xpvnv_root;
1071 /* grab a new struct xpvcv from the free list, allocating more if necessary */
1080 xpvcv = PL_xpvcv_root;
1081 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
1086 /* return a struct xpvcv to the free list */
1089 S_del_xpvcv(pTHX_ XPVCV *p)
1092 p->xpv_pv = (char*)PL_xpvcv_root;
1097 /* grab a new struct xpvav from the free list, allocating more if necessary */
1106 xpvav = PL_xpvav_root;
1107 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
1112 /* return a struct xpvav to the free list */
1115 S_del_xpvav(pTHX_ XPVAV *p)
1118 p->xav_array = (char*)PL_xpvav_root;
1123 /* grab a new struct xpvhv from the free list, allocating more if necessary */
1132 xpvhv = PL_xpvhv_root;
1133 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
1138 /* return a struct xpvhv to the free list */
1141 S_del_xpvhv(pTHX_ XPVHV *p)
1144 p->xhv_array = (char*)PL_xpvhv_root;
1149 /* grab a new struct xpvmg from the free list, allocating more if necessary */
1158 xpvmg = PL_xpvmg_root;
1159 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
1164 /* return a struct xpvmg to the free list */
1167 S_del_xpvmg(pTHX_ XPVMG *p)
1170 p->xpv_pv = (char*)PL_xpvmg_root;
1175 /* grab a new struct xpvgv from the free list, allocating more if necessary */
1184 xpvgv = PL_xpvgv_root;
1185 PL_xpvgv_root = (XPVGV*)xpvgv->xpv_pv;
1190 /* return a struct xpvgv to the free list */
1193 S_del_xpvgv(pTHX_ XPVGV *p)
1196 p->xpv_pv = (char*)PL_xpvgv_root;
1201 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1210 xpvlv = PL_xpvlv_root;
1211 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
1216 /* return a struct xpvlv to the free list */
1219 S_del_xpvlv(pTHX_ XPVLV *p)
1222 p->xpv_pv = (char*)PL_xpvlv_root;
1227 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1236 xpvbm = PL_xpvbm_root;
1237 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
1242 /* return a struct xpvbm to the free list */
1245 S_del_xpvbm(pTHX_ XPVBM *p)
1248 p->xpv_pv = (char*)PL_xpvbm_root;
1253 #define my_safemalloc(s) (void*)safemalloc(s)
1254 #define my_safefree(p) safefree((char*)p)
1258 #define new_XIV() my_safemalloc(sizeof(XPVIV))
1259 #define del_XIV(p) my_safefree(p)
1261 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1262 #define del_XNV(p) my_safefree(p)
1264 #define new_XRV() my_safemalloc(sizeof(XRV))
1265 #define del_XRV(p) my_safefree(p)
1267 #define new_XPV() my_safemalloc(sizeof(XPV))
1268 #define del_XPV(p) my_safefree(p)
1270 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1271 #define del_XPVIV(p) my_safefree(p)
1273 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1274 #define del_XPVNV(p) my_safefree(p)
1276 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1277 #define del_XPVCV(p) my_safefree(p)
1279 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1280 #define del_XPVAV(p) my_safefree(p)
1282 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1283 #define del_XPVHV(p) my_safefree(p)
1285 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1286 #define del_XPVMG(p) my_safefree(p)
1288 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1289 #define del_XPVGV(p) my_safefree(p)
1291 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1292 #define del_XPVLV(p) my_safefree(p)
1294 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1295 #define del_XPVBM(p) my_safefree(p)
1299 #define new_XIV() (void*)new_xiv()
1300 #define del_XIV(p) del_xiv((XPVIV*) p)
1302 #define new_XNV() (void*)new_xnv()
1303 #define del_XNV(p) del_xnv((XPVNV*) p)
1305 #define new_XRV() (void*)new_xrv()
1306 #define del_XRV(p) del_xrv((XRV*) p)
1308 #define new_XPV() (void*)new_xpv()
1309 #define del_XPV(p) del_xpv((XPV *)p)
1311 #define new_XPVIV() (void*)new_xpviv()
1312 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
1314 #define new_XPVNV() (void*)new_xpvnv()
1315 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
1317 #define new_XPVCV() (void*)new_xpvcv()
1318 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
1320 #define new_XPVAV() (void*)new_xpvav()
1321 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
1323 #define new_XPVHV() (void*)new_xpvhv()
1324 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
1326 #define new_XPVMG() (void*)new_xpvmg()
1327 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
1329 #define new_XPVGV() (void*)new_xpvgv()
1330 #define del_XPVGV(p) del_xpvgv((XPVGV *)p)
1332 #define new_XPVLV() (void*)new_xpvlv()
1333 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
1335 #define new_XPVBM() (void*)new_xpvbm()
1336 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
1340 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1341 #define del_XPVFM(p) my_safefree(p)
1343 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1344 #define del_XPVIO(p) my_safefree(p)
1347 =for apidoc sv_upgrade
1349 Upgrade an SV to a more complex form. Generally adds a new body type to the
1350 SV, then copies across as much information as possible from the old body.
1351 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1357 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1368 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
1369 sv_force_normal(sv);
1372 if (SvTYPE(sv) == mt)
1376 (void)SvOOK_off(sv);
1386 switch (SvTYPE(sv)) {
1394 else if (mt < SVt_PVIV)
1404 pv = (char*)SvRV(sv);
1408 pv = SvPVX_mutable(sv);
1414 else if (mt == SVt_NV)
1418 pv = SvPVX_mutable(sv);
1422 del_XPVIV(SvANY(sv));
1425 pv = SvPVX_mutable(sv);
1430 del_XPVNV(SvANY(sv));
1433 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1434 there's no way that it can be safely upgraded, because perl.c
1435 expects to Safefree(SvANY(PL_mess_sv)) */
1436 assert(sv != PL_mess_sv);
1437 /* This flag bit is used to mean other things in other scalar types.
1438 Given that it only has meaning inside the pad, it shouldn't be set
1439 on anything that can get upgraded. */
1440 assert((SvFLAGS(sv) & SVpad_TYPED) == 0);
1441 pv = SvPVX_mutable(sv);
1446 magic = SvMAGIC(sv);
1447 stash = SvSTASH(sv);
1448 del_XPVMG(SvANY(sv));
1451 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1454 SvFLAGS(sv) &= ~SVTYPEMASK;
1459 Perl_croak(aTHX_ "Can't upgrade to undef");
1461 SvANY(sv) = new_XIV();
1465 SvANY(sv) = new_XNV();
1469 SvANY(sv) = new_XRV();
1470 SvRV_set(sv, (SV*)pv);
1473 SvANY(sv) = new_XPV();
1479 SvANY(sv) = new_XPVIV();
1489 SvANY(sv) = new_XPVNV();
1497 SvANY(sv) = new_XPVMG();
1503 SvMAGIC_set(sv, magic);
1504 SvSTASH_set(sv, stash);
1507 SvANY(sv) = new_XPVLV();
1513 SvMAGIC_set(sv, magic);
1514 SvSTASH_set(sv, stash);
1521 SvANY(sv) = new_XPVAV();
1524 SvPV_set(sv, (char*)0);
1529 SvMAGIC_set(sv, magic);
1530 SvSTASH_set(sv, stash);
1533 AvFLAGS(sv) = AVf_REAL;
1536 SvANY(sv) = new_XPVHV();
1539 SvPV_set(sv, (char*)0);
1542 HvTOTALKEYS(sv) = 0;
1543 HvPLACEHOLDERS_set(sv, 0);
1544 SvMAGIC_set(sv, magic);
1545 SvSTASH_set(sv, stash);
1552 SvANY(sv) = new_XPVCV();
1553 Zero(SvANY(sv), 1, XPVCV);
1559 SvMAGIC_set(sv, magic);
1560 SvSTASH_set(sv, stash);
1563 SvANY(sv) = new_XPVGV();
1569 SvMAGIC_set(sv, magic);
1570 SvSTASH_set(sv, stash);
1578 SvANY(sv) = new_XPVBM();
1584 SvMAGIC_set(sv, magic);
1585 SvSTASH_set(sv, stash);
1591 SvANY(sv) = new_XPVFM();
1592 Zero(SvANY(sv), 1, XPVFM);
1598 SvMAGIC_set(sv, magic);
1599 SvSTASH_set(sv, stash);
1602 SvANY(sv) = new_XPVIO();
1603 Zero(SvANY(sv), 1, XPVIO);
1609 SvMAGIC_set(sv, magic);
1610 SvSTASH_set(sv, stash);
1611 IoPAGE_LEN(sv) = 60;
1618 =for apidoc sv_backoff
1620 Remove any string offset. You should normally use the C<SvOOK_off> macro
1627 Perl_sv_backoff(pTHX_ register SV *sv)
1631 const char *s = SvPVX_const(sv);
1632 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1633 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1635 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1637 SvFLAGS(sv) &= ~SVf_OOK;
1644 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1645 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1646 Use the C<SvGROW> wrapper instead.
1652 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1658 #ifdef HAS_64K_LIMIT
1659 if (newlen >= 0x10000) {
1660 PerlIO_printf(Perl_debug_log,
1661 "Allocation too large: %"UVxf"\n", (UV)newlen);
1664 #endif /* HAS_64K_LIMIT */
1667 if (SvTYPE(sv) < SVt_PV) {
1668 sv_upgrade(sv, SVt_PV);
1669 s = SvPVX_mutable(sv);
1671 else if (SvOOK(sv)) { /* pv is offset? */
1673 s = SvPVX_mutable(sv);
1674 if (newlen > SvLEN(sv))
1675 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1676 #ifdef HAS_64K_LIMIT
1677 if (newlen >= 0x10000)
1682 s = SvPVX_mutable(sv);
1684 if (newlen > SvLEN(sv)) { /* need more room? */
1685 newlen = PERL_STRLEN_ROUNDUP(newlen);
1686 if (SvLEN(sv) && s) {
1688 const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1694 s = saferealloc(s, newlen);
1697 /* sv_force_normal_flags() must not try to unshare the new
1698 PVX we allocate below. AMS 20010713 */
1699 if (SvREADONLY(sv) && SvFAKE(sv)) {
1703 s = safemalloc(newlen);
1704 if (SvPVX_const(sv) && SvCUR(sv)) {
1705 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1709 SvLEN_set(sv, newlen);
1715 =for apidoc sv_setiv
1717 Copies an integer into the given SV, upgrading first if necessary.
1718 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1724 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1726 SV_CHECK_THINKFIRST(sv);
1727 switch (SvTYPE(sv)) {
1729 sv_upgrade(sv, SVt_IV);
1732 sv_upgrade(sv, SVt_PVNV);
1736 sv_upgrade(sv, SVt_PVIV);
1745 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1748 (void)SvIOK_only(sv); /* validate number */
1754 =for apidoc sv_setiv_mg
1756 Like C<sv_setiv>, but also handles 'set' magic.
1762 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1769 =for apidoc sv_setuv
1771 Copies an unsigned integer into the given SV, upgrading first if necessary.
1772 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1778 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1780 /* With these two if statements:
1781 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1784 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1786 If you wish to remove them, please benchmark to see what the effect is
1788 if (u <= (UV)IV_MAX) {
1789 sv_setiv(sv, (IV)u);
1798 =for apidoc sv_setuv_mg
1800 Like C<sv_setuv>, but also handles 'set' magic.
1806 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1808 /* With these two if statements:
1809 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1812 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1814 If you wish to remove them, please benchmark to see what the effect is
1816 if (u <= (UV)IV_MAX) {
1817 sv_setiv(sv, (IV)u);
1827 =for apidoc sv_setnv
1829 Copies a double into the given SV, upgrading first if necessary.
1830 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1836 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1838 SV_CHECK_THINKFIRST(sv);
1839 switch (SvTYPE(sv)) {
1842 sv_upgrade(sv, SVt_NV);
1847 sv_upgrade(sv, SVt_PVNV);
1856 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1860 (void)SvNOK_only(sv); /* validate number */
1865 =for apidoc sv_setnv_mg
1867 Like C<sv_setnv>, but also handles 'set' magic.
1873 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1879 /* Print an "isn't numeric" warning, using a cleaned-up,
1880 * printable version of the offending string
1884 S_not_a_number(pTHX_ SV *sv)
1891 dsv = sv_2mortal(newSVpv("", 0));
1892 pv = sv_uni_display(dsv, sv, 10, 0);
1895 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1896 /* each *s can expand to 4 chars + "...\0",
1897 i.e. need room for 8 chars */
1899 const char *s, *end;
1900 for (s = SvPVX_const(sv), end = s + SvCUR(sv); s < end && d < limit;
1903 if (ch & 128 && !isPRINT_LC(ch)) {
1912 else if (ch == '\r') {
1916 else if (ch == '\f') {
1920 else if (ch == '\\') {
1924 else if (ch == '\0') {
1928 else if (isPRINT_LC(ch))
1945 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1946 "Argument \"%s\" isn't numeric in %s", pv,
1949 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1950 "Argument \"%s\" isn't numeric", pv);
1954 =for apidoc looks_like_number
1956 Test if the content of an SV looks like a number (or is a number).
1957 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1958 non-numeric warning), even if your atof() doesn't grok them.
1964 Perl_looks_like_number(pTHX_ SV *sv)
1966 register const char *sbegin;
1970 sbegin = SvPVX_const(sv);
1973 else if (SvPOKp(sv))
1974 sbegin = SvPV_const(sv, len);
1976 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1977 return grok_number(sbegin, len, NULL);
1980 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1981 until proven guilty, assume that things are not that bad... */
1986 As 64 bit platforms often have an NV that doesn't preserve all bits of
1987 an IV (an assumption perl has been based on to date) it becomes necessary
1988 to remove the assumption that the NV always carries enough precision to
1989 recreate the IV whenever needed, and that the NV is the canonical form.
1990 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1991 precision as a side effect of conversion (which would lead to insanity
1992 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1993 1) to distinguish between IV/UV/NV slots that have cached a valid
1994 conversion where precision was lost and IV/UV/NV slots that have a
1995 valid conversion which has lost no precision
1996 2) to ensure that if a numeric conversion to one form is requested that
1997 would lose precision, the precise conversion (or differently
1998 imprecise conversion) is also performed and cached, to prevent
1999 requests for different numeric formats on the same SV causing
2000 lossy conversion chains. (lossless conversion chains are perfectly
2005 SvIOKp is true if the IV slot contains a valid value
2006 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
2007 SvNOKp is true if the NV slot contains a valid value
2008 SvNOK is true only if the NV value is accurate
2011 while converting from PV to NV, check to see if converting that NV to an
2012 IV(or UV) would lose accuracy over a direct conversion from PV to
2013 IV(or UV). If it would, cache both conversions, return NV, but mark
2014 SV as IOK NOKp (ie not NOK).
2016 While converting from PV to IV, check to see if converting that IV to an
2017 NV would lose accuracy over a direct conversion from PV to NV. If it
2018 would, cache both conversions, flag similarly.
2020 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2021 correctly because if IV & NV were set NV *always* overruled.
2022 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2023 changes - now IV and NV together means that the two are interchangeable:
2024 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2026 The benefit of this is that operations such as pp_add know that if
2027 SvIOK is true for both left and right operands, then integer addition
2028 can be used instead of floating point (for cases where the result won't
2029 overflow). Before, floating point was always used, which could lead to
2030 loss of precision compared with integer addition.
2032 * making IV and NV equal status should make maths accurate on 64 bit
2034 * may speed up maths somewhat if pp_add and friends start to use
2035 integers when possible instead of fp. (Hopefully the overhead in
2036 looking for SvIOK and checking for overflow will not outweigh the
2037 fp to integer speedup)
2038 * will slow down integer operations (callers of SvIV) on "inaccurate"
2039 values, as the change from SvIOK to SvIOKp will cause a call into
2040 sv_2iv each time rather than a macro access direct to the IV slot
2041 * should speed up number->string conversion on integers as IV is
2042 favoured when IV and NV are equally accurate
2044 ####################################################################
2045 You had better be using SvIOK_notUV if you want an IV for arithmetic:
2046 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2047 On the other hand, SvUOK is true iff UV.
2048 ####################################################################
2050 Your mileage will vary depending your CPU's relative fp to integer
2054 #ifndef NV_PRESERVES_UV
2055 # define IS_NUMBER_UNDERFLOW_IV 1
2056 # define IS_NUMBER_UNDERFLOW_UV 2
2057 # define IS_NUMBER_IV_AND_UV 2
2058 # define IS_NUMBER_OVERFLOW_IV 4
2059 # define IS_NUMBER_OVERFLOW_UV 5
2061 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2063 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2065 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2067 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2068 if (SvNVX(sv) < (NV)IV_MIN) {
2069 (void)SvIOKp_on(sv);
2071 SvIV_set(sv, IV_MIN);
2072 return IS_NUMBER_UNDERFLOW_IV;
2074 if (SvNVX(sv) > (NV)UV_MAX) {
2075 (void)SvIOKp_on(sv);
2078 SvUV_set(sv, UV_MAX);
2079 return IS_NUMBER_OVERFLOW_UV;
2081 (void)SvIOKp_on(sv);
2083 /* Can't use strtol etc to convert this string. (See truth table in
2085 if (SvNVX(sv) <= (UV)IV_MAX) {
2086 SvIV_set(sv, I_V(SvNVX(sv)));
2087 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2088 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2090 /* Integer is imprecise. NOK, IOKp */
2092 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2095 SvUV_set(sv, U_V(SvNVX(sv)));
2096 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2097 if (SvUVX(sv) == UV_MAX) {
2098 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2099 possibly be preserved by NV. Hence, it must be overflow.
2101 return IS_NUMBER_OVERFLOW_UV;
2103 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2105 /* Integer is imprecise. NOK, IOKp */
2107 return IS_NUMBER_OVERFLOW_IV;
2109 #endif /* !NV_PRESERVES_UV*/
2114 Return the integer value of an SV, doing any necessary string conversion,
2115 magic etc. Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2121 Perl_sv_2iv(pTHX_ register SV *sv)
2125 if (SvGMAGICAL(sv)) {
2130 return I_V(SvNVX(sv));
2132 if (SvPOKp(sv) && SvLEN(sv))
2135 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2136 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2142 if (SvTHINKFIRST(sv)) {
2145 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2146 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2147 return SvIV(tmpstr);
2148 return PTR2IV(SvRV(sv));
2150 if (SvREADONLY(sv) && SvFAKE(sv)) {
2151 sv_force_normal(sv);
2153 if (SvREADONLY(sv) && !SvOK(sv)) {
2154 if (ckWARN(WARN_UNINITIALIZED))
2161 return (IV)(SvUVX(sv));
2168 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2169 * without also getting a cached IV/UV from it at the same time
2170 * (ie PV->NV conversion should detect loss of accuracy and cache
2171 * IV or UV at same time to avoid this. NWC */
2173 if (SvTYPE(sv) == SVt_NV)
2174 sv_upgrade(sv, SVt_PVNV);
2176 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2177 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2178 certainly cast into the IV range at IV_MAX, whereas the correct
2179 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2181 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2182 SvIV_set(sv, I_V(SvNVX(sv)));
2183 if (SvNVX(sv) == (NV) SvIVX(sv)
2184 #ifndef NV_PRESERVES_UV
2185 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2186 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2187 /* Don't flag it as "accurately an integer" if the number
2188 came from a (by definition imprecise) NV operation, and
2189 we're outside the range of NV integer precision */
2192 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2193 DEBUG_c(PerlIO_printf(Perl_debug_log,
2194 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2200 /* IV not precise. No need to convert from PV, as NV
2201 conversion would already have cached IV if it detected
2202 that PV->IV would be better than PV->NV->IV
2203 flags already correct - don't set public IOK. */
2204 DEBUG_c(PerlIO_printf(Perl_debug_log,
2205 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2210 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2211 but the cast (NV)IV_MIN rounds to a the value less (more
2212 negative) than IV_MIN which happens to be equal to SvNVX ??
2213 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2214 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2215 (NV)UVX == NVX are both true, but the values differ. :-(
2216 Hopefully for 2s complement IV_MIN is something like
2217 0x8000000000000000 which will be exact. NWC */
2220 SvUV_set(sv, U_V(SvNVX(sv)));
2222 (SvNVX(sv) == (NV) SvUVX(sv))
2223 #ifndef NV_PRESERVES_UV
2224 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2225 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2226 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2227 /* Don't flag it as "accurately an integer" if the number
2228 came from a (by definition imprecise) NV operation, and
2229 we're outside the range of NV integer precision */
2235 DEBUG_c(PerlIO_printf(Perl_debug_log,
2236 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2240 return (IV)SvUVX(sv);
2243 else if (SvPOKp(sv) && SvLEN(sv)) {
2245 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2246 /* We want to avoid a possible problem when we cache an IV which
2247 may be later translated to an NV, and the resulting NV is not
2248 the same as the direct translation of the initial string
2249 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2250 be careful to ensure that the value with the .456 is around if the
2251 NV value is requested in the future).
2253 This means that if we cache such an IV, we need to cache the
2254 NV as well. Moreover, we trade speed for space, and do not
2255 cache the NV if we are sure it's not needed.
2258 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2259 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2260 == IS_NUMBER_IN_UV) {
2261 /* It's definitely an integer, only upgrade to PVIV */
2262 if (SvTYPE(sv) < SVt_PVIV)
2263 sv_upgrade(sv, SVt_PVIV);
2265 } else if (SvTYPE(sv) < SVt_PVNV)
2266 sv_upgrade(sv, SVt_PVNV);
2268 /* If NV preserves UV then we only use the UV value if we know that
2269 we aren't going to call atof() below. If NVs don't preserve UVs
2270 then the value returned may have more precision than atof() will
2271 return, even though value isn't perfectly accurate. */
2272 if ((numtype & (IS_NUMBER_IN_UV
2273 #ifdef NV_PRESERVES_UV
2276 )) == IS_NUMBER_IN_UV) {
2277 /* This won't turn off the public IOK flag if it was set above */
2278 (void)SvIOKp_on(sv);
2280 if (!(numtype & IS_NUMBER_NEG)) {
2282 if (value <= (UV)IV_MAX) {
2283 SvIV_set(sv, (IV)value);
2285 SvUV_set(sv, value);
2289 /* 2s complement assumption */
2290 if (value <= (UV)IV_MIN) {
2291 SvIV_set(sv, -(IV)value);
2293 /* Too negative for an IV. This is a double upgrade, but
2294 I'm assuming it will be rare. */
2295 if (SvTYPE(sv) < SVt_PVNV)
2296 sv_upgrade(sv, SVt_PVNV);
2300 SvNV_set(sv, -(NV)value);
2301 SvIV_set(sv, IV_MIN);
2305 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2306 will be in the previous block to set the IV slot, and the next
2307 block to set the NV slot. So no else here. */
2309 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2310 != IS_NUMBER_IN_UV) {
2311 /* It wasn't an (integer that doesn't overflow the UV). */
2312 SvNV_set(sv, Atof(SvPVX_const(sv)));
2314 if (! numtype && ckWARN(WARN_NUMERIC))
2317 #if defined(USE_LONG_DOUBLE)
2318 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2319 PTR2UV(sv), SvNVX(sv)));
2321 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2322 PTR2UV(sv), SvNVX(sv)));
2326 #ifdef NV_PRESERVES_UV
2327 (void)SvIOKp_on(sv);
2329 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2330 SvIV_set(sv, I_V(SvNVX(sv)));
2331 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2334 /* Integer is imprecise. NOK, IOKp */
2336 /* UV will not work better than IV */
2338 if (SvNVX(sv) > (NV)UV_MAX) {
2340 /* Integer is inaccurate. NOK, IOKp, is UV */
2341 SvUV_set(sv, UV_MAX);
2344 SvUV_set(sv, U_V(SvNVX(sv)));
2345 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2346 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2350 /* Integer is imprecise. NOK, IOKp, is UV */
2356 #else /* NV_PRESERVES_UV */
2357 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2358 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2359 /* The IV slot will have been set from value returned by
2360 grok_number above. The NV slot has just been set using
2363 assert (SvIOKp(sv));
2365 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2366 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2367 /* Small enough to preserve all bits. */
2368 (void)SvIOKp_on(sv);
2370 SvIV_set(sv, I_V(SvNVX(sv)));
2371 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2373 /* Assumption: first non-preserved integer is < IV_MAX,
2374 this NV is in the preserved range, therefore: */
2375 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2377 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);
2381 0 0 already failed to read UV.
2382 0 1 already failed to read UV.
2383 1 0 you won't get here in this case. IV/UV
2384 slot set, public IOK, Atof() unneeded.
2385 1 1 already read UV.
2386 so there's no point in sv_2iuv_non_preserve() attempting
2387 to use atol, strtol, strtoul etc. */
2388 if (sv_2iuv_non_preserve (sv, numtype)
2389 >= IS_NUMBER_OVERFLOW_IV)
2393 #endif /* NV_PRESERVES_UV */
2396 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2398 if (SvTYPE(sv) < SVt_IV)
2399 /* Typically the caller expects that sv_any is not NULL now. */
2400 sv_upgrade(sv, SVt_IV);
2403 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2404 PTR2UV(sv),SvIVX(sv)));
2405 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2411 Return the unsigned integer value of an SV, doing any necessary string
2412 conversion, magic etc. Normally used via the C<SvUV(sv)> and C<SvUVx(sv)>
2419 Perl_sv_2uv(pTHX_ register SV *sv)
2423 if (SvGMAGICAL(sv)) {
2428 return U_V(SvNVX(sv));
2429 if (SvPOKp(sv) && SvLEN(sv))
2432 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2433 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2439 if (SvTHINKFIRST(sv)) {
2442 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2443 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2444 return SvUV(tmpstr);
2445 return PTR2UV(SvRV(sv));
2447 if (SvREADONLY(sv) && SvFAKE(sv)) {
2448 sv_force_normal(sv);
2450 if (SvREADONLY(sv) && !SvOK(sv)) {
2451 if (ckWARN(WARN_UNINITIALIZED))
2461 return (UV)SvIVX(sv);
2465 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2466 * without also getting a cached IV/UV from it at the same time
2467 * (ie PV->NV conversion should detect loss of accuracy and cache
2468 * IV or UV at same time to avoid this. */
2469 /* IV-over-UV optimisation - choose to cache IV if possible */
2471 if (SvTYPE(sv) == SVt_NV)
2472 sv_upgrade(sv, SVt_PVNV);
2474 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2475 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2476 SvIV_set(sv, I_V(SvNVX(sv)));
2477 if (SvNVX(sv) == (NV) SvIVX(sv)
2478 #ifndef NV_PRESERVES_UV
2479 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2480 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2481 /* Don't flag it as "accurately an integer" if the number
2482 came from a (by definition imprecise) NV operation, and
2483 we're outside the range of NV integer precision */
2486 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2487 DEBUG_c(PerlIO_printf(Perl_debug_log,
2488 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2494 /* IV not precise. No need to convert from PV, as NV
2495 conversion would already have cached IV if it detected
2496 that PV->IV would be better than PV->NV->IV
2497 flags already correct - don't set public IOK. */
2498 DEBUG_c(PerlIO_printf(Perl_debug_log,
2499 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2504 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2505 but the cast (NV)IV_MIN rounds to a the value less (more
2506 negative) than IV_MIN which happens to be equal to SvNVX ??
2507 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2508 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2509 (NV)UVX == NVX are both true, but the values differ. :-(
2510 Hopefully for 2s complement IV_MIN is something like
2511 0x8000000000000000 which will be exact. NWC */
2514 SvUV_set(sv, U_V(SvNVX(sv)));
2516 (SvNVX(sv) == (NV) SvUVX(sv))
2517 #ifndef NV_PRESERVES_UV
2518 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2519 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2520 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2521 /* Don't flag it as "accurately an integer" if the number
2522 came from a (by definition imprecise) NV operation, and
2523 we're outside the range of NV integer precision */
2528 DEBUG_c(PerlIO_printf(Perl_debug_log,
2529 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2535 else if (SvPOKp(sv) && SvLEN(sv)) {
2537 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2539 /* We want to avoid a possible problem when we cache a UV which
2540 may be later translated to an NV, and the resulting NV is not
2541 the translation of the initial data.
2543 This means that if we cache such a UV, we need to cache the
2544 NV as well. Moreover, we trade speed for space, and do not
2545 cache the NV if not needed.
2548 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2549 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2550 == IS_NUMBER_IN_UV) {
2551 /* It's definitely an integer, only upgrade to PVIV */
2552 if (SvTYPE(sv) < SVt_PVIV)
2553 sv_upgrade(sv, SVt_PVIV);
2555 } else if (SvTYPE(sv) < SVt_PVNV)
2556 sv_upgrade(sv, SVt_PVNV);
2558 /* If NV preserves UV then we only use the UV value if we know that
2559 we aren't going to call atof() below. If NVs don't preserve UVs
2560 then the value returned may have more precision than atof() will
2561 return, even though it isn't accurate. */
2562 if ((numtype & (IS_NUMBER_IN_UV
2563 #ifdef NV_PRESERVES_UV
2566 )) == IS_NUMBER_IN_UV) {
2567 /* This won't turn off the public IOK flag if it was set above */
2568 (void)SvIOKp_on(sv);
2570 if (!(numtype & IS_NUMBER_NEG)) {
2572 if (value <= (UV)IV_MAX) {
2573 SvIV_set(sv, (IV)value);
2575 /* it didn't overflow, and it was positive. */
2576 SvUV_set(sv, value);
2580 /* 2s complement assumption */
2581 if (value <= (UV)IV_MIN) {
2582 SvIV_set(sv, -(IV)value);
2584 /* Too negative for an IV. This is a double upgrade, but
2585 I'm assuming it will be rare. */
2586 if (SvTYPE(sv) < SVt_PVNV)
2587 sv_upgrade(sv, SVt_PVNV);
2591 SvNV_set(sv, -(NV)value);
2592 SvIV_set(sv, IV_MIN);
2597 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2598 != IS_NUMBER_IN_UV) {
2599 /* It wasn't an integer, or it overflowed the UV. */
2600 SvNV_set(sv, Atof(SvPVX_const(sv)));
2602 if (! numtype && ckWARN(WARN_NUMERIC))
2605 #if defined(USE_LONG_DOUBLE)
2606 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2607 PTR2UV(sv), SvNVX(sv)));
2609 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
2610 PTR2UV(sv), SvNVX(sv)));
2613 #ifdef NV_PRESERVES_UV
2614 (void)SvIOKp_on(sv);
2616 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2617 SvIV_set(sv, I_V(SvNVX(sv)));
2618 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2621 /* Integer is imprecise. NOK, IOKp */
2623 /* UV will not work better than IV */
2625 if (SvNVX(sv) > (NV)UV_MAX) {
2627 /* Integer is inaccurate. NOK, IOKp, is UV */
2628 SvUV_set(sv, UV_MAX);
2631 SvUV_set(sv, U_V(SvNVX(sv)));
2632 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2633 NV preservse UV so can do correct comparison. */
2634 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2638 /* Integer is imprecise. NOK, IOKp, is UV */
2643 #else /* NV_PRESERVES_UV */
2644 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2645 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2646 /* The UV slot will have been set from value returned by
2647 grok_number above. The NV slot has just been set using
2650 assert (SvIOKp(sv));
2652 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2653 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2654 /* Small enough to preserve all bits. */
2655 (void)SvIOKp_on(sv);
2657 SvIV_set(sv, I_V(SvNVX(sv)));
2658 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2660 /* Assumption: first non-preserved integer is < IV_MAX,
2661 this NV is in the preserved range, therefore: */
2662 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2664 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);
2667 sv_2iuv_non_preserve (sv, numtype);
2669 #endif /* NV_PRESERVES_UV */
2673 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2674 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2677 if (SvTYPE(sv) < SVt_IV)
2678 /* Typically the caller expects that sv_any is not NULL now. */
2679 sv_upgrade(sv, SVt_IV);
2683 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2684 PTR2UV(sv),SvUVX(sv)));
2685 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2691 Return the num value of an SV, doing any necessary string or integer
2692 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2699 Perl_sv_2nv(pTHX_ register SV *sv)
2703 if (SvGMAGICAL(sv)) {
2707 if (SvPOKp(sv) && SvLEN(sv)) {
2708 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
2709 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2711 return Atof(SvPVX_const(sv));
2715 return (NV)SvUVX(sv);
2717 return (NV)SvIVX(sv);
2720 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2721 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2727 if (SvTHINKFIRST(sv)) {
2730 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2731 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2732 return SvNV(tmpstr);
2733 return PTR2NV(SvRV(sv));
2735 if (SvREADONLY(sv) && SvFAKE(sv)) {
2736 sv_force_normal(sv);
2738 if (SvREADONLY(sv) && !SvOK(sv)) {
2739 if (ckWARN(WARN_UNINITIALIZED))
2744 if (SvTYPE(sv) < SVt_NV) {
2745 if (SvTYPE(sv) == SVt_IV)
2746 sv_upgrade(sv, SVt_PVNV);
2748 sv_upgrade(sv, SVt_NV);
2749 #ifdef USE_LONG_DOUBLE
2751 STORE_NUMERIC_LOCAL_SET_STANDARD();
2752 PerlIO_printf(Perl_debug_log,
2753 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2754 PTR2UV(sv), SvNVX(sv));
2755 RESTORE_NUMERIC_LOCAL();
2759 STORE_NUMERIC_LOCAL_SET_STANDARD();
2760 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2761 PTR2UV(sv), SvNVX(sv));
2762 RESTORE_NUMERIC_LOCAL();
2766 else if (SvTYPE(sv) < SVt_PVNV)
2767 sv_upgrade(sv, SVt_PVNV);
2772 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2773 #ifdef NV_PRESERVES_UV
2776 /* Only set the public NV OK flag if this NV preserves the IV */
2777 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2778 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2779 : (SvIVX(sv) == I_V(SvNVX(sv))))
2785 else if (SvPOKp(sv) && SvLEN(sv)) {
2787 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2788 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
2790 #ifdef NV_PRESERVES_UV
2791 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2792 == IS_NUMBER_IN_UV) {
2793 /* It's definitely an integer */
2794 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2796 SvNV_set(sv, Atof(SvPVX_const(sv)));
2799 SvNV_set(sv, Atof(SvPVX_const(sv)));
2800 /* Only set the public NV OK flag if this NV preserves the value in
2801 the PV at least as well as an IV/UV would.
2802 Not sure how to do this 100% reliably. */
2803 /* if that shift count is out of range then Configure's test is
2804 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2806 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2807 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2808 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2809 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2810 /* Can't use strtol etc to convert this string, so don't try.
2811 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2814 /* value has been set. It may not be precise. */
2815 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2816 /* 2s complement assumption for (UV)IV_MIN */
2817 SvNOK_on(sv); /* Integer is too negative. */
2822 if (numtype & IS_NUMBER_NEG) {
2823 SvIV_set(sv, -(IV)value);
2824 } else if (value <= (UV)IV_MAX) {
2825 SvIV_set(sv, (IV)value);
2827 SvUV_set(sv, value);
2831 if (numtype & IS_NUMBER_NOT_INT) {
2832 /* I believe that even if the original PV had decimals,
2833 they are lost beyond the limit of the FP precision.
2834 However, neither is canonical, so both only get p
2835 flags. NWC, 2000/11/25 */
2836 /* Both already have p flags, so do nothing */
2838 const NV nv = SvNVX(sv);
2839 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2840 if (SvIVX(sv) == I_V(nv)) {
2845 /* It had no "." so it must be integer. */
2848 /* between IV_MAX and NV(UV_MAX).
2849 Could be slightly > UV_MAX */
2851 if (numtype & IS_NUMBER_NOT_INT) {
2852 /* UV and NV both imprecise. */
2854 const UV nv_as_uv = U_V(nv);
2856 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2867 #endif /* NV_PRESERVES_UV */
2870 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2872 if (SvTYPE(sv) < SVt_NV)
2873 /* Typically the caller expects that sv_any is not NULL now. */
2874 /* XXX Ilya implies that this is a bug in callers that assume this
2875 and ideally should be fixed. */
2876 sv_upgrade(sv, SVt_NV);
2879 #if defined(USE_LONG_DOUBLE)
2881 STORE_NUMERIC_LOCAL_SET_STANDARD();
2882 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2883 PTR2UV(sv), SvNVX(sv));
2884 RESTORE_NUMERIC_LOCAL();
2888 STORE_NUMERIC_LOCAL_SET_STANDARD();
2889 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2890 PTR2UV(sv), SvNVX(sv));
2891 RESTORE_NUMERIC_LOCAL();
2897 /* asIV(): extract an integer from the string value of an SV.
2898 * Caller must validate PVX */
2901 S_asIV(pTHX_ SV *sv)
2904 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2906 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2907 == IS_NUMBER_IN_UV) {
2908 /* It's definitely an integer */
2909 if (numtype & IS_NUMBER_NEG) {
2910 if (value < (UV)IV_MIN)
2913 if (value < (UV)IV_MAX)
2918 if (ckWARN(WARN_NUMERIC))
2921 return I_V(Atof(SvPVX_const(sv)));
2924 /* asUV(): extract an unsigned integer from the string value of an SV
2925 * Caller must validate PVX */
2928 S_asUV(pTHX_ SV *sv)
2931 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2933 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2934 == IS_NUMBER_IN_UV) {
2935 /* It's definitely an integer */
2936 if (!(numtype & IS_NUMBER_NEG))
2940 if (ckWARN(WARN_NUMERIC))
2943 return U_V(Atof(SvPVX_const(sv)));
2947 =for apidoc sv_2pv_nolen
2949 Like C<sv_2pv()>, but doesn't return the length too. You should usually
2950 use the macro wrapper C<SvPV_nolen(sv)> instead.
2955 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2957 return sv_2pv(sv, 0);
2960 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2961 * UV as a string towards the end of buf, and return pointers to start and
2964 * We assume that buf is at least TYPE_CHARS(UV) long.
2968 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2970 char *ptr = buf + TYPE_CHARS(UV);
2984 *--ptr = '0' + (char)(uv % 10);
2992 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
2993 * this function provided for binary compatibility only
2997 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2999 return sv_2pv_flags(sv, lp, SV_GMAGIC);
3003 =for apidoc sv_2pv_flags
3005 Returns a pointer to the string value of an SV, and sets *lp to its length.
3006 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
3008 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
3009 usually end up here too.
3015 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
3020 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
3021 char *tmpbuf = tbuf;
3028 if (SvGMAGICAL(sv)) {
3029 if (flags & SV_GMAGIC)
3034 if (flags & SV_MUTABLE_RETURN)
3035 return SvPVX_mutable(sv);
3036 if (flags & SV_CONST_RETURN)
3037 return (char *)SvPVX_const(sv);
3042 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
3044 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
3049 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
3054 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3055 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3063 if (SvTHINKFIRST(sv)) {
3066 register const char *typestr;
3067 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3068 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3069 /* FIXME - figure out best way to pass context inwards. */
3070 char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
3080 typestr = "NULLREF";
3084 switch (SvTYPE(sv)) {
3086 if ( ((SvFLAGS(sv) &
3087 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3088 == (SVs_OBJECT|SVs_SMG))
3089 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3090 const regexp *re = (regexp *)mg->mg_obj;
3093 const char *fptr = "msix";
3098 char need_newline = 0;
3099 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3101 while((ch = *fptr++)) {
3103 reflags[left++] = ch;
3106 reflags[right--] = ch;
3111 reflags[left] = '-';
3115 mg->mg_len = re->prelen + 4 + left;
3117 * If /x was used, we have to worry about a regex
3118 * ending with a comment later being embedded
3119 * within another regex. If so, we don't want this
3120 * regex's "commentization" to leak out to the
3121 * right part of the enclosing regex, we must cap
3122 * it with a newline.
3124 * So, if /x was used, we scan backwards from the
3125 * end of the regex. If we find a '#' before we
3126 * find a newline, we need to add a newline
3127 * ourself. If we find a '\n' first (or if we
3128 * don't find '#' or '\n'), we don't need to add
3129 * anything. -jfriedl
3131 if (PMf_EXTENDED & re->reganch)
3133 const char *endptr = re->precomp + re->prelen;
3134 while (endptr >= re->precomp)
3136 const char c = *(endptr--);
3138 break; /* don't need another */
3140 /* we end while in a comment, so we
3142 mg->mg_len++; /* save space for it */
3143 need_newline = 1; /* note to add it */
3149 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3150 Copy("(?", mg->mg_ptr, 2, char);
3151 Copy(reflags, mg->mg_ptr+2, left, char);
3152 Copy(":", mg->mg_ptr+left+2, 1, char);
3153 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3155 mg->mg_ptr[mg->mg_len - 2] = '\n';
3156 mg->mg_ptr[mg->mg_len - 1] = ')';
3157 mg->mg_ptr[mg->mg_len] = 0;
3159 PL_reginterp_cnt += re->program[0].next_off;
3161 if (re->reganch & ROPT_UTF8)
3177 case SVt_PVBM: typestr = SvROK(sv) ? "REF" : "SCALAR"; break;
3178 case SVt_PVLV: typestr = SvROK(sv) ? "REF"
3179 /* tied lvalues should appear to be
3180 * scalars for backwards compatitbility */
3181 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3182 ? "SCALAR" : "LVALUE"; break;
3183 case SVt_PVAV: typestr = "ARRAY"; break;
3184 case SVt_PVHV: typestr = "HASH"; break;
3185 case SVt_PVCV: typestr = "CODE"; break;
3186 case SVt_PVGV: typestr = "GLOB"; break;
3187 case SVt_PVFM: typestr = "FORMAT"; break;
3188 case SVt_PVIO: typestr = "IO"; break;
3189 default: typestr = "UNKNOWN"; break;
3193 const char *name = HvNAME_get(SvSTASH(sv));
3194 Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
3195 name ? name : "__ANON__" , typestr, PTR2UV(sv));
3198 Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, PTR2UV(sv));
3202 *lp = strlen(typestr);
3203 return (char *)typestr;
3205 if (SvREADONLY(sv) && !SvOK(sv)) {
3206 if (ckWARN(WARN_UNINITIALIZED))
3213 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3214 /* I'm assuming that if both IV and NV are equally valid then
3215 converting the IV is going to be more efficient */
3216 const U32 isIOK = SvIOK(sv);
3217 const U32 isUIOK = SvIsUV(sv);
3218 char buf[TYPE_CHARS(UV)];
3221 if (SvTYPE(sv) < SVt_PVIV)
3222 sv_upgrade(sv, SVt_PVIV);
3224 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3226 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3227 SvGROW(sv, (STRLEN)(ebuf - ptr + 1)); /* inlined from sv_setpvn */
3228 Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
3229 SvCUR_set(sv, ebuf - ptr);
3239 else if (SvNOKp(sv)) {
3240 if (SvTYPE(sv) < SVt_PVNV)
3241 sv_upgrade(sv, SVt_PVNV);
3242 /* The +20 is pure guesswork. Configure test needed. --jhi */
3243 SvGROW(sv, NV_DIG + 20);
3244 s = SvPVX_mutable(sv);
3245 olderrno = errno; /* some Xenix systems wipe out errno here */
3247 if (SvNVX(sv) == 0.0)
3248 (void)strcpy(s,"0");
3252 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3255 #ifdef FIXNEGATIVEZERO
3256 if (*s == '-' && s[1] == '0' && !s[2])
3266 if (ckWARN(WARN_UNINITIALIZED)
3267 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3271 if (SvTYPE(sv) < SVt_PV)
3272 /* Typically the caller expects that sv_any is not NULL now. */
3273 sv_upgrade(sv, SVt_PV);
3277 STRLEN len = s - SvPVX_const(sv);
3283 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3284 PTR2UV(sv),SvPVX_const(sv)));
3285 if (flags & SV_CONST_RETURN)
3286 return (char *)SvPVX_const(sv);
3287 if (flags & SV_MUTABLE_RETURN)
3288 return SvPVX_mutable(sv);
3292 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3293 /* Sneaky stuff here */
3297 tsv = newSVpv(tmpbuf, 0);
3309 t = SvPVX_const(tsv);
3314 len = strlen(tmpbuf);
3316 #ifdef FIXNEGATIVEZERO
3317 if (len == 2 && t[0] == '-' && t[1] == '0') {
3322 (void)SvUPGRADE(sv, SVt_PV);
3325 s = SvGROW(sv, len + 1);
3328 return strcpy(s, t);
3333 =for apidoc sv_copypv
3335 Copies a stringified representation of the source SV into the
3336 destination SV. Automatically performs any necessary mg_get and
3337 coercion of numeric values into strings. Guaranteed to preserve
3338 UTF-8 flag even from overloaded objects. Similar in nature to
3339 sv_2pv[_flags] but operates directly on an SV instead of just the
3340 string. Mostly uses sv_2pv_flags to do its work, except when that
3341 would lose the UTF-8'ness of the PV.
3347 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3351 s = SvPV_const(ssv,len);
3352 sv_setpvn(dsv,s,len);
3360 =for apidoc sv_2pvbyte_nolen
3362 Return a pointer to the byte-encoded representation of the SV.
3363 May cause the SV to be downgraded from UTF-8 as a side-effect.
3365 Usually accessed via the C<SvPVbyte_nolen> macro.
3371 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3373 return sv_2pvbyte(sv, 0);
3377 =for apidoc sv_2pvbyte
3379 Return a pointer to the byte-encoded representation of the SV, and set *lp
3380 to its length. May cause the SV to be downgraded from UTF-8 as a
3383 Usually accessed via the C<SvPVbyte> macro.
3389 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3391 sv_utf8_downgrade(sv,0);
3392 return SvPV(sv,*lp);
3396 =for apidoc sv_2pvutf8_nolen
3398 Return a pointer to the UTF-8-encoded representation of the SV.
3399 May cause the SV to be upgraded to UTF-8 as a side-effect.
3401 Usually accessed via the C<SvPVutf8_nolen> macro.
3407 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3409 return sv_2pvutf8(sv, 0);
3413 =for apidoc sv_2pvutf8
3415 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3416 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3418 Usually accessed via the C<SvPVutf8> macro.
3424 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3426 sv_utf8_upgrade(sv);
3427 return SvPV(sv,*lp);
3431 =for apidoc sv_2bool
3433 This function is only called on magical items, and is only used by
3434 sv_true() or its macro equivalent.
3440 Perl_sv_2bool(pTHX_ register SV *sv)
3449 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3450 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3451 return (bool)SvTRUE(tmpsv);
3452 return SvRV(sv) != 0;
3455 register XPV* Xpvtmp;
3456 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3457 (*Xpvtmp->xpv_pv > '0' ||
3458 Xpvtmp->xpv_cur > 1 ||
3459 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
3466 return SvIVX(sv) != 0;
3469 return SvNVX(sv) != 0.0;
3476 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3477 * this function provided for binary compatibility only
3482 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3484 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3488 =for apidoc sv_utf8_upgrade
3490 Converts the PV of an SV to its UTF-8-encoded form.
3491 Forces the SV to string form if it is not already.
3492 Always sets the SvUTF8 flag to avoid future validity checks even
3493 if all the bytes have hibit clear.
3495 This is not as a general purpose byte encoding to Unicode interface:
3496 use the Encode extension for that.
3498 =for apidoc sv_utf8_upgrade_flags
3500 Converts the PV of an SV to its UTF-8-encoded form.
3501 Forces the SV to string form if it is not already.
3502 Always sets the SvUTF8 flag to avoid future validity checks even
3503 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3504 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3505 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3507 This is not as a general purpose byte encoding to Unicode interface:
3508 use the Encode extension for that.
3514 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3516 if (sv == &PL_sv_undef)
3520 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3521 (void) sv_2pv_flags(sv,&len, flags);
3525 (void) SvPV_force(sv,len);
3533 if (SvREADONLY(sv) && SvFAKE(sv)) {
3534 sv_force_normal(sv);
3537 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3538 sv_recode_to_utf8(sv, PL_encoding);
3539 else { /* Assume Latin-1/EBCDIC */
3540 /* This function could be much more efficient if we
3541 * had a FLAG in SVs to signal if there are any hibit
3542 * chars in the PV. Given that there isn't such a flag
3543 * make the loop as fast as possible. */
3544 const U8 *s = (U8 *) SvPVX_const(sv);
3545 const U8 *e = (U8 *) SvEND(sv);
3551 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3555 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3556 char *recoded = bytes_to_utf8((U8*)s, &len);
3558 SvPV_free(sv); /* No longer using what was there before. */
3560 SvPV_set(sv, recoded);
3561 SvCUR_set(sv, len - 1);
3562 SvLEN_set(sv, len); /* No longer know the real size. */
3564 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3571 =for apidoc sv_utf8_downgrade
3573 Attempts to convert the PV of an SV from characters to bytes.
3574 If the PV contains a character beyond byte, this conversion will fail;
3575 in this case, either returns false or, if C<fail_ok> is not
3578 This is not as a general purpose Unicode to byte encoding interface:
3579 use the Encode extension for that.
3585 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3587 if (SvPOKp(sv) && SvUTF8(sv)) {
3592 if (SvREADONLY(sv) && SvFAKE(sv))
3593 sv_force_normal(sv);
3594 s = (U8 *) SvPV(sv, len);
3595 if (!utf8_to_bytes(s, &len)) {
3600 Perl_croak(aTHX_ "Wide character in %s",
3603 Perl_croak(aTHX_ "Wide character");
3614 =for apidoc sv_utf8_encode
3616 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3617 flag off so that it looks like octets again.
3623 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3625 (void) sv_utf8_upgrade(sv);
3627 sv_force_normal_flags(sv, 0);
3629 if (SvREADONLY(sv)) {
3630 Perl_croak(aTHX_ PL_no_modify);
3636 =for apidoc sv_utf8_decode
3638 If the PV of the SV is an octet sequence in UTF-8
3639 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3640 so that it looks like a character. If the PV contains only single-byte
3641 characters, the C<SvUTF8> flag stays being off.
3642 Scans PV for validity and returns false if the PV is invalid UTF-8.
3648 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3654 /* The octets may have got themselves encoded - get them back as
3657 if (!sv_utf8_downgrade(sv, TRUE))
3660 /* it is actually just a matter of turning the utf8 flag on, but
3661 * we want to make sure everything inside is valid utf8 first.
3663 c = (const U8 *) SvPVX_const(sv);
3664 if (!is_utf8_string(c, SvCUR(sv)+1))
3666 e = (const U8 *) SvEND(sv);
3669 if (!UTF8_IS_INVARIANT(ch)) {
3678 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
3679 * this function provided for binary compatibility only
3683 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3685 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
3689 =for apidoc sv_setsv
3691 Copies the contents of the source SV C<ssv> into the destination SV
3692 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3693 function if the source SV needs to be reused. Does not handle 'set' magic.
3694 Loosely speaking, it performs a copy-by-value, obliterating any previous
3695 content of the destination.
3697 You probably want to use one of the assortment of wrappers, such as
3698 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3699 C<SvSetMagicSV_nosteal>.
3701 =for apidoc sv_setsv_flags
3703 Copies the contents of the source SV C<ssv> into the destination SV
3704 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3705 function if the source SV needs to be reused. Does not handle 'set' magic.
3706 Loosely speaking, it performs a copy-by-value, obliterating any previous
3707 content of the destination.
3708 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3709 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3710 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3711 and C<sv_setsv_nomg> are implemented in terms of this function.
3713 You probably want to use one of the assortment of wrappers, such as
3714 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3715 C<SvSetMagicSV_nosteal>.
3717 This is the primary function for copying scalars, and most other
3718 copy-ish functions and macros use this underneath.
3724 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3726 register U32 sflags;
3732 SV_CHECK_THINKFIRST(dstr);
3734 sstr = &PL_sv_undef;
3735 stype = SvTYPE(sstr);
3736 dtype = SvTYPE(dstr);
3741 /* need to nuke the magic */
3743 SvRMAGICAL_off(dstr);
3746 /* There's a lot of redundancy below but we're going for speed here */
3751 if (dtype != SVt_PVGV) {
3752 (void)SvOK_off(dstr);
3760 sv_upgrade(dstr, SVt_IV);
3763 sv_upgrade(dstr, SVt_PVNV);
3767 sv_upgrade(dstr, SVt_PVIV);
3770 (void)SvIOK_only(dstr);
3771 SvIV_set(dstr, SvIVX(sstr));
3774 if (SvTAINTED(sstr))
3785 sv_upgrade(dstr, SVt_NV);
3790 sv_upgrade(dstr, SVt_PVNV);
3793 SvNV_set(dstr, SvNVX(sstr));
3794 (void)SvNOK_only(dstr);
3795 if (SvTAINTED(sstr))
3803 sv_upgrade(dstr, SVt_RV);
3804 else if (dtype == SVt_PVGV &&
3805 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3808 if (GvIMPORTED(dstr) != GVf_IMPORTED
3809 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3811 GvIMPORTED_on(dstr);
3822 sv_upgrade(dstr, SVt_PV);
3825 if (dtype < SVt_PVIV)
3826 sv_upgrade(dstr, SVt_PVIV);
3829 if (dtype < SVt_PVNV)
3830 sv_upgrade(dstr, SVt_PVNV);
3837 const char * const type = sv_reftype(sstr,0);
3839 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3841 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3846 if (dtype <= SVt_PVGV) {
3848 if (dtype != SVt_PVGV) {
3849 const char * const name = GvNAME(sstr);
3850 const STRLEN len = GvNAMELEN(sstr);
3851 sv_upgrade(dstr, SVt_PVGV);
3852 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
3853 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3854 GvNAME(dstr) = savepvn(name, len);
3855 GvNAMELEN(dstr) = len;
3856 SvFAKE_on(dstr); /* can coerce to non-glob */
3858 /* ahem, death to those who redefine active sort subs */
3859 else if (PL_curstackinfo->si_type == PERLSI_SORT
3860 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3861 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3864 #ifdef GV_UNIQUE_CHECK
3865 if (GvUNIQUE((GV*)dstr)) {
3866 Perl_croak(aTHX_ PL_no_modify);
3870 (void)SvOK_off(dstr);
3871 GvINTRO_off(dstr); /* one-shot flag */
3873 GvGP(dstr) = gp_ref(GvGP(sstr));
3874 if (SvTAINTED(sstr))
3876 if (GvIMPORTED(dstr) != GVf_IMPORTED
3877 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3879 GvIMPORTED_on(dstr);
3887 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3889 if ((int)SvTYPE(sstr) != stype) {
3890 stype = SvTYPE(sstr);
3891 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3895 if (stype == SVt_PVLV)
3896 (void)SvUPGRADE(dstr, SVt_PVNV);
3898 (void)SvUPGRADE(dstr, (U32)stype);
3901 sflags = SvFLAGS(sstr);
3903 if (sflags & SVf_ROK) {
3904 if (dtype >= SVt_PV) {
3905 if (dtype == SVt_PVGV) {
3906 SV *sref = SvREFCNT_inc(SvRV(sstr));
3908 const int intro = GvINTRO(dstr);
3910 #ifdef GV_UNIQUE_CHECK
3911 if (GvUNIQUE((GV*)dstr)) {
3912 Perl_croak(aTHX_ PL_no_modify);
3917 GvINTRO_off(dstr); /* one-shot flag */
3918 GvLINE(dstr) = CopLINE(PL_curcop);
3919 GvEGV(dstr) = (GV*)dstr;
3922 switch (SvTYPE(sref)) {
3925 SAVEGENERICSV(GvAV(dstr));
3927 dref = (SV*)GvAV(dstr);
3928 GvAV(dstr) = (AV*)sref;
3929 if (!GvIMPORTED_AV(dstr)
3930 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3932 GvIMPORTED_AV_on(dstr);
3937 SAVEGENERICSV(GvHV(dstr));
3939 dref = (SV*)GvHV(dstr);
3940 GvHV(dstr) = (HV*)sref;
3941 if (!GvIMPORTED_HV(dstr)
3942 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3944 GvIMPORTED_HV_on(dstr);
3949 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3950 SvREFCNT_dec(GvCV(dstr));
3951 GvCV(dstr) = Nullcv;
3952 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3953 PL_sub_generation++;
3955 SAVEGENERICSV(GvCV(dstr));
3958 dref = (SV*)GvCV(dstr);
3959 if (GvCV(dstr) != (CV*)sref) {
3960 CV* cv = GvCV(dstr);
3962 if (!GvCVGEN((GV*)dstr) &&
3963 (CvROOT(cv) || CvXSUB(cv)))
3965 /* ahem, death to those who redefine
3966 * active sort subs */
3967 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3968 PL_sortcop == CvSTART(cv))
3970 "Can't redefine active sort subroutine %s",
3971 GvENAME((GV*)dstr));
3972 /* Redefining a sub - warning is mandatory if
3973 it was a const and its value changed. */
3974 if (ckWARN(WARN_REDEFINE)
3976 && (!CvCONST((CV*)sref)
3977 || sv_cmp(cv_const_sv(cv),
3978 cv_const_sv((CV*)sref)))))
3980 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3982 ? "Constant subroutine %s::%s redefined"
3983 : "Subroutine %s::%s redefined",
3984 HvNAME_get(GvSTASH((GV*)dstr)),
3985 GvENAME((GV*)dstr));
3989 cv_ckproto(cv, (GV*)dstr,
3991 ? SvPVX_const(sref) : Nullch);
3993 GvCV(dstr) = (CV*)sref;
3994 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3995 GvASSUMECV_on(dstr);
3996 PL_sub_generation++;
3998 if (!GvIMPORTED_CV(dstr)
3999 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4001 GvIMPORTED_CV_on(dstr);
4006 SAVEGENERICSV(GvIOp(dstr));
4008 dref = (SV*)GvIOp(dstr);
4009 GvIOp(dstr) = (IO*)sref;
4013 SAVEGENERICSV(GvFORM(dstr));
4015 dref = (SV*)GvFORM(dstr);
4016 GvFORM(dstr) = (CV*)sref;
4020 SAVEGENERICSV(GvSV(dstr));
4022 dref = (SV*)GvSV(dstr);
4024 if (!GvIMPORTED_SV(dstr)
4025 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4027 GvIMPORTED_SV_on(dstr);
4033 if (SvTAINTED(sstr))
4037 if (SvPVX_const(dstr)) {
4043 (void)SvOK_off(dstr);
4044 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4046 if (sflags & SVp_NOK) {
4048 /* Only set the public OK flag if the source has public OK. */
4049 if (sflags & SVf_NOK)
4050 SvFLAGS(dstr) |= SVf_NOK;
4051 SvNV_set(dstr, SvNVX(sstr));
4053 if (sflags & SVp_IOK) {
4054 (void)SvIOKp_on(dstr);
4055 if (sflags & SVf_IOK)
4056 SvFLAGS(dstr) |= SVf_IOK;
4057 if (sflags & SVf_IVisUV)
4059 SvIV_set(dstr, SvIVX(sstr));
4061 if (SvAMAGIC(sstr)) {
4065 else if (sflags & SVp_POK) {
4068 * Check to see if we can just swipe the string. If so, it's a
4069 * possible small lose on short strings, but a big win on long ones.
4070 * It might even be a win on short strings if SvPVX_const(dstr)
4071 * has to be allocated and SvPVX_const(sstr) has to be freed.
4074 if (SvTEMP(sstr) && /* slated for free anyway? */
4075 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4076 (!(flags & SV_NOSTEAL)) && /* and we're allowed to steal temps */
4077 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4078 SvLEN(sstr) && /* and really is a string */
4079 /* and won't be needed again, potentially */
4080 !(PL_op && PL_op->op_type == OP_AASSIGN))
4082 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4084 SvFLAGS(dstr) &= ~SVf_OOK;
4085 Safefree(SvPVX_const(dstr) - SvIVX(dstr));
4087 else if (SvLEN(dstr))
4088 Safefree(SvPVX_const(dstr));
4090 (void)SvPOK_only(dstr);
4091 SvPV_set(dstr, SvPVX(sstr));
4092 SvLEN_set(dstr, SvLEN(sstr));
4093 SvCUR_set(dstr, SvCUR(sstr));
4096 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4097 SvPV_set(sstr, Nullch);
4102 else { /* have to copy actual string */
4103 STRLEN len = SvCUR(sstr);
4104 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4105 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4106 SvCUR_set(dstr, len);
4107 *SvEND(dstr) = '\0';
4108 (void)SvPOK_only(dstr);
4110 if (sflags & SVf_UTF8)
4113 if (sflags & SVp_NOK) {
4115 if (sflags & SVf_NOK)
4116 SvFLAGS(dstr) |= SVf_NOK;
4117 SvNV_set(dstr, SvNVX(sstr));
4119 if (sflags & SVp_IOK) {
4120 (void)SvIOKp_on(dstr);
4121 if (sflags & SVf_IOK)
4122 SvFLAGS(dstr) |= SVf_IOK;
4123 if (sflags & SVf_IVisUV)
4125 SvIV_set(dstr, SvIVX(sstr));
4127 if ( SvVOK(sstr) ) {
4128 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4129 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4130 smg->mg_ptr, smg->mg_len);
4131 SvRMAGICAL_on(dstr);
4134 else if (sflags & SVp_IOK) {
4135 if (sflags & SVf_IOK)
4136 (void)SvIOK_only(dstr);
4138 (void)SvOK_off(dstr);
4139 (void)SvIOKp_on(dstr);
4141 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4142 if (sflags & SVf_IVisUV)
4144 SvIV_set(dstr, SvIVX(sstr));
4145 if (sflags & SVp_NOK) {
4146 if (sflags & SVf_NOK)
4147 (void)SvNOK_on(dstr);
4149 (void)SvNOKp_on(dstr);
4150 SvNV_set(dstr, SvNVX(sstr));
4153 else if (sflags & SVp_NOK) {
4154 if (sflags & SVf_NOK)
4155 (void)SvNOK_only(dstr);
4157 (void)SvOK_off(dstr);
4160 SvNV_set(dstr, SvNVX(sstr));
4163 if (dtype == SVt_PVGV) {
4164 if (ckWARN(WARN_MISC))
4165 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4168 (void)SvOK_off(dstr);
4170 if (SvTAINTED(sstr))
4175 =for apidoc sv_setsv_mg
4177 Like C<sv_setsv>, but also handles 'set' magic.
4183 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4185 sv_setsv(dstr,sstr);
4190 =for apidoc sv_setpvn
4192 Copies a string into an SV. The C<len> parameter indicates the number of
4193 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4194 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4200 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4202 register char *dptr;
4204 SV_CHECK_THINKFIRST(sv);
4210 /* len is STRLEN which is unsigned, need to copy to signed */
4213 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4215 (void)SvUPGRADE(sv, SVt_PV);
4217 SvGROW(sv, len + 1);
4219 Move(ptr,dptr,len,char);
4222 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4227 =for apidoc sv_setpvn_mg
4229 Like C<sv_setpvn>, but also handles 'set' magic.
4235 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4237 sv_setpvn(sv,ptr,len);
4242 =for apidoc sv_setpv
4244 Copies a string into an SV. The string must be null-terminated. Does not
4245 handle 'set' magic. See C<sv_setpv_mg>.
4251 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4253 register STRLEN len;
4255 SV_CHECK_THINKFIRST(sv);
4261 (void)SvUPGRADE(sv, SVt_PV);
4263 SvGROW(sv, len + 1);
4264 Move(ptr,SvPVX(sv),len+1,char);
4266 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4271 =for apidoc sv_setpv_mg
4273 Like C<sv_setpv>, but also handles 'set' magic.
4279 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4286 =for apidoc sv_usepvn
4288 Tells an SV to use C<ptr> to find its string value. Normally the string is
4289 stored inside the SV but sv_usepvn allows the SV to use an outside string.
4290 The C<ptr> should point to memory that was allocated by C<malloc>. The
4291 string length, C<len>, must be supplied. This function will realloc the
4292 memory pointed to by C<ptr>, so that pointer should not be freed or used by
4293 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
4294 See C<sv_usepvn_mg>.
4300 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4303 SV_CHECK_THINKFIRST(sv);
4304 (void)SvUPGRADE(sv, SVt_PV);
4309 if (SvPVX_const(sv))
4312 allocate = PERL_STRLEN_ROUNDUP(len + 1);
4313 ptr = saferealloc (ptr, allocate);
4316 SvLEN_set(sv, allocate);
4318 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4323 =for apidoc sv_usepvn_mg
4325 Like C<sv_usepvn>, but also handles 'set' magic.
4331 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4333 sv_usepvn(sv,ptr,len);
4338 =for apidoc sv_force_normal_flags
4340 Undo various types of fakery on an SV: if the PV is a shared string, make
4341 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4342 an xpvmg. The C<flags> parameter gets passed to C<sv_unref_flags()>
4343 when unrefing. C<sv_force_normal> calls this function with flags set to 0.
4349 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4351 if (SvREADONLY(sv)) {
4353 const char *pvx = SvPVX_const(sv);
4354 const STRLEN len = SvCUR(sv);
4355 const U32 hash = SvSHARED_HASH(sv);
4358 SvGROW(sv, len + 1);
4359 Move(pvx,SvPVX_const(sv),len,char);
4361 unsharepvn(pvx, SvUTF8(sv) ? -(I32)len : len, hash);
4363 else if (IN_PERL_RUNTIME)
4364 Perl_croak(aTHX_ PL_no_modify);
4367 sv_unref_flags(sv, flags);
4368 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4373 =for apidoc sv_force_normal
4375 Undo various types of fakery on an SV: if the PV is a shared string, make
4376 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4377 an xpvmg. See also C<sv_force_normal_flags>.
4383 Perl_sv_force_normal(pTHX_ register SV *sv)
4385 sv_force_normal_flags(sv, 0);
4391 Efficient removal of characters from the beginning of the string buffer.
4392 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4393 the string buffer. The C<ptr> becomes the first character of the adjusted
4394 string. Uses the "OOK hack".
4395 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4396 refer to the same chunk of data.
4402 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr)
4404 register STRLEN delta;
4405 if (!ptr || !SvPOKp(sv))
4407 delta = ptr - SvPVX_const(sv);
4408 SV_CHECK_THINKFIRST(sv);
4409 if (SvTYPE(sv) < SVt_PVIV)
4410 sv_upgrade(sv,SVt_PVIV);
4413 if (!SvLEN(sv)) { /* make copy of shared string */
4414 const char *pvx = SvPVX_const(sv);
4415 STRLEN len = SvCUR(sv);
4416 SvGROW(sv, len + 1);
4417 Move(pvx,SvPVX_const(sv),len,char);
4421 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4422 and we do that anyway inside the SvNIOK_off
4424 SvFLAGS(sv) |= SVf_OOK;
4427 SvLEN_set(sv, SvLEN(sv) - delta);
4428 SvCUR_set(sv, SvCUR(sv) - delta);
4429 SvPV_set(sv, SvPVX(sv) + delta);
4430 SvIV_set(sv, SvIVX(sv) + delta);
4433 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
4434 * this function provided for binary compatibility only
4438 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
4440 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
4444 =for apidoc sv_catpvn
4446 Concatenates the string onto the end of the string which is in the SV. The
4447 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4448 status set, then the bytes appended should be valid UTF-8.
4449 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4451 =for apidoc sv_catpvn_flags
4453 Concatenates the string onto the end of the string which is in the SV. The
4454 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4455 status set, then the bytes appended should be valid UTF-8.
4456 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4457 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4458 in terms of this function.
4464 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4467 const char *dstr = SvPV_force_flags(dsv, dlen, flags);
4469 SvGROW(dsv, dlen + slen + 1);
4471 sstr = SvPVX_const(dsv);
4472 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4473 SvCUR_set(dsv, SvCUR(dsv) + slen);
4475 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4480 =for apidoc sv_catpvn_mg
4482 Like C<sv_catpvn>, but also handles 'set' magic.
4488 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4490 sv_catpvn(sv,ptr,len);
4494 /* sv_catsv() is now a macro using Perl_sv_catsv_flags();
4495 * this function provided for binary compatibility only
4499 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
4501 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
4505 =for apidoc sv_catsv
4507 Concatenates the string from SV C<ssv> onto the end of the string in
4508 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4509 not 'set' magic. See C<sv_catsv_mg>.
4511 =for apidoc sv_catsv_flags
4513 Concatenates the string from SV C<ssv> onto the end of the string in
4514 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4515 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4516 and C<sv_catsv_nomg> are implemented in terms of this function.
4521 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4527 if ((spv = SvPV_const(ssv, slen))) {
4528 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4529 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4530 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4531 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4532 dsv->sv_flags doesn't have that bit set.
4533 Andy Dougherty 12 Oct 2001
4535 const I32 sutf8 = DO_UTF8(ssv);
4538 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4540 dutf8 = DO_UTF8(dsv);
4542 if (dutf8 != sutf8) {
4544 /* Not modifying source SV, so taking a temporary copy. */
4545 SV* csv = sv_2mortal(newSVpvn(spv, slen));
4547 sv_utf8_upgrade(csv);
4548 spv = SvPV_const(csv, slen);
4551 sv_utf8_upgrade_nomg(dsv);
4553 sv_catpvn_nomg(dsv, spv, slen);
4558 =for apidoc sv_catsv_mg
4560 Like C<sv_catsv>, but also handles 'set' magic.
4566 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
4573 =for apidoc sv_catpv
4575 Concatenates the string onto the end of the string which is in the SV.
4576 If the SV has the UTF-8 status set, then the bytes appended should be
4577 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4582 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4584 register STRLEN len;
4590 junk = SvPV_force(sv, tlen);
4592 SvGROW(sv, tlen + len + 1);
4594 ptr = SvPVX_const(sv);
4595 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4596 SvCUR_set(sv, SvCUR(sv) + len);
4597 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4602 =for apidoc sv_catpv_mg
4604 Like C<sv_catpv>, but also handles 'set' magic.
4610 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4619 Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
4620 with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
4627 Perl_newSV(pTHX_ STRLEN len)
4633 sv_upgrade(sv, SVt_PV);
4634 SvGROW(sv, len + 1);
4639 =for apidoc sv_magicext
4641 Adds magic to an SV, upgrading it if necessary. Applies the
4642 supplied vtable and returns a pointer to the magic added.
4644 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4645 In particular, you can add magic to SvREADONLY SVs, and add more than
4646 one instance of the same 'how'.
4648 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4649 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4650 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4651 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4653 (This is now used as a subroutine by C<sv_magic>.)
4658 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
4659 const char* name, I32 namlen)
4663 if (SvTYPE(sv) < SVt_PVMG) {
4664 (void)SvUPGRADE(sv, SVt_PVMG);
4666 Newz(702,mg, 1, MAGIC);
4667 mg->mg_moremagic = SvMAGIC(sv);
4668 SvMAGIC_set(sv, mg);
4670 /* Sometimes a magic contains a reference loop, where the sv and
4671 object refer to each other. To prevent a reference loop that
4672 would prevent such objects being freed, we look for such loops
4673 and if we find one we avoid incrementing the object refcount.
4675 Note we cannot do this to avoid self-tie loops as intervening RV must
4676 have its REFCNT incremented to keep it in existence.
4679 if (!obj || obj == sv ||
4680 how == PERL_MAGIC_arylen ||
4681 how == PERL_MAGIC_qr ||
4682 (SvTYPE(obj) == SVt_PVGV &&
4683 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4684 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4685 GvFORM(obj) == (CV*)sv)))
4690 mg->mg_obj = SvREFCNT_inc(obj);
4691 mg->mg_flags |= MGf_REFCOUNTED;
4694 /* Normal self-ties simply pass a null object, and instead of
4695 using mg_obj directly, use the SvTIED_obj macro to produce a
4696 new RV as needed. For glob "self-ties", we are tieing the PVIO
4697 with an RV obj pointing to the glob containing the PVIO. In
4698 this case, to avoid a reference loop, we need to weaken the
4702 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4703 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4709 mg->mg_len = namlen;
4712 mg->mg_ptr = savepvn(name, namlen);
4713 else if (namlen == HEf_SVKEY)
4714 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4716 mg->mg_ptr = (char *) name;
4718 mg->mg_virtual = vtable;
4722 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4727 =for apidoc sv_magic
4729 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4730 then adds a new magic item of type C<how> to the head of the magic list.
4732 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4733 handling of the C<name> and C<namlen> arguments.
4735 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4736 to add more than one instance of the same 'how'.
4742 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4744 const MGVTBL *vtable = 0;
4747 if (SvREADONLY(sv)) {
4749 && how != PERL_MAGIC_regex_global
4750 && how != PERL_MAGIC_bm
4751 && how != PERL_MAGIC_fm
4752 && how != PERL_MAGIC_sv
4753 && how != PERL_MAGIC_backref
4756 Perl_croak(aTHX_ PL_no_modify);
4759 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4760 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4761 /* sv_magic() refuses to add a magic of the same 'how' as an
4764 if (how == PERL_MAGIC_taint)
4772 vtable = &PL_vtbl_sv;
4774 case PERL_MAGIC_overload:
4775 vtable = &PL_vtbl_amagic;
4777 case PERL_MAGIC_overload_elem:
4778 vtable = &PL_vtbl_amagicelem;
4780 case PERL_MAGIC_overload_table:
4781 vtable = &PL_vtbl_ovrld;
4784 vtable = &PL_vtbl_bm;
4786 case PERL_MAGIC_regdata:
4787 vtable = &PL_vtbl_regdata;
4789 case PERL_MAGIC_regdatum:
4790 vtable = &PL_vtbl_regdatum;
4792 case PERL_MAGIC_env:
4793 vtable = &PL_vtbl_env;
4796 vtable = &PL_vtbl_fm;
4798 case PERL_MAGIC_envelem:
4799 vtable = &PL_vtbl_envelem;
4801 case PERL_MAGIC_regex_global:
4802 vtable = &PL_vtbl_mglob;
4804 case PERL_MAGIC_isa:
4805 vtable = &PL_vtbl_isa;
4807 case PERL_MAGIC_isaelem:
4808 vtable = &PL_vtbl_isaelem;
4810 case PERL_MAGIC_nkeys:
4811 vtable = &PL_vtbl_nkeys;
4813 case PERL_MAGIC_dbfile:
4816 case PERL_MAGIC_dbline:
4817 vtable = &PL_vtbl_dbline;
4819 #ifdef USE_5005THREADS
4820 case PERL_MAGIC_mutex:
4821 vtable = &PL_vtbl_mutex;
4823 #endif /* USE_5005THREADS */
4824 #ifdef USE_LOCALE_COLLATE
4825 case PERL_MAGIC_collxfrm:
4826 vtable = &PL_vtbl_collxfrm;
4828 #endif /* USE_LOCALE_COLLATE */
4829 case PERL_MAGIC_tied:
4830 vtable = &PL_vtbl_pack;
4832 case PERL_MAGIC_tiedelem:
4833 case PERL_MAGIC_tiedscalar:
4834 vtable = &PL_vtbl_packelem;
4837 vtable = &PL_vtbl_regexp;
4839 case PERL_MAGIC_sig:
4840 vtable = &PL_vtbl_sig;
4842 case PERL_MAGIC_sigelem:
4843 vtable = &PL_vtbl_sigelem;
4845 case PERL_MAGIC_taint:
4846 vtable = &PL_vtbl_taint;
4848 case PERL_MAGIC_uvar:
4849 vtable = &PL_vtbl_uvar;
4851 case PERL_MAGIC_vec:
4852 vtable = &PL_vtbl_vec;
4854 case PERL_MAGIC_vstring:
4857 case PERL_MAGIC_utf8:
4858 vtable = &PL_vtbl_utf8;
4860 case PERL_MAGIC_substr:
4861 vtable = &PL_vtbl_substr;
4863 case PERL_MAGIC_defelem:
4864 vtable = &PL_vtbl_defelem;
4866 case PERL_MAGIC_glob:
4867 vtable = &PL_vtbl_glob;
4869 case PERL_MAGIC_arylen:
4870 vtable = &PL_vtbl_arylen;
4872 case PERL_MAGIC_pos:
4873 vtable = &PL_vtbl_pos;
4875 case PERL_MAGIC_backref:
4876 vtable = &PL_vtbl_backref;
4878 case PERL_MAGIC_ext:
4879 /* Reserved for use by extensions not perl internals. */
4880 /* Useful for attaching extension internal data to perl vars. */
4881 /* Note that multiple extensions may clash if magical scalars */
4882 /* etc holding private data from one are passed to another. */
4885 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4888 /* Rest of work is done else where */
4889 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4892 case PERL_MAGIC_taint:
4895 case PERL_MAGIC_ext:
4896 case PERL_MAGIC_dbfile:
4903 =for apidoc sv_unmagic
4905 Removes all magic of type C<type> from an SV.
4911 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4915 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4918 for (mg = *mgp; mg; mg = *mgp) {
4919 if (mg->mg_type == type) {
4920 const MGVTBL* const vtbl = mg->mg_virtual;
4921 *mgp = mg->mg_moremagic;
4922 if (vtbl && vtbl->svt_free)
4923 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4924 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4926 Safefree(mg->mg_ptr);
4927 else if (mg->mg_len == HEf_SVKEY)
4928 SvREFCNT_dec((SV*)mg->mg_ptr);
4929 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
4930 Safefree(mg->mg_ptr);
4932 if (mg->mg_flags & MGf_REFCOUNTED)
4933 SvREFCNT_dec(mg->mg_obj);
4937 mgp = &mg->mg_moremagic;
4941 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4948 =for apidoc sv_rvweaken
4950 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4951 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4952 push a back-reference to this RV onto the array of backreferences
4953 associated with that magic.
4959 Perl_sv_rvweaken(pTHX_ SV *sv)
4962 if (!SvOK(sv)) /* let undefs pass */
4965 Perl_croak(aTHX_ "Can't weaken a nonreference");
4966 else if (SvWEAKREF(sv)) {
4967 if (ckWARN(WARN_MISC))
4968 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4972 sv_add_backref(tsv, sv);
4978 /* Give tsv backref magic if it hasn't already got it, then push a
4979 * back-reference to sv onto the array associated with the backref magic.
4983 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4987 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
4988 av = (AV*)mg->mg_obj;
4991 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4992 /* av now has a refcnt of 2, which avoids it getting freed
4993 * before us during global cleanup. The extra ref is removed
4994 * by magic_killbackrefs() when tsv is being freed */
4996 if (AvFILLp(av) >= AvMAX(av)) {
4997 av_extend(av, AvFILLp(av)+1);
4999 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5002 /* delete a back-reference to ourselves from the backref magic associated
5003 * with the SV we point to.
5007 S_sv_del_backref(pTHX_ SV *sv)
5014 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
5015 Perl_croak(aTHX_ "panic: del_backref");
5016 av = (AV *)mg->mg_obj;
5018 /* We shouldn't be in here more than once, but for paranoia reasons lets
5020 for (i = AvFILLp(av); i >= 0; i--) {
5022 const SSize_t fill = AvFILLp(av);
5024 /* We weren't the last entry.
5025 An unordered list has this property that you can take the
5026 last element off the end to fill the hole, and it's still
5027 an unordered list :-)
5032 AvFILLp(av) = fill - 1;
5038 =for apidoc sv_insert
5040 Inserts a string at the specified offset/length within the SV. Similar to
5041 the Perl substr() function.
5047 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
5051 register char *midend;
5052 register char *bigend;
5058 Perl_croak(aTHX_ "Can't modify non-existent substring");
5059 SvPV_force(bigstr, curlen);
5060 (void)SvPOK_only_UTF8(bigstr);
5061 if (offset + len > curlen) {
5062 SvGROW(bigstr, offset+len+1);
5063 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5064 SvCUR_set(bigstr, offset+len);
5068 i = littlelen - len;
5069 if (i > 0) { /* string might grow */
5070 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5071 mid = big + offset + len;
5072 midend = bigend = big + SvCUR(bigstr);
5075 while (midend > mid) /* shove everything down */
5076 *--bigend = *--midend;
5077 Move(little,big+offset,littlelen,char);
5078 SvCUR_set(bigstr, SvCUR(bigstr) + i);
5083 Move(little,SvPVX(bigstr)+offset,len,char);
5088 big = SvPVX(bigstr);
5091 bigend = big + SvCUR(bigstr);
5093 if (midend > bigend)
5094 Perl_croak(aTHX_ "panic: sv_insert");
5096 if (mid - big > bigend - midend) { /* faster to shorten from end */
5098 Move(little, mid, littlelen,char);
5101 i = bigend - midend;
5103 Move(midend, mid, i,char);
5107 SvCUR_set(bigstr, mid - big);
5110 else if ((i = mid - big)) { /* faster from front */
5111 midend -= littlelen;
5113 sv_chop(bigstr,midend-i);
5118 Move(little, mid, littlelen,char);
5120 else if (littlelen) {
5121 midend -= littlelen;
5122 sv_chop(bigstr,midend);
5123 Move(little,midend,littlelen,char);
5126 sv_chop(bigstr,midend);
5132 =for apidoc sv_replace
5134 Make the first argument a copy of the second, then delete the original.
5135 The target SV physically takes over ownership of the body of the source SV
5136 and inherits its flags; however, the target keeps any magic it owns,
5137 and any magic in the source is discarded.
5138 Note that this is a rather specialist SV copying operation; most of the
5139 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5145 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
5147 const U32 refcnt = SvREFCNT(sv);
5148 SV_CHECK_THINKFIRST(sv);
5149 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
5150 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Reference miscount in sv_replace()");
5151 if (SvMAGICAL(sv)) {
5155 sv_upgrade(nsv, SVt_PVMG);
5156 SvMAGIC_set(nsv, SvMAGIC(sv));
5157 SvFLAGS(nsv) |= SvMAGICAL(sv);
5159 SvMAGIC_set(sv, NULL);
5163 assert(!SvREFCNT(sv));
5164 StructCopy(nsv,sv,SV);
5165 SvREFCNT(sv) = refcnt;
5166 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5172 =for apidoc sv_clear
5174 Clear an SV: call any destructors, free up any memory used by the body,
5175 and free the body itself. The SV's head is I<not> freed, although
5176 its type is set to all 1's so that it won't inadvertently be assumed
5177 to be live during global destruction etc.
5178 This function should only be called when REFCNT is zero. Most of the time
5179 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5186 Perl_sv_clear(pTHX_ register SV *sv)
5190 assert(SvREFCNT(sv) == 0);
5193 if (PL_defstash) { /* Still have a symbol table? */
5197 stash = SvSTASH(sv);
5198 destructor = StashHANDLER(stash,DESTROY);
5200 SV* tmpref = newRV(sv);
5201 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5203 PUSHSTACKi(PERLSI_DESTROY);
5208 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5214 if(SvREFCNT(tmpref) < 2) {
5215 /* tmpref is not kept alive! */
5217 SvRV_set(tmpref, NULL);
5220 SvREFCNT_dec(tmpref);
5222 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5226 if (PL_in_clean_objs)
5227 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5229 /* DESTROY gave object new lease on life */
5235 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5236 SvOBJECT_off(sv); /* Curse the object. */
5237 if (SvTYPE(sv) != SVt_PVIO)
5238 --PL_sv_objcount; /* XXX Might want something more general */
5241 if (SvTYPE(sv) >= SVt_PVMG) {
5244 if (SvTYPE(sv) == SVt_PVMG && SvFLAGS(sv) & SVpad_TYPED)
5245 SvREFCNT_dec(SvSTASH(sv));
5248 switch (SvTYPE(sv)) {
5251 IoIFP(sv) != PerlIO_stdin() &&
5252 IoIFP(sv) != PerlIO_stdout() &&
5253 IoIFP(sv) != PerlIO_stderr())
5255 io_close((IO*)sv, FALSE);
5257 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5258 PerlDir_close(IoDIRP(sv));
5259 IoDIRP(sv) = (DIR*)NULL;
5260 Safefree(IoTOP_NAME(sv));
5261 Safefree(IoFMT_NAME(sv));
5262 Safefree(IoBOTTOM_NAME(sv));
5277 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5278 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5279 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5280 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5282 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5283 SvREFCNT_dec(LvTARG(sv));
5287 Safefree(GvNAME(sv));
5288 /* cannot decrease stash refcount yet, as we might recursively delete
5289 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
5290 of stash until current sv is completely gone.
5291 -- JohnPC, 27 Mar 1998 */
5292 stash = GvSTASH(sv);
5298 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5300 SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv));
5301 /* Don't even bother with turning off the OOK flag. */
5310 SvREFCNT_dec(SvRV(sv));
5312 else if (SvPVX_const(sv) && SvLEN(sv))
5313 Safefree(SvPVX_const(sv));
5314 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5315 unsharepvn(SvPVX_const(sv),
5316 SvUTF8(sv) ? -(I32)SvCUR(sv) : SvCUR(sv),
5329 switch (SvTYPE(sv)) {
5345 del_XPVIV(SvANY(sv));
5348 del_XPVNV(SvANY(sv));
5351 del_XPVMG(SvANY(sv));
5354 del_XPVLV(SvANY(sv));
5357 del_XPVAV(SvANY(sv));
5360 del_XPVHV(SvANY(sv));
5363 del_XPVCV(SvANY(sv));
5366 del_XPVGV(SvANY(sv));
5367 /* code duplication for increased performance. */
5368 SvFLAGS(sv) &= SVf_BREAK;
5369 SvFLAGS(sv) |= SVTYPEMASK;
5370 /* decrease refcount of the stash that owns this GV, if any */
5372 SvREFCNT_dec(stash);
5373 return; /* not break, SvFLAGS reset already happened */
5375 del_XPVBM(SvANY(sv));
5378 del_XPVFM(SvANY(sv));
5381 del_XPVIO(SvANY(sv));
5384 SvFLAGS(sv) &= SVf_BREAK;
5385 SvFLAGS(sv) |= SVTYPEMASK;
5389 =for apidoc sv_newref
5391 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5398 Perl_sv_newref(pTHX_ SV *sv)
5401 ATOMIC_INC(SvREFCNT(sv));
5408 Decrement an SV's reference count, and if it drops to zero, call
5409 C<sv_clear> to invoke destructors and free up any memory used by
5410 the body; finally, deallocate the SV's head itself.
5411 Normally called via a wrapper macro C<SvREFCNT_dec>.
5417 Perl_sv_free(pTHX_ SV *sv)
5419 int refcount_is_zero;
5423 if (SvREFCNT(sv) == 0) {
5424 if (SvFLAGS(sv) & SVf_BREAK)
5425 /* this SV's refcnt has been artificially decremented to
5426 * trigger cleanup */
5428 if (PL_in_clean_all) /* All is fair */
5430 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5431 /* make sure SvREFCNT(sv)==0 happens very seldom */
5432 SvREFCNT(sv) = (~(U32)0)/2;
5435 if (ckWARN_d(WARN_INTERNAL))
5436 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5437 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5438 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5441 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
5442 if (!refcount_is_zero)
5446 if (ckWARN_d(WARN_DEBUGGING))
5447 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5448 "Attempt to free temp prematurely: SV 0x%"UVxf
5449 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5453 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5454 /* make sure SvREFCNT(sv)==0 happens very seldom */
5455 SvREFCNT(sv) = (~(U32)0)/2;
5466 Returns the length of the string in the SV. Handles magic and type
5467 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5473 Perl_sv_len(pTHX_ register SV *sv)
5481 len = mg_length(sv);
5483 (void)SvPV_const(sv, len);
5488 =for apidoc sv_len_utf8
5490 Returns the number of characters in the string in an SV, counting wide
5491 UTF-8 bytes as a single character. Handles magic and type coercion.
5497 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
5498 * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init().
5499 * (Note that the mg_len is not the length of the mg_ptr field.)
5504 Perl_sv_len_utf8(pTHX_ register SV *sv)
5510 return mg_length(sv);
5514 const U8 *s = (U8*)SvPV_const(sv, len);
5515 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
5517 if (mg && mg->mg_len != -1 && (mg->mg_len > 0 || len == 0)) {
5519 #ifdef PERL_UTF8_CACHE_ASSERT
5520 assert(ulen == Perl_utf8_length(aTHX_ s, s + len));
5524 ulen = Perl_utf8_length(aTHX_ s, s + len);
5525 if (!mg && !SvREADONLY(sv)) {
5526 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5527 mg = mg_find(sv, PERL_MAGIC_utf8);
5537 /* S_utf8_mg_pos_init() is used to initialize the mg_ptr field of
5538 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5539 * between UTF-8 and byte offsets. There are two (substr offset and substr
5540 * length, the i offset, PERL_MAGIC_UTF8_CACHESIZE) times two (UTF-8 offset
5541 * and byte offset) cache positions.
5543 * The mg_len field is used by sv_len_utf8(), see its comments.
5544 * Note that the mg_len is not the length of the mg_ptr field.
5548 S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i,
5549 I32 offsetp, const U8 *s, const U8 *start)
5553 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5555 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
5559 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5561 Newz(0, *cachep, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5562 (*mgp)->mg_ptr = (char *) *cachep;
5566 (*cachep)[i] = offsetp;
5567 (*cachep)[i+1] = s - start;
5575 * S_utf8_mg_pos() is used to query and update mg_ptr field of
5576 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5577 * between UTF-8 and byte offsets. See also the comments of
5578 * S_utf8_mg_pos_init().
5582 S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I32 uoff, const U8 **sp, const U8 *start, const U8 *send)
5586 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5588 *mgp = mg_find(sv, PERL_MAGIC_utf8);
5589 if (*mgp && (*mgp)->mg_ptr) {
5590 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5591 ASSERT_UTF8_CACHE(*cachep);
5592 if ((*cachep)[i] == (STRLEN)uoff) /* An exact match. */
5594 else { /* We will skip to the right spot. */
5599 /* The assumption is that going backward is half
5600 * the speed of going forward (that's where the
5601 * 2 * backw in the below comes from). (The real
5602 * figure of course depends on the UTF-8 data.) */
5604 if ((*cachep)[i] > (STRLEN)uoff) {
5606 backw = (*cachep)[i] - (STRLEN)uoff;
5608 if (forw < 2 * backw)
5611 p = start + (*cachep)[i+1];
5613 /* Try this only for the substr offset (i == 0),
5614 * not for the substr length (i == 2). */
5615 else if (i == 0) { /* (*cachep)[i] < uoff */
5616 const STRLEN ulen = sv_len_utf8(sv);
5618 if ((STRLEN)uoff < ulen) {
5619 forw = (STRLEN)uoff - (*cachep)[i];
5620 backw = ulen - (STRLEN)uoff;
5622 if (forw < 2 * backw)
5623 p = start + (*cachep)[i+1];
5628 /* If the string is not long enough for uoff,
5629 * we could extend it, but not at this low a level. */
5633 if (forw < 2 * backw) {
5640 while (UTF8_IS_CONTINUATION(*p))
5645 /* Update the cache. */
5646 (*cachep)[i] = (STRLEN)uoff;
5647 (*cachep)[i+1] = p - start;
5649 /* Drop the stale "length" cache */
5658 if (found) { /* Setup the return values. */
5659 *offsetp = (*cachep)[i+1];
5660 *sp = start + *offsetp;
5663 *offsetp = send - start;
5665 else if (*sp < start) {
5671 #ifdef PERL_UTF8_CACHE_ASSERT
5676 while (n-- && s < send)
5680 assert(*offsetp == s - start);
5681 assert((*cachep)[0] == (STRLEN)uoff);
5682 assert((*cachep)[1] == *offsetp);
5684 ASSERT_UTF8_CACHE(*cachep);
5693 =for apidoc sv_pos_u2b
5695 Converts the value pointed to by offsetp from a count of UTF-8 chars from
5696 the start of the string, to a count of the equivalent number of bytes; if
5697 lenp is non-zero, it does the same to lenp, but this time starting from
5698 the offset, rather than from the start of the string. Handles magic and
5705 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5706 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5707 * byte offsets. See also the comments of S_utf8_mg_pos().
5712 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
5720 start = (U8*)SvPV_const(sv, len);
5724 const U8 *s = start;
5725 I32 uoffset = *offsetp;
5726 const U8 *send = s + len;
5730 if (utf8_mg_pos(sv, &mg, &cache, 0, offsetp, *offsetp, &s, start, send))
5732 if (!found && uoffset > 0) {
5733 while (s < send && uoffset--)
5737 if (utf8_mg_pos_init(sv, &mg, &cache, 0, *offsetp, s, start))
5739 *offsetp = s - start;
5744 if (utf8_mg_pos(sv, &mg, &cache, 2, lenp, *lenp, &s, start, send)) {
5748 if (!found && *lenp > 0) {
5751 while (s < send && ulen--)
5755 utf8_mg_pos_init(sv, &mg, &cache, 2, *lenp, s, start);
5759 ASSERT_UTF8_CACHE(cache);
5771 =for apidoc sv_pos_b2u
5773 Converts the value pointed to by offsetp from a count of bytes from the
5774 start of the string, to a count of the equivalent number of UTF-8 chars.
5775 Handles magic and type coercion.
5781 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5782 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5783 * byte offsets. See also the comments of S_utf8_mg_pos().
5788 Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
5796 s = (const U8*)SvPV_const(sv, len);
5797 if ((I32)len < *offsetp)
5798 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
5800 const U8* send = s + *offsetp;
5802 STRLEN *cache = NULL;
5806 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5807 mg = mg_find(sv, PERL_MAGIC_utf8);
5808 if (mg && mg->mg_ptr) {
5809 cache = (STRLEN *) mg->mg_ptr;
5810 if (cache[1] == (STRLEN)*offsetp) {
5811 /* An exact match. */
5812 *offsetp = cache[0];
5816 else if (cache[1] < (STRLEN)*offsetp) {
5817 /* We already know part of the way. */
5820 /* Let the below loop do the rest. */
5822 else { /* cache[1] > *offsetp */
5823 /* We already know all of the way, now we may
5824 * be able to walk back. The same assumption
5825 * is made as in S_utf8_mg_pos(), namely that
5826 * walking backward is twice slower than
5827 * walking forward. */
5828 STRLEN forw = *offsetp;
5829 STRLEN backw = cache[1] - *offsetp;
5831 if (!(forw < 2 * backw)) {
5832 const U8 *p = s + cache[1];
5839 while (UTF8_IS_CONTINUATION(*p)) {
5847 *offsetp = cache[0];
5849 /* Drop the stale "length" cache */
5857 ASSERT_UTF8_CACHE(cache);
5863 /* Call utf8n_to_uvchr() to validate the sequence
5864 * (unless a simple non-UTF character) */
5865 if (!UTF8_IS_INVARIANT(*s))
5866 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
5875 if (!SvREADONLY(sv)) {
5877 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5878 mg = mg_find(sv, PERL_MAGIC_utf8);
5883 Newz(0, cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5884 mg->mg_ptr = (char *) cache;
5889 cache[1] = *offsetp;
5890 /* Drop the stale "length" cache */
5904 Returns a boolean indicating whether the strings in the two SVs are
5905 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5906 coerce its args to strings if necessary.
5912 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
5920 SV* svrecode = Nullsv;
5927 pv1 = SvPV_const(sv1, cur1);
5934 pv2 = SvPV_const(sv2, cur2);
5936 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5937 /* Differing utf8ness.
5938 * Do not UTF8size the comparands as a side-effect. */
5941 svrecode = newSVpvn(pv2, cur2);
5942 sv_recode_to_utf8(svrecode, PL_encoding);
5943 pv2 = SvPV_const(svrecode, cur2);
5946 svrecode = newSVpvn(pv1, cur1);
5947 sv_recode_to_utf8(svrecode, PL_encoding);
5948 pv1 = SvPV_const(svrecode, cur1);
5950 /* Now both are in UTF-8. */
5952 SvREFCNT_dec(svrecode);
5957 bool is_utf8 = TRUE;
5960 /* sv1 is the UTF-8 one,
5961 * if is equal it must be downgrade-able */
5962 char *pv = (char*)bytes_from_utf8((const U8*)pv1,
5968 /* sv2 is the UTF-8 one,
5969 * if is equal it must be downgrade-able */
5970 char *pv = (char *)bytes_from_utf8((const U8*)pv2,
5976 /* Downgrade not possible - cannot be eq */
5983 eq = memEQ(pv1, pv2, cur1);
5986 SvREFCNT_dec(svrecode);
5997 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
5998 string in C<sv1> is less than, equal to, or greater than the string in
5999 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6000 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
6006 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
6009 const char *pv1, *pv2;
6012 SV *svrecode = Nullsv;
6019 pv1 = SvPV_const(sv1, cur1);
6026 pv2 = SvPV_const(sv2, cur2);
6028 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6029 /* Differing utf8ness.
6030 * Do not UTF8size the comparands as a side-effect. */
6033 svrecode = newSVpvn(pv2, cur2);
6034 sv_recode_to_utf8(svrecode, PL_encoding);
6035 pv2 = SvPV_const(svrecode, cur2);
6038 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6043 svrecode = newSVpvn(pv1, cur1);
6044 sv_recode_to_utf8(svrecode, PL_encoding);
6045 pv1 = SvPV_const(svrecode, cur1);
6048 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6054 cmp = cur2 ? -1 : 0;
6058 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6061 cmp = retval < 0 ? -1 : 1;
6062 } else if (cur1 == cur2) {
6065 cmp = cur1 < cur2 ? -1 : 1;
6070 SvREFCNT_dec(svrecode);
6079 =for apidoc sv_cmp_locale
6081 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6082 'use bytes' aware, handles get magic, and will coerce its args to strings
6083 if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
6089 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
6091 #ifdef USE_LOCALE_COLLATE
6097 if (PL_collation_standard)
6101 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6103 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6105 if (!pv1 || !len1) {
6116 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6119 return retval < 0 ? -1 : 1;
6122 * When the result of collation is equality, that doesn't mean
6123 * that there are no differences -- some locales exclude some
6124 * characters from consideration. So to avoid false equalities,
6125 * we use the raw string as a tiebreaker.
6131 #endif /* USE_LOCALE_COLLATE */
6133 return sv_cmp(sv1, sv2);
6137 #ifdef USE_LOCALE_COLLATE
6140 =for apidoc sv_collxfrm
6142 Add Collate Transform magic to an SV if it doesn't already have it.
6144 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6145 scalar data of the variable, but transformed to such a format that a normal
6146 memory comparison can be used to compare the data according to the locale
6153 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
6157 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6158 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6164 Safefree(mg->mg_ptr);
6165 s = SvPV_const(sv, len);
6166 if ((xf = mem_collxfrm(s, len, &xlen))) {
6167 if (SvREADONLY(sv)) {
6170 return xf + sizeof(PL_collation_ix);
6173 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
6174 mg = mg_find(sv, PERL_MAGIC_collxfrm);
6187 if (mg && mg->mg_ptr) {
6189 return mg->mg_ptr + sizeof(PL_collation_ix);
6197 #endif /* USE_LOCALE_COLLATE */
6202 Get a line from the filehandle and store it into the SV, optionally
6203 appending to the currently-stored string.
6209 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
6213 register STDCHAR rslast;
6214 register STDCHAR *bp;
6220 if (SvTHINKFIRST(sv))
6221 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6222 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6224 However, perlbench says it's slower, because the existing swipe code
6225 is faster than copy on write.
6226 Swings and roundabouts. */
6227 (void)SvUPGRADE(sv, SVt_PV);
6232 if (PerlIO_isutf8(fp)) {
6234 sv_utf8_upgrade_nomg(sv);
6235 sv_pos_u2b(sv,&append,0);
6237 } else if (SvUTF8(sv)) {
6238 SV *tsv = NEWSV(0,0);
6239 sv_gets(tsv, fp, 0);
6240 sv_utf8_upgrade_nomg(tsv);
6241 SvCUR_set(sv,append);
6244 goto return_string_or_null;
6249 if (PerlIO_isutf8(fp))
6252 if (IN_PERL_COMPILETIME) {
6253 /* we always read code in line mode */
6257 else if (RsSNARF(PL_rs)) {
6258 /* If it is a regular disk file use size from stat() as estimate
6259 of amount we are going to read - may result in malloc-ing
6260 more memory than we realy need if layers bellow reduce
6261 size we read (e.g. CRLF or a gzip layer)
6264 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
6265 const Off_t offset = PerlIO_tell(fp);
6266 if (offset != (Off_t) -1 && st.st_size + append > offset) {
6267 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6273 else if (RsRECORD(PL_rs)) {
6277 /* Grab the size of the record we're getting */
6278 recsize = SvIV(SvRV(PL_rs));
6279 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6282 /* VMS wants read instead of fread, because fread doesn't respect */
6283 /* RMS record boundaries. This is not necessarily a good thing to be */
6284 /* doing, but we've got no other real choice - except avoid stdio
6285 as implementation - perhaps write a :vms layer ?
6287 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6289 bytesread = PerlIO_read(fp, buffer, recsize);
6293 SvCUR_set(sv, bytesread += append);
6294 buffer[bytesread] = '\0';
6295 goto return_string_or_null;
6297 else if (RsPARA(PL_rs)) {
6303 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6304 if (PerlIO_isutf8(fp)) {
6305 rsptr = SvPVutf8(PL_rs, rslen);
6308 if (SvUTF8(PL_rs)) {
6309 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6310 Perl_croak(aTHX_ "Wide character in $/");
6313 rsptr = SvPV_const(PL_rs, rslen);
6317 rslast = rslen ? rsptr[rslen - 1] : '\0';
6319 if (rspara) { /* have to do this both before and after */
6320 do { /* to make sure file boundaries work right */
6323 i = PerlIO_getc(fp);
6327 PerlIO_ungetc(fp,i);
6333 /* See if we know enough about I/O mechanism to cheat it ! */
6335 /* This used to be #ifdef test - it is made run-time test for ease
6336 of abstracting out stdio interface. One call should be cheap
6337 enough here - and may even be a macro allowing compile
6341 if (PerlIO_fast_gets(fp)) {
6344 * We're going to steal some values from the stdio struct
6345 * and put EVERYTHING in the innermost loop into registers.
6347 register STDCHAR *ptr;
6351 #if defined(VMS) && defined(PERLIO_IS_STDIO)
6352 /* An ungetc()d char is handled separately from the regular
6353 * buffer, so we getc() it back out and stuff it in the buffer.
6355 i = PerlIO_getc(fp);
6356 if (i == EOF) return 0;
6357 *(--((*fp)->_ptr)) = (unsigned char) i;
6361 /* Here is some breathtakingly efficient cheating */
6363 cnt = PerlIO_get_cnt(fp); /* get count into register */
6364 /* make sure we have the room */
6365 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6366 /* Not room for all of it
6367 if we are looking for a separator and room for some
6369 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6370 /* just process what we have room for */
6371 shortbuffered = cnt - SvLEN(sv) + append + 1;
6372 cnt -= shortbuffered;
6376 /* remember that cnt can be negative */
6377 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6382 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
6383 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6384 DEBUG_P(PerlIO_printf(Perl_debug_log,
6385 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6386 DEBUG_P(PerlIO_printf(Perl_debug_log,
6387 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6388 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6389 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6394 while (cnt > 0) { /* this | eat */
6396 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6397 goto thats_all_folks; /* screams | sed :-) */
6401 Copy(ptr, bp, cnt, char); /* this | eat */
6402 bp += cnt; /* screams | dust */
6403 ptr += cnt; /* louder | sed :-) */
6408 if (shortbuffered) { /* oh well, must extend */
6409 cnt = shortbuffered;
6411 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6413 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6414 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6418 DEBUG_P(PerlIO_printf(Perl_debug_log,
6419 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6420 PTR2UV(ptr),(long)cnt));
6421 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6423 DEBUG_P(PerlIO_printf(Perl_debug_log,
6424 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6425 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6426 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6428 /* This used to call 'filbuf' in stdio form, but as that behaves like
6429 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6430 another abstraction. */
6431 i = PerlIO_getc(fp); /* get more characters */
6433 DEBUG_P(PerlIO_printf(Perl_debug_log,
6434 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6435 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6436 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6438 cnt = PerlIO_get_cnt(fp);
6439 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
6440 DEBUG_P(PerlIO_printf(Perl_debug_log,
6441 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6443 if (i == EOF) /* all done for ever? */
6444 goto thats_really_all_folks;
6446 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6448 SvGROW(sv, bpx + cnt + 2);
6449 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6451 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
6453 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
6454 goto thats_all_folks;
6458 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6459 memNE((char*)bp - rslen, rsptr, rslen))
6460 goto screamer; /* go back to the fray */
6461 thats_really_all_folks:
6463 cnt += shortbuffered;
6464 DEBUG_P(PerlIO_printf(Perl_debug_log,
6465 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6466 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
6467 DEBUG_P(PerlIO_printf(Perl_debug_log,
6468 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6469 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6470 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6472 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
6473 DEBUG_P(PerlIO_printf(Perl_debug_log,
6474 "Screamer: done, len=%ld, string=|%.*s|\n",
6475 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6479 /*The big, slow, and stupid way. */
6481 /* Any stack-challenged places. */
6483 /* EPOC: need to work around SDK features. *
6484 * On WINS: MS VC5 generates calls to _chkstk, *
6485 * if a "large" stack frame is allocated. *
6486 * gcc on MARM does not generate calls like these. */
6487 # define USEHEAPINSTEADOFSTACK
6490 #ifdef USEHEAPINSTEADOFSTACK
6492 New(0, buf, 8192, STDCHAR);
6500 const register STDCHAR *bpe = buf + sizeof(buf);
6502 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6503 ; /* keep reading */
6507 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6508 /* Accomodate broken VAXC compiler, which applies U8 cast to
6509 * both args of ?: operator, causing EOF to change into 255
6512 i = (U8)buf[cnt - 1];
6518 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6520 sv_catpvn(sv, (char *) buf, cnt);
6522 sv_setpvn(sv, (char *) buf, cnt);
6524 if (i != EOF && /* joy */
6526 SvCUR(sv) < rslen ||
6527 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6531 * If we're reading from a TTY and we get a short read,
6532 * indicating that the user hit his EOF character, we need
6533 * to notice it now, because if we try to read from the TTY
6534 * again, the EOF condition will disappear.
6536 * The comparison of cnt to sizeof(buf) is an optimization
6537 * that prevents unnecessary calls to feof().
6541 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
6545 #ifdef USEHEAPINSTEADOFSTACK
6550 if (rspara) { /* have to do this both before and after */
6551 while (i != EOF) { /* to make sure file boundaries work right */
6552 i = PerlIO_getc(fp);
6554 PerlIO_ungetc(fp,i);
6560 return_string_or_null:
6561 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
6567 Auto-increment of the value in the SV, doing string to numeric conversion
6568 if necessary. Handles 'get' magic.
6574 Perl_sv_inc(pTHX_ register SV *sv)
6583 if (SvTHINKFIRST(sv)) {
6584 if (SvREADONLY(sv) && SvFAKE(sv))
6585 sv_force_normal(sv);
6586 if (SvREADONLY(sv)) {
6587 if (IN_PERL_RUNTIME)
6588 Perl_croak(aTHX_ PL_no_modify);
6592 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6594 i = PTR2IV(SvRV(sv));
6599 flags = SvFLAGS(sv);
6600 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6601 /* It's (privately or publicly) a float, but not tested as an
6602 integer, so test it to see. */
6604 flags = SvFLAGS(sv);
6606 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6607 /* It's publicly an integer, or privately an integer-not-float */
6608 #ifdef PERL_PRESERVE_IVUV
6612 if (SvUVX(sv) == UV_MAX)
6613 sv_setnv(sv, UV_MAX_P1);
6615 (void)SvIOK_only_UV(sv);
6616 SvUV_set(sv, SvUVX(sv) + 1);
6618 if (SvIVX(sv) == IV_MAX)
6619 sv_setuv(sv, (UV)IV_MAX + 1);
6621 (void)SvIOK_only(sv);
6622 SvIV_set(sv, SvIVX(sv) + 1);
6627 if (flags & SVp_NOK) {
6628 (void)SvNOK_only(sv);
6629 SvNV_set(sv, SvNVX(sv) + 1.0);
6633 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
6634 if ((flags & SVTYPEMASK) < SVt_PVIV)
6635 sv_upgrade(sv, SVt_IV);
6636 (void)SvIOK_only(sv);
6641 while (isALPHA(*d)) d++;
6642 while (isDIGIT(*d)) d++;
6644 #ifdef PERL_PRESERVE_IVUV
6645 /* Got to punt this as an integer if needs be, but we don't issue
6646 warnings. Probably ought to make the sv_iv_please() that does
6647 the conversion if possible, and silently. */
6648 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6649 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6650 /* Need to try really hard to see if it's an integer.
6651 9.22337203685478e+18 is an integer.
6652 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6653 so $a="9.22337203685478e+18"; $a+0; $a++
6654 needs to be the same as $a="9.22337203685478e+18"; $a++
6661 /* sv_2iv *should* have made this an NV */
6662 if (flags & SVp_NOK) {
6663 (void)SvNOK_only(sv);
6664 SvNV_set(sv, SvNVX(sv) + 1.0);
6667 /* I don't think we can get here. Maybe I should assert this
6668 And if we do get here I suspect that sv_setnv will croak. NWC
6670 #if defined(USE_LONG_DOUBLE)
6671 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",
6672 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6674 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6675 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6678 #endif /* PERL_PRESERVE_IVUV */
6679 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
6683 while (d >= SvPVX_const(sv)) {
6691 /* MKS: The original code here died if letters weren't consecutive.
6692 * at least it didn't have to worry about non-C locales. The
6693 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
6694 * arranged in order (although not consecutively) and that only
6695 * [A-Za-z] are accepted by isALPHA in the C locale.
6697 if (*d != 'z' && *d != 'Z') {
6698 do { ++*d; } while (!isALPHA(*d));
6701 *(d--) -= 'z' - 'a';
6706 *(d--) -= 'z' - 'a' + 1;
6710 /* oh,oh, the number grew */
6711 SvGROW(sv, SvCUR(sv) + 2);
6712 SvCUR_set(sv, SvCUR(sv) + 1);
6713 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
6724 Auto-decrement of the value in the SV, doing string to numeric conversion
6725 if necessary. Handles 'get' magic.
6731 Perl_sv_dec(pTHX_ register SV *sv)
6739 if (SvTHINKFIRST(sv)) {
6740 if (SvREADONLY(sv) && SvFAKE(sv))
6741 sv_force_normal(sv);
6742 if (SvREADONLY(sv)) {
6743 if (IN_PERL_RUNTIME)
6744 Perl_croak(aTHX_ PL_no_modify);
6748 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6750 i = PTR2IV(SvRV(sv));
6755 /* Unlike sv_inc we don't have to worry about string-never-numbers
6756 and keeping them magic. But we mustn't warn on punting */
6757 flags = SvFLAGS(sv);
6758 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6759 /* It's publicly an integer, or privately an integer-not-float */
6760 #ifdef PERL_PRESERVE_IVUV
6764 if (SvUVX(sv) == 0) {
6765 (void)SvIOK_only(sv);
6769 (void)SvIOK_only_UV(sv);
6770 SvUV_set(sv, SvUVX(sv) - 1);
6773 if (SvIVX(sv) == IV_MIN)
6774 sv_setnv(sv, (NV)IV_MIN - 1.0);
6776 (void)SvIOK_only(sv);
6777 SvIV_set(sv, SvIVX(sv) - 1);
6782 if (flags & SVp_NOK) {
6783 SvNV_set(sv, SvNVX(sv) - 1.0);
6784 (void)SvNOK_only(sv);
6787 if (!(flags & SVp_POK)) {
6788 if ((flags & SVTYPEMASK) < SVt_PVIV)
6789 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
6791 (void)SvIOK_only(sv);
6794 #ifdef PERL_PRESERVE_IVUV
6796 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6797 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6798 /* Need to try really hard to see if it's an integer.
6799 9.22337203685478e+18 is an integer.
6800 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6801 so $a="9.22337203685478e+18"; $a+0; $a--
6802 needs to be the same as $a="9.22337203685478e+18"; $a--
6809 /* sv_2iv *should* have made this an NV */
6810 if (flags & SVp_NOK) {
6811 (void)SvNOK_only(sv);
6812 SvNV_set(sv, SvNVX(sv) - 1.0);
6815 /* I don't think we can get here. Maybe I should assert this
6816 And if we do get here I suspect that sv_setnv will croak. NWC
6818 #if defined(USE_LONG_DOUBLE)
6819 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",
6820 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6822 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6823 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6827 #endif /* PERL_PRESERVE_IVUV */
6828 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
6832 =for apidoc sv_mortalcopy
6834 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
6835 The new SV is marked as mortal. It will be destroyed "soon", either by an
6836 explicit call to FREETMPS, or by an implicit call at places such as
6837 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
6842 /* Make a string that will exist for the duration of the expression
6843 * evaluation. Actually, it may have to last longer than that, but
6844 * hopefully we won't free it until it has been assigned to a
6845 * permanent location. */
6848 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
6853 sv_setsv(sv,oldstr);
6855 PL_tmps_stack[++PL_tmps_ix] = sv;
6861 =for apidoc sv_newmortal
6863 Creates a new null SV which is mortal. The reference count of the SV is
6864 set to 1. It will be destroyed "soon", either by an explicit call to
6865 FREETMPS, or by an implicit call at places such as statement boundaries.
6866 See also C<sv_mortalcopy> and C<sv_2mortal>.
6872 Perl_sv_newmortal(pTHX)
6877 SvFLAGS(sv) = SVs_TEMP;
6879 PL_tmps_stack[++PL_tmps_ix] = sv;
6884 =for apidoc sv_2mortal
6886 Marks an existing SV as mortal. The SV will be destroyed "soon", either
6887 by an explicit call to FREETMPS, or by an implicit call at places such as
6888 statement boundaries. SvTEMP() is turned on which means that the SV's
6889 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
6890 and C<sv_mortalcopy>.
6896 Perl_sv_2mortal(pTHX_ register SV *sv)
6900 if (SvREADONLY(sv) && SvIMMORTAL(sv))
6903 PL_tmps_stack[++PL_tmps_ix] = sv;
6911 Creates a new SV and copies a string into it. The reference count for the
6912 SV is set to 1. If C<len> is zero, Perl will compute the length using
6913 strlen(). For efficiency, consider using C<newSVpvn> instead.
6919 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
6924 sv_setpvn(sv,s,len ? len : strlen(s));
6929 =for apidoc newSVpvn
6931 Creates a new SV and copies a string into it. The reference count for the
6932 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
6933 string. You are responsible for ensuring that the source string is at least
6934 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
6940 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
6945 sv_setpvn(sv,s,len);
6951 =for apidoc newSVhek
6953 Creates a new SV from the hash key structure. It will generate scalars that
6954 point to the shared string table where possible. Returns a new (undefined)
6955 SV if the hek is NULL.
6961 Perl_newSVhek(pTHX_ const HEK *hek)
6970 if (HEK_LEN(hek) == HEf_SVKEY) {
6971 return newSVsv(*(SV**)HEK_KEY(hek));
6973 const int flags = HEK_FLAGS(hek);
6974 if (flags & HVhek_WASUTF8) {
6976 Andreas would like keys he put in as utf8 to come back as utf8
6978 STRLEN utf8_len = HEK_LEN(hek);
6979 U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
6980 SV *sv = newSVpvn ((char*)as_utf8, utf8_len);
6983 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
6985 } else if (flags & HVhek_REHASH) {
6986 /* We don't have a pointer to the hv, so we have to replicate the
6987 flag into every HEK. This hv is using custom a hasing
6988 algorithm. Hence we can't return a shared string scalar, as
6989 that would contain the (wrong) hash value, and might get passed
6990 into an hv routine with a regular hash */
6992 SV *sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
6997 /* This will be overwhelminly the most common case. */
6998 return newSVpvn_share(HEK_KEY(hek),
6999 (HEK_UTF8(hek) ? -HEK_LEN(hek) : HEK_LEN(hek)),
7005 =for apidoc newSVpvn_share
7007 Creates a new SV with its SvPVX_const pointing to a shared string in the string
7008 table. If the string does not already exist in the table, it is created
7009 first. Turns on READONLY and FAKE. The string's hash is stored in the UV
7010 slot of the SV; if the C<hash> parameter is non-zero, that value is used;
7011 otherwise the hash is computed. The idea here is that as the string table
7012 is used for shared hash keys these strings will have SvPVX_const == HeKEY and
7013 hash lookup will avoid string compare.
7019 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7022 bool is_utf8 = FALSE;
7024 STRLEN tmplen = -len;
7026 /* See the note in hv.c:hv_fetch() --jhi */
7027 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7031 PERL_HASH(hash, src, len);
7033 sv_upgrade(sv, SVt_PVIV);
7034 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7047 #if defined(PERL_IMPLICIT_CONTEXT)
7049 /* pTHX_ magic can't cope with varargs, so this is a no-context
7050 * version of the main function, (which may itself be aliased to us).
7051 * Don't access this version directly.
7055 Perl_newSVpvf_nocontext(const char* pat, ...)
7060 va_start(args, pat);
7061 sv = vnewSVpvf(pat, &args);
7068 =for apidoc newSVpvf
7070 Creates a new SV and initializes it with the string formatted like
7077 Perl_newSVpvf(pTHX_ const char* pat, ...)
7081 va_start(args, pat);
7082 sv = vnewSVpvf(pat, &args);
7087 /* backend for newSVpvf() and newSVpvf_nocontext() */
7090 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7094 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7101 Creates a new SV and copies a floating point value into it.
7102 The reference count for the SV is set to 1.
7108 Perl_newSVnv(pTHX_ NV n)
7120 Creates a new SV and copies an integer into it. The reference count for the
7127 Perl_newSViv(pTHX_ IV i)
7139 Creates a new SV and copies an unsigned integer into it.
7140 The reference count for the SV is set to 1.
7146 Perl_newSVuv(pTHX_ UV u)
7156 =for apidoc newRV_noinc
7158 Creates an RV wrapper for an SV. The reference count for the original
7159 SV is B<not> incremented.
7165 Perl_newRV_noinc(pTHX_ SV *tmpRef)
7170 sv_upgrade(sv, SVt_RV);
7172 SvRV_set(sv, tmpRef);
7177 /* newRV_inc is the official function name to use now.
7178 * newRV_inc is in fact #defined to newRV in sv.h
7182 Perl_newRV(pTHX_ SV *tmpRef)
7184 return newRV_noinc(SvREFCNT_inc(tmpRef));
7190 Creates a new SV which is an exact duplicate of the original SV.
7197 Perl_newSVsv(pTHX_ register SV *old)
7203 if (SvTYPE(old) == SVTYPEMASK) {
7204 if (ckWARN_d(WARN_INTERNAL))
7205 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7209 /* SV_GMAGIC is the default for sv_setv()
7210 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7211 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7212 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7217 =for apidoc sv_reset
7219 Underlying implementation for the C<reset> Perl function.
7220 Note that the perl-level function is vaguely deprecated.
7226 Perl_sv_reset(pTHX_ register char *s, HV *stash)
7229 char todo[PERL_UCHAR_MAX+1];
7234 if (!*s) { /* reset ?? searches */
7235 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
7236 pm->op_pmdynflags &= ~PMdf_USED;
7241 /* reset variables */
7243 if (!HvARRAY(stash))
7246 Zero(todo, 256, char);
7249 I32 i = (unsigned char)*s;
7253 max = (unsigned char)*s++;
7254 for ( ; i <= max; i++) {
7257 for (i = 0; i <= (I32) HvMAX(stash); i++) {
7259 for (entry = HvARRAY(stash)[i];
7261 entry = HeNEXT(entry))
7266 if (!todo[(U8)*HeKEY(entry)])
7268 gv = (GV*)HeVAL(entry);
7270 if (SvTHINKFIRST(sv)) {
7271 if (!SvREADONLY(sv) && SvROK(sv))
7276 if (SvTYPE(sv) >= SVt_PV) {
7278 if (SvPVX_const(sv) != Nullch)
7285 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7288 #ifdef USE_ENVIRON_ARRAY
7290 # ifdef USE_ITHREADS
7291 && PL_curinterp == aTHX
7295 environ[0] = Nullch;
7298 #endif /* !PERL_MICRO */
7308 Using various gambits, try to get an IO from an SV: the IO slot if its a
7309 GV; or the recursive result if we're an RV; or the IO slot of the symbol
7310 named after the PV if we're a string.
7316 Perl_sv_2io(pTHX_ SV *sv)
7322 switch (SvTYPE(sv)) {
7330 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7334 Perl_croak(aTHX_ PL_no_usym, "filehandle");
7336 return sv_2io(SvRV(sv));
7337 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
7343 Perl_croak(aTHX_ "Bad filehandle: %"SVf, sv);
7352 Using various gambits, try to get a CV from an SV; in addition, try if
7353 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7359 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
7366 return *gvp = Nullgv, Nullcv;
7367 switch (SvTYPE(sv)) {
7386 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
7387 tryAMAGICunDEREF(to_cv);
7390 if (SvTYPE(sv) == SVt_PVCV) {
7399 Perl_croak(aTHX_ "Not a subroutine reference");
7404 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
7410 if (lref && !GvCVu(gv)) {
7413 tmpsv = NEWSV(704,0);
7414 gv_efullname3(tmpsv, gv, Nullch);
7415 /* XXX this is probably not what they think they're getting.
7416 * It has the same effect as "sub name;", i.e. just a forward
7418 newSUB(start_subparse(FALSE, 0),
7419 newSVOP(OP_CONST, 0, tmpsv),
7424 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7434 Returns true if the SV has a true value by Perl's rules.
7435 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7436 instead use an in-line version.
7442 Perl_sv_true(pTHX_ register SV *sv)
7447 const register XPV* tXpv;
7448 if ((tXpv = (XPV*)SvANY(sv)) &&
7449 (tXpv->xpv_cur > 1 ||
7450 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
7457 return SvIVX(sv) != 0;
7460 return SvNVX(sv) != 0.0;
7462 return sv_2bool(sv);
7470 A private implementation of the C<SvIVx> macro for compilers which can't
7471 cope with complex macro expressions. Always use the macro instead.
7477 Perl_sv_iv(pTHX_ register SV *sv)
7481 return (IV)SvUVX(sv);
7490 A private implementation of the C<SvUVx> macro for compilers which can't
7491 cope with complex macro expressions. Always use the macro instead.
7497 Perl_sv_uv(pTHX_ register SV *sv)
7502 return (UV)SvIVX(sv);
7510 A private implementation of the C<SvNVx> macro for compilers which can't
7511 cope with complex macro expressions. Always use the macro instead.
7517 Perl_sv_nv(pTHX_ register SV *sv)
7524 /* sv_pv() is now a macro using SvPV_nolen();
7525 * this function provided for binary compatibility only
7529 Perl_sv_pv(pTHX_ SV *sv)
7534 return sv_2pv(sv, 0);
7540 Use the C<SvPV_nolen> macro instead
7544 A private implementation of the C<SvPV> macro for compilers which can't
7545 cope with complex macro expressions. Always use the macro instead.
7551 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
7557 return sv_2pv(sv, lp);
7562 Perl_sv_pvn_nomg(pTHX_ register SV *sv, STRLEN *lp)
7568 return sv_2pv_flags(sv, lp, 0);
7571 /* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags();
7572 * this function provided for binary compatibility only
7576 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
7578 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
7582 =for apidoc sv_pvn_force
7584 Get a sensible string out of the SV somehow.
7585 A private implementation of the C<SvPV_force> macro for compilers which
7586 can't cope with complex macro expressions. Always use the macro instead.
7588 =for apidoc sv_pvn_force_flags
7590 Get a sensible string out of the SV somehow.
7591 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7592 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7593 implemented in terms of this function.
7594 You normally want to use the various wrapper macros instead: see
7595 C<SvPV_force> and C<SvPV_force_nomg>
7601 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7604 if (SvTHINKFIRST(sv) && !SvROK(sv))
7605 sv_force_normal(sv);
7615 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
7617 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
7618 sv_reftype(sv,0), OP_NAME(PL_op));
7620 Perl_croak(aTHX_ "Can't coerce readonly %s to string",
7623 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
7624 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
7628 s = sv_2pv_flags(sv, &len, flags);
7632 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
7635 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
7636 SvGROW(sv, len + 1);
7637 Move(s,SvPVX_const(sv),len,char);
7642 SvPOK_on(sv); /* validate pointer */
7644 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
7645 PTR2UV(sv),SvPVX_const(sv)));
7648 return SvPVX_mutable(sv);
7651 /* sv_pvbyte () is now a macro using Perl_sv_2pv_flags();
7652 * this function provided for binary compatibility only
7656 Perl_sv_pvbyte(pTHX_ SV *sv)
7658 sv_utf8_downgrade(sv,0);
7663 =for apidoc sv_pvbyte
7665 Use C<SvPVbyte_nolen> instead.
7667 =for apidoc sv_pvbyten
7669 A private implementation of the C<SvPVbyte> macro for compilers
7670 which can't cope with complex macro expressions. Always use the macro
7677 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
7679 sv_utf8_downgrade(sv,0);
7680 return sv_pvn(sv,lp);
7684 =for apidoc sv_pvbyten_force
7686 A private implementation of the C<SvPVbytex_force> macro for compilers
7687 which can't cope with complex macro expressions. Always use the macro
7694 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7696 sv_pvn_force(sv,lp);
7697 sv_utf8_downgrade(sv,0);
7702 /* sv_pvutf8 () is now a macro using Perl_sv_2pv_flags();
7703 * this function provided for binary compatibility only
7707 Perl_sv_pvutf8(pTHX_ SV *sv)
7709 sv_utf8_upgrade(sv);
7714 =for apidoc sv_pvutf8
7716 Use the C<SvPVutf8_nolen> macro instead
7718 =for apidoc sv_pvutf8n
7720 A private implementation of the C<SvPVutf8> macro for compilers
7721 which can't cope with complex macro expressions. Always use the macro
7728 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
7730 sv_utf8_upgrade(sv);
7731 return sv_pvn(sv,lp);
7735 =for apidoc sv_pvutf8n_force
7737 A private implementation of the C<SvPVutf8_force> macro for compilers
7738 which can't cope with complex macro expressions. Always use the macro
7745 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7747 sv_pvn_force(sv,lp);
7748 sv_utf8_upgrade(sv);
7754 =for apidoc sv_reftype
7756 Returns a string describing what the SV is a reference to.
7762 Perl_sv_reftype(pTHX_ SV *sv, int ob)
7764 /* The fact that I don't need to downcast to char * everywhere, only in ?:
7765 inside return suggests a const propagation bug in g++. */
7766 if (ob && SvOBJECT(sv)) {
7767 char *name = HvNAME_get(SvSTASH(sv));
7768 return name ? name : (char *) "__ANON__";
7771 switch (SvTYPE(sv)) {
7786 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
7787 /* tied lvalues should appear to be
7788 * scalars for backwards compatitbility */
7789 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
7790 ? "SCALAR" : "LVALUE");
7791 case SVt_PVAV: return "ARRAY";
7792 case SVt_PVHV: return "HASH";
7793 case SVt_PVCV: return "CODE";
7794 case SVt_PVGV: return "GLOB";
7795 case SVt_PVFM: return "FORMAT";
7796 case SVt_PVIO: return "IO";
7797 default: return "UNKNOWN";
7803 =for apidoc sv_isobject
7805 Returns a boolean indicating whether the SV is an RV pointing to a blessed
7806 object. If the SV is not an RV, or if the object is not blessed, then this
7813 Perl_sv_isobject(pTHX_ SV *sv)
7830 Returns a boolean indicating whether the SV is blessed into the specified
7831 class. This does not check for subtypes; use C<sv_derived_from> to verify
7832 an inheritance relationship.
7838 Perl_sv_isa(pTHX_ SV *sv, const char *name)
7850 hvname = HvNAME_get(SvSTASH(sv));
7854 return strEQ(hvname, name);
7860 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7861 it will be upgraded to one. If C<classname> is non-null then the new SV will
7862 be blessed in the specified package. The new SV is returned and its
7863 reference count is 1.
7869 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
7875 SV_CHECK_THINKFIRST(rv);
7878 if (SvTYPE(rv) >= SVt_PVMG) {
7879 const U32 refcnt = SvREFCNT(rv);
7883 SvREFCNT(rv) = refcnt;
7886 if (SvTYPE(rv) < SVt_RV)
7887 sv_upgrade(rv, SVt_RV);
7888 else if (SvTYPE(rv) > SVt_RV) {
7899 HV* stash = gv_stashpv(classname, TRUE);
7900 (void)sv_bless(rv, stash);
7906 =for apidoc sv_setref_pv
7908 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7909 argument will be upgraded to an RV. That RV will be modified to point to
7910 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7911 into the SV. The C<classname> argument indicates the package for the
7912 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7913 will have a reference count of 1, and the RV will be returned.
7915 Do not use with other Perl types such as HV, AV, SV, CV, because those
7916 objects will become corrupted by the pointer copy process.
7918 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7924 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
7927 sv_setsv(rv, &PL_sv_undef);
7931 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
7936 =for apidoc sv_setref_iv
7938 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7939 argument will be upgraded to an RV. That RV will be modified to point to
7940 the new SV. The C<classname> argument indicates the package for the
7941 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7942 will have a reference count of 1, and the RV will be returned.
7948 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
7950 sv_setiv(newSVrv(rv,classname), iv);
7955 =for apidoc sv_setref_uv
7957 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7958 argument will be upgraded to an RV. That RV will be modified to point to
7959 the new SV. The C<classname> argument indicates the package for the
7960 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7961 will have a reference count of 1, and the RV will be returned.
7967 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7969 sv_setuv(newSVrv(rv,classname), uv);
7974 =for apidoc sv_setref_nv
7976 Copies a double into a new SV, optionally blessing the SV. The C<rv>
7977 argument will be upgraded to an RV. That RV will be modified to point to
7978 the new SV. The C<classname> argument indicates the package for the
7979 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7980 will have a reference count of 1, and the RV will be returned.
7986 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
7988 sv_setnv(newSVrv(rv,classname), nv);
7993 =for apidoc sv_setref_pvn
7995 Copies a string into a new SV, optionally blessing the SV. The length of the
7996 string must be specified with C<n>. The C<rv> argument will be upgraded to
7997 an RV. That RV will be modified to point to the new SV. The C<classname>
7998 argument indicates the package for the blessing. Set C<classname> to
7999 C<Nullch> to avoid the blessing. The new SV will have a reference count
8000 of 1, and the RV will be returned.
8002 Note that C<sv_setref_pv> copies the pointer while this copies the string.
8008 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
8010 sv_setpvn(newSVrv(rv,classname), pv, n);
8015 =for apidoc sv_bless
8017 Blesses an SV into a specified package. The SV must be an RV. The package
8018 must be designated by its stash (see C<gv_stashpv()>). The reference count
8019 of the SV is unaffected.
8025 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
8029 Perl_croak(aTHX_ "Can't bless non-reference value");
8031 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8032 if (SvREADONLY(tmpRef))
8033 Perl_croak(aTHX_ PL_no_modify);
8034 if (SvOBJECT(tmpRef)) {
8035 if (SvTYPE(tmpRef) != SVt_PVIO)
8037 SvREFCNT_dec(SvSTASH(tmpRef));
8040 SvOBJECT_on(tmpRef);
8041 if (SvTYPE(tmpRef) != SVt_PVIO)
8043 (void)SvUPGRADE(tmpRef, SVt_PVMG);
8044 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc(stash));
8051 if(SvSMAGICAL(tmpRef))
8052 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8060 /* Downgrades a PVGV to a PVMG.
8064 S_sv_unglob(pTHX_ SV *sv)
8068 assert(SvTYPE(sv) == SVt_PVGV);
8073 SvREFCNT_dec(GvSTASH(sv));
8074 GvSTASH(sv) = Nullhv;
8076 sv_unmagic(sv, PERL_MAGIC_glob);
8077 Safefree(GvNAME(sv));
8080 /* need to keep SvANY(sv) in the right arena */
8081 xpvmg = new_XPVMG();
8082 StructCopy(SvANY(sv), xpvmg, XPVMG);
8083 del_XPVGV(SvANY(sv));
8086 SvFLAGS(sv) &= ~SVTYPEMASK;
8087 SvFLAGS(sv) |= SVt_PVMG;
8091 =for apidoc sv_unref_flags
8093 Unsets the RV status of the SV, and decrements the reference count of
8094 whatever was being referenced by the RV. This can almost be thought of
8095 as a reversal of C<newSVrv>. The C<cflags> argument can contain
8096 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8097 (otherwise the decrementing is conditional on the reference count being
8098 different from one or the reference being a readonly SV).
8105 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
8109 if (SvWEAKREF(sv)) {
8117 /* You can't have a || SvREADONLY(rv) here, as $a = $$a, where $a was
8118 assigned to as BEGIN {$a = \"Foo"} will fail. */
8119 if (SvREFCNT(rv) != 1 || (flags & SV_IMMEDIATE_UNREF))
8121 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8122 sv_2mortal(rv); /* Schedule for freeing later */
8126 =for apidoc sv_unref
8128 Unsets the RV status of the SV, and decrements the reference count of
8129 whatever was being referenced by the RV. This can almost be thought of
8130 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
8131 being zero. See C<SvROK_off>.
8137 Perl_sv_unref(pTHX_ SV *sv)
8139 sv_unref_flags(sv, 0);
8143 =for apidoc sv_taint
8145 Taint an SV. Use C<SvTAINTED_on> instead.
8150 Perl_sv_taint(pTHX_ SV *sv)
8152 sv_magic((sv), Nullsv, PERL_MAGIC_taint, Nullch, 0);
8156 =for apidoc sv_untaint
8158 Untaint an SV. Use C<SvTAINTED_off> instead.
8163 Perl_sv_untaint(pTHX_ SV *sv)
8165 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8166 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8173 =for apidoc sv_tainted
8175 Test an SV for taintedness. Use C<SvTAINTED> instead.
8180 Perl_sv_tainted(pTHX_ SV *sv)
8182 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8183 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8184 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
8191 =for apidoc sv_setpviv
8193 Copies an integer into the given SV, also updating its string value.
8194 Does not handle 'set' magic. See C<sv_setpviv_mg>.
8200 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8202 char buf[TYPE_CHARS(UV)];
8204 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8206 sv_setpvn(sv, ptr, ebuf - ptr);
8210 =for apidoc sv_setpviv_mg
8212 Like C<sv_setpviv>, but also handles 'set' magic.
8218 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8220 char buf[TYPE_CHARS(UV)];
8222 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8224 sv_setpvn(sv, ptr, ebuf - ptr);
8228 #if defined(PERL_IMPLICIT_CONTEXT)
8230 /* pTHX_ magic can't cope with varargs, so this is a no-context
8231 * version of the main function, (which may itself be aliased to us).
8232 * Don't access this version directly.
8236 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8240 va_start(args, pat);
8241 sv_vsetpvf(sv, pat, &args);
8245 /* pTHX_ magic can't cope with varargs, so this is a no-context
8246 * version of the main function, (which may itself be aliased to us).
8247 * Don't access this version directly.
8251 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8255 va_start(args, pat);
8256 sv_vsetpvf_mg(sv, pat, &args);
8262 =for apidoc sv_setpvf
8264 Works like C<sv_catpvf> but copies the text into the SV instead of
8265 appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
8271 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
8274 va_start(args, pat);
8275 sv_vsetpvf(sv, pat, &args);
8280 =for apidoc sv_vsetpvf
8282 Works like C<sv_vcatpvf> but copies the text into the SV instead of
8283 appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8285 Usually used via its frontend C<sv_setpvf>.
8291 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8293 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8297 =for apidoc sv_setpvf_mg
8299 Like C<sv_setpvf>, but also handles 'set' magic.
8305 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8308 va_start(args, pat);
8309 sv_vsetpvf_mg(sv, pat, &args);
8314 =for apidoc sv_vsetpvf_mg
8316 Like C<sv_vsetpvf>, but also handles 'set' magic.
8318 Usually used via its frontend C<sv_setpvf_mg>.
8324 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8326 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8330 #if defined(PERL_IMPLICIT_CONTEXT)
8332 /* pTHX_ magic can't cope with varargs, so this is a no-context
8333 * version of the main function, (which may itself be aliased to us).
8334 * Don't access this version directly.
8338 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8342 va_start(args, pat);
8343 sv_vcatpvf(sv, pat, &args);
8347 /* pTHX_ magic can't cope with varargs, so this is a no-context
8348 * version of the main function, (which may itself be aliased to us).
8349 * Don't access this version directly.
8353 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8357 va_start(args, pat);
8358 sv_vcatpvf_mg(sv, pat, &args);
8364 =for apidoc sv_catpvf
8366 Processes its arguments like C<sprintf> and appends the formatted
8367 output to an SV. If the appended data contains "wide" characters
8368 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8369 and characters >255 formatted with %c), the original SV might get
8370 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
8371 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8372 valid UTF-8; if the original SV was bytes, the pattern should be too.
8377 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
8380 va_start(args, pat);
8381 sv_vcatpvf(sv, pat, &args);
8386 =for apidoc sv_vcatpvf
8388 Processes its arguments like C<vsprintf> and appends the formatted output
8389 to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8391 Usually used via its frontend C<sv_catpvf>.
8397 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8399 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8403 =for apidoc sv_catpvf_mg
8405 Like C<sv_catpvf>, but also handles 'set' magic.
8411 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8414 va_start(args, pat);
8415 sv_vcatpvf_mg(sv, pat, &args);
8420 =for apidoc sv_vcatpvf_mg
8422 Like C<sv_vcatpvf>, but also handles 'set' magic.
8424 Usually used via its frontend C<sv_catpvf_mg>.
8430 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8432 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8437 =for apidoc sv_vsetpvfn
8439 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
8442 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
8448 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8450 sv_setpvn(sv, "", 0);
8451 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8454 /* private function for use in sv_vcatpvfn via the EXPECT_NUMBER macro */
8457 S_expect_number(pTHX_ char** pattern)
8460 switch (**pattern) {
8461 case '1': case '2': case '3':
8462 case '4': case '5': case '6':
8463 case '7': case '8': case '9':
8464 while (isDIGIT(**pattern))
8465 var = var * 10 + (*(*pattern)++ - '0');
8469 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
8472 F0convert(NV nv, char *endbuf, STRLEN *len)
8474 const int neg = nv < 0;
8483 if (uv & 1 && uv == nv)
8484 uv--; /* Round to even */
8486 const unsigned dig = uv % 10;
8499 =for apidoc sv_vcatpvfn
8501 Processes its arguments like C<vsprintf> and appends the formatted output
8502 to an SV. Uses an array of SVs if the C style variable argument list is
8503 missing (NULL). When running with taint checks enabled, indicates via
8504 C<maybe_tainted> if results are untrustworthy (often due to the use of
8507 XXX Except that it maybe_tainted is never assigned to.
8509 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
8514 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8517 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8524 static char nullstr[] = "(null)";
8526 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8527 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
8529 /* Times 4: a decimal digit takes more than 3 binary digits.
8530 * NV_DIG: mantissa takes than many decimal digits.
8531 * Plus 32: Playing safe. */
8532 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8533 /* large enough for "%#.#f" --chip */
8534 /* what about long double NVs? --jhi */
8536 /* no matter what, this is a string now */
8537 (void)SvPV_force(sv, origlen);
8539 /* special-case "", "%s", and "%_" */
8542 if (patlen == 2 && pat[0] == '%') {
8546 const char *s = va_arg(*args, char*);
8547 sv_catpv(sv, s ? s : nullstr);
8549 else if (svix < svmax) {
8550 sv_catsv(sv, *svargs);
8551 if (DO_UTF8(*svargs))
8557 argsv = va_arg(*args, SV*);
8558 sv_catsv(sv, argsv);
8563 /* See comment on '_' below */
8568 #ifndef USE_LONG_DOUBLE
8569 /* special-case "%.<number>[gf]" */
8570 if ( patlen <= 5 && pat[0] == '%' && pat[1] == '.'
8571 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8572 unsigned digits = 0;
8576 while (*pp >= '0' && *pp <= '9')
8577 digits = 10 * digits + (*pp++ - '0');
8578 if (pp - pat == (int)patlen - 1) {
8582 nv = (NV)va_arg(*args, double);
8583 else if (svix < svmax)
8588 /* Add check for digits != 0 because it seems that some
8589 gconverts are buggy in this case, and we don't yet have
8590 a Configure test for this. */
8591 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8592 /* 0, point, slack */
8593 Gconvert(nv, (int)digits, 0, ebuf);
8595 if (*ebuf) /* May return an empty string for digits==0 */
8598 } else if (!digits) {
8601 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8602 sv_catpvn(sv, p, l);
8608 #endif /* !USE_LONG_DOUBLE */
8610 if (!args && svix < svmax && DO_UTF8(*svargs))
8613 patend = (char*)pat + patlen;
8614 for (p = (char*)pat; p < patend; p = q) {
8617 bool vectorize = FALSE;
8618 bool vectorarg = FALSE;
8619 bool vec_utf8 = FALSE;
8625 bool has_precis = FALSE;
8628 bool is_utf8 = FALSE; /* is this item utf8? */
8629 #ifdef HAS_LDBL_SPRINTF_BUG
8630 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
8631 with sfio - Allen <allens@cpan.org> */
8632 bool fix_ldbl_sprintf_bug = FALSE;
8636 U8 utf8buf[UTF8_MAXBYTES+1];
8637 STRLEN esignlen = 0;
8639 const char *eptr = Nullch;
8642 const U8 *vecstr = Null(U8*);
8649 /* we need a long double target in case HAS_LONG_DOUBLE but
8652 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
8660 const char *dotstr = ".";
8661 STRLEN dotstrlen = 1;
8662 I32 efix = 0; /* explicit format parameter index */
8663 I32 ewix = 0; /* explicit width index */
8664 I32 epix = 0; /* explicit precision index */
8665 I32 evix = 0; /* explicit vector index */
8666 bool asterisk = FALSE;
8668 /* echo everything up to the next format specification */
8669 for (q = p; q < patend && *q != '%'; ++q) ;
8671 if (has_utf8 && !pat_utf8)
8672 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8674 sv_catpvn(sv, p, q - p);
8681 We allow format specification elements in this order:
8682 \d+\$ explicit format parameter index
8684 v|\*(\d+\$)?v vector with optional (optionally specified) arg
8685 0 flag (as above): repeated to allow "v02"
8686 \d+|\*(\d+\$)? width using optional (optionally specified) arg
8687 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8689 [%bcdefginopsux_DFOUX] format (mandatory)
8691 if (EXPECT_NUMBER(q, width)) {
8732 if (EXPECT_NUMBER(q, ewix))
8741 if ((vectorarg = asterisk)) {
8753 EXPECT_NUMBER(q, width);
8756 if ((*q == 'p') && left) {
8757 vectorize = (width == 1);
8763 vecsv = va_arg(*args, SV*);
8765 vecsv = (evix ? evix <= svmax : svix < svmax) ?
8766 svargs[evix ? evix-1 : svix++] : &PL_sv_undef;
8767 dotstr = SvPV_const(vecsv, dotstrlen);
8772 vecsv = va_arg(*args, SV*);
8773 vecstr = (U8*)SvPV_const(vecsv,veclen);
8774 vec_utf8 = DO_UTF8(vecsv);
8776 else if (efix ? efix <= svmax : svix < svmax) {
8777 vecsv = svargs[efix ? efix-1 : svix++];
8778 vecstr = (U8*)SvPV_const(vecsv,veclen);
8779 vec_utf8 = DO_UTF8(vecsv);
8789 i = va_arg(*args, int);
8791 i = (ewix ? ewix <= svmax : svix < svmax) ?
8792 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8794 width = (i < 0) ? -i : i;
8804 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
8806 /* XXX: todo, support specified precision parameter */
8810 i = va_arg(*args, int);
8812 i = (ewix ? ewix <= svmax : svix < svmax)
8813 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8814 precis = (i < 0) ? 0 : i;
8819 precis = precis * 10 + (*q++ - '0');
8828 case 'I': /* Ix, I32x, and I64x */
8830 if (q[1] == '6' && q[2] == '4') {
8836 if (q[1] == '3' && q[2] == '2') {
8846 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8857 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8858 if (*(q + 1) == 'l') { /* lld, llf */
8883 argsv = (efix ? efix <= svmax : svix < svmax) ?
8884 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
8891 uv = (args && !vectorize) ? va_arg(*args, int) : SvIVx(argsv);
8893 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
8895 eptr = (char*)utf8buf;
8896 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
8907 if (args && !vectorize) {
8908 eptr = va_arg(*args, char*);
8910 #ifdef MACOS_TRADITIONAL
8911 /* On MacOS, %#s format is used for Pascal strings */
8916 elen = strlen(eptr);
8919 elen = sizeof nullstr - 1;
8923 eptr = SvPVx_const(argsv, elen);
8924 if (DO_UTF8(argsv)) {
8925 if (has_precis && precis < elen) {
8927 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
8930 if (width) { /* fudge width (can't fudge elen) */
8931 width += elen - sv_len_utf8(argsv);
8943 * The "%_" hack might have to be changed someday,
8944 * if ISO or ANSI decide to use '_' for something.
8945 * So we keep it hidden from users' code.
8947 if (!args || vectorize)
8949 argsv = va_arg(*args, SV*);
8950 eptr = SvPVx(argsv, elen);
8956 if (has_precis && elen > precis)
8967 goto format_sv; /* %-p -> %_ */
8970 goto format_vd; /* %-1p -> %vd */
8975 goto format_sv; /* %-Np -> %.N_ */
8978 if (alt || vectorize)
8980 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
9001 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9010 esignbuf[esignlen++] = plus;
9014 case 'h': iv = (short)va_arg(*args, int); break;
9015 case 'l': iv = va_arg(*args, long); break;
9016 case 'V': iv = va_arg(*args, IV); break;
9017 default: iv = va_arg(*args, int); break;
9019 case 'q': iv = va_arg(*args, Quad_t); break;
9024 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
9026 case 'h': iv = (short)tiv; break;
9027 case 'l': iv = (long)tiv; break;
9029 default: iv = tiv; break;
9031 case 'q': iv = (Quad_t)tiv; break;
9035 if ( !vectorize ) /* we already set uv above */
9040 esignbuf[esignlen++] = plus;
9044 esignbuf[esignlen++] = '-';
9087 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9098 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
9099 case 'l': uv = va_arg(*args, unsigned long); break;
9100 case 'V': uv = va_arg(*args, UV); break;
9101 default: uv = va_arg(*args, unsigned); break;
9103 case 'q': uv = va_arg(*args, Uquad_t); break;
9108 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
9110 case 'h': uv = (unsigned short)tuv; break;
9111 case 'l': uv = (unsigned long)tuv; break;
9113 default: uv = tuv; break;
9115 case 'q': uv = (Uquad_t)tuv; break;
9122 char *ptr = ebuf + sizeof ebuf;
9128 p = (char*)((c == 'X')
9129 ? "0123456789ABCDEF" : "0123456789abcdef");
9135 esignbuf[esignlen++] = '0';
9136 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9144 if (alt && *ptr != '0')
9153 esignbuf[esignlen++] = '0';
9154 esignbuf[esignlen++] = 'b';
9157 default: /* it had better be ten or less */
9158 #if defined(PERL_Y2KWARN)
9159 if (ckWARN(WARN_Y2K)) {
9161 const char *const s = SvPV_const(sv,n);
9162 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
9163 && (n == 2 || !isDIGIT(s[n-3])))
9165 Perl_warner(aTHX_ packWARN(WARN_Y2K),
9166 "Possible Y2K bug: %%%c %s",
9167 c, "format string following '19'");
9174 } while (uv /= base);
9177 elen = (ebuf + sizeof ebuf) - ptr;
9181 zeros = precis - elen;
9182 else if (precis == 0 && elen == 1 && *ptr == '0')
9188 /* FLOATING POINT */
9191 c = 'f'; /* maybe %F isn't supported here */
9197 /* This is evil, but floating point is even more evil */
9199 /* for SV-style calling, we can only get NV
9200 for C-style calling, we assume %f is double;
9201 for simplicity we allow any of %Lf, %llf, %qf for long double
9205 #if defined(USE_LONG_DOUBLE)
9209 /* [perl #20339] - we should accept and ignore %lf rather than die */
9213 #if defined(USE_LONG_DOUBLE)
9214 intsize = args ? 0 : 'q';
9218 #if defined(HAS_LONG_DOUBLE)
9227 /* now we need (long double) if intsize == 'q', else (double) */
9228 nv = (args && !vectorize) ?
9229 #if LONG_DOUBLESIZE > DOUBLESIZE
9231 va_arg(*args, long double) :
9232 va_arg(*args, double)
9234 va_arg(*args, double)
9240 if (c != 'e' && c != 'E') {
9242 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9243 will cast our (long double) to (double) */
9244 (void)Perl_frexp(nv, &i);
9245 if (i == PERL_INT_MIN)
9246 Perl_die(aTHX_ "panic: frexp");
9248 need = BIT_DIGITS(i);
9250 need += has_precis ? precis : 6; /* known default */
9255 #ifdef HAS_LDBL_SPRINTF_BUG
9256 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9257 with sfio - Allen <allens@cpan.org> */
9260 # define MY_DBL_MAX DBL_MAX
9261 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9262 # if DOUBLESIZE >= 8
9263 # define MY_DBL_MAX 1.7976931348623157E+308L
9265 # define MY_DBL_MAX 3.40282347E+38L
9269 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9270 # define MY_DBL_MAX_BUG 1L
9272 # define MY_DBL_MAX_BUG MY_DBL_MAX
9276 # define MY_DBL_MIN DBL_MIN
9277 # else /* XXX guessing! -Allen */
9278 # if DOUBLESIZE >= 8
9279 # define MY_DBL_MIN 2.2250738585072014E-308L
9281 # define MY_DBL_MIN 1.17549435E-38L
9285 if ((intsize == 'q') && (c == 'f') &&
9286 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9288 /* it's going to be short enough that
9289 * long double precision is not needed */
9291 if ((nv <= 0L) && (nv >= -0L))
9292 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9294 /* would use Perl_fp_class as a double-check but not
9295 * functional on IRIX - see perl.h comments */
9297 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9298 /* It's within the range that a double can represent */
9299 #if defined(DBL_MAX) && !defined(DBL_MIN)
9300 if ((nv >= ((long double)1/DBL_MAX)) ||
9301 (nv <= (-(long double)1/DBL_MAX)))
9303 fix_ldbl_sprintf_bug = TRUE;
9306 if (fix_ldbl_sprintf_bug == TRUE) {
9316 # undef MY_DBL_MAX_BUG
9319 #endif /* HAS_LDBL_SPRINTF_BUG */
9321 need += 20; /* fudge factor */
9322 if (PL_efloatsize < need) {
9323 Safefree(PL_efloatbuf);
9324 PL_efloatsize = need + 20; /* more fudge */
9325 New(906, PL_efloatbuf, PL_efloatsize, char);
9326 PL_efloatbuf[0] = '\0';
9329 if ( !(width || left || plus || alt) && fill != '0'
9330 && has_precis && intsize != 'q' ) { /* Shortcuts */
9331 /* See earlier comment about buggy Gconvert when digits,
9333 if ( c == 'g' && precis) {
9334 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9335 if (*PL_efloatbuf) /* May return an empty string for digits==0 */
9336 goto float_converted;
9337 } else if ( c == 'f' && !precis) {
9338 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9343 char *ptr = ebuf + sizeof ebuf;
9346 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9347 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9348 if (intsize == 'q') {
9349 /* Copy the one or more characters in a long double
9350 * format before the 'base' ([efgEFG]) character to
9351 * the format string. */
9352 static char const prifldbl[] = PERL_PRIfldbl;
9353 char const *p = prifldbl + sizeof(prifldbl) - 3;
9354 while (p >= prifldbl) { *--ptr = *p--; }
9359 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9364 do { *--ptr = '0' + (base % 10); } while (base /= 10);
9376 /* No taint. Otherwise we are in the strange situation
9377 * where printf() taints but print($float) doesn't.
9379 #if defined(HAS_LONG_DOUBLE)
9381 (void)sprintf(PL_efloatbuf, ptr, nv);
9383 (void)sprintf(PL_efloatbuf, ptr, (double)nv);
9385 (void)sprintf(PL_efloatbuf, ptr, nv);
9389 eptr = PL_efloatbuf;
9390 elen = strlen(PL_efloatbuf);
9396 i = SvCUR(sv) - origlen;
9397 if (args && !vectorize) {
9399 case 'h': *(va_arg(*args, short*)) = i; break;
9400 default: *(va_arg(*args, int*)) = i; break;
9401 case 'l': *(va_arg(*args, long*)) = i; break;
9402 case 'V': *(va_arg(*args, IV*)) = i; break;
9404 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9409 sv_setuv_mg(argsv, (UV)i);
9411 continue; /* not "break" */
9417 if (!args && ckWARN(WARN_PRINTF) &&
9418 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
9419 SV *msg = sv_newmortal();
9420 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9421 (PL_op->op_type == OP_PRTF) ? "" : "s");
9424 Perl_sv_catpvf(aTHX_ msg,
9425 "\"%%%c\"", c & 0xFF);
9427 Perl_sv_catpvf(aTHX_ msg,
9428 "\"%%\\%03"UVof"\"",
9431 sv_catpv(msg, "end of string");
9432 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, msg); /* yes, this is reentrant */
9435 /* output mangled stuff ... */
9441 /* ... right here, because formatting flags should not apply */
9442 SvGROW(sv, SvCUR(sv) + elen + 1);
9444 Copy(eptr, p, elen, char);
9447 SvCUR_set(sv, p - SvPVX_const(sv));
9449 continue; /* not "break" */
9452 /* calculate width before utf8_upgrade changes it */
9453 have = esignlen + zeros + elen;
9455 if (is_utf8 != has_utf8) {
9458 sv_utf8_upgrade(sv);
9461 SV *nsv = sv_2mortal(newSVpvn(eptr, elen));
9462 sv_utf8_upgrade(nsv);
9463 eptr = SvPVX_const(nsv);
9466 SvGROW(sv, SvCUR(sv) + elen + 1);
9470 /* Use memchr() instead of strchr(), as eptr is not guaranteed */
9471 /* to point to a null-terminated string. */
9472 if (left && ckWARN(WARN_PRINTF) && memchr(eptr, '\n', elen) &&
9473 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF))
9474 Perl_warner(aTHX_ packWARN(WARN_PRINTF),
9475 "Newline in left-justified string for %sprintf",
9476 (PL_op->op_type == OP_PRTF) ? "" : "s");
9478 need = (have > width ? have : width);
9481 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9483 if (esignlen && fill == '0') {
9484 for (i = 0; i < (int)esignlen; i++)
9488 memset(p, fill, gap);
9491 if (esignlen && fill != '0') {
9492 for (i = 0; i < (int)esignlen; i++)
9496 for (i = zeros; i; i--)
9500 Copy(eptr, p, elen, char);
9504 memset(p, ' ', gap);
9509 Copy(dotstr, p, dotstrlen, char);
9513 vectorize = FALSE; /* done iterating over vecstr */
9520 SvCUR_set(sv, p - SvPVX_const(sv));
9528 /* =========================================================================
9530 =head1 Cloning an interpreter
9532 All the macros and functions in this section are for the private use of
9533 the main function, perl_clone().
9535 The foo_dup() functions make an exact copy of an existing foo thinngy.
9536 During the course of a cloning, a hash table is used to map old addresses
9537 to new addresses. The table is created and manipulated with the
9538 ptr_table_* functions.
9542 ============================================================================*/
9545 #if defined(USE_ITHREADS)
9547 #if defined(USE_5005THREADS)
9548 # include "error: USE_5005THREADS and USE_ITHREADS are incompatible"
9551 #ifndef GpREFCNT_inc
9552 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9556 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
9557 #define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
9558 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9559 #define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
9560 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9561 #define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
9562 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9563 #define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
9564 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9565 #define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
9566 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9567 #define SAVEPV(p) (p ? savepv(p) : Nullch)
9568 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
9571 /* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
9572 regcomp.c. AMS 20010712 */
9575 Perl_re_dup(pTHX_ REGEXP *r, CLONE_PARAMS *param)
9579 struct reg_substr_datum *s;
9582 return (REGEXP *)NULL;
9584 if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
9587 len = r->offsets[0];
9588 npar = r->nparens+1;
9590 Newc(0, ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
9591 Copy(r->program, ret->program, len+1, regnode);
9593 New(0, ret->startp, npar, I32);
9594 Copy(r->startp, ret->startp, npar, I32);
9595 New(0, ret->endp, npar, I32);
9596 Copy(r->startp, ret->startp, npar, I32);
9598 New(0, ret->substrs, 1, struct reg_substr_data);
9599 for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
9600 s->min_offset = r->substrs->data[i].min_offset;
9601 s->max_offset = r->substrs->data[i].max_offset;
9602 s->substr = sv_dup_inc(r->substrs->data[i].substr, param);
9603 s->utf8_substr = sv_dup_inc(r->substrs->data[i].utf8_substr, param);
9606 ret->regstclass = NULL;
9609 const int count = r->data->count;
9611 Newc(0, d, sizeof(struct reg_data) + count*sizeof(void *),
9612 char, struct reg_data);
9613 New(0, d->what, count, U8);
9616 for (i = 0; i < count; i++) {
9617 d->what[i] = r->data->what[i];
9618 switch (d->what[i]) {
9620 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
9623 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
9626 /* This is cheating. */
9627 New(0, d->data[i], 1, struct regnode_charclass_class);
9628 StructCopy(r->data->data[i], d->data[i],
9629 struct regnode_charclass_class);
9630 ret->regstclass = (regnode*)d->data[i];
9633 /* Compiled op trees are readonly, and can thus be
9634 shared without duplication. */
9636 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
9640 d->data[i] = r->data->data[i];
9650 New(0, ret->offsets, 2*len+1, U32);
9651 Copy(r->offsets, ret->offsets, 2*len+1, U32);
9653 ret->precomp = SAVEPVN(r->precomp, r->prelen);
9654 ret->refcnt = r->refcnt;
9655 ret->minlen = r->minlen;
9656 ret->prelen = r->prelen;
9657 ret->nparens = r->nparens;
9658 ret->lastparen = r->lastparen;
9659 ret->lastcloseparen = r->lastcloseparen;
9660 ret->reganch = r->reganch;
9662 ret->sublen = r->sublen;
9664 if (RX_MATCH_COPIED(ret))
9665 ret->subbeg = SAVEPVN(r->subbeg, r->sublen);
9667 ret->subbeg = Nullch;
9669 ptr_table_store(PL_ptr_table, r, ret);
9673 /* duplicate a file handle */
9676 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
9682 return (PerlIO*)NULL;
9684 /* look for it in the table first */
9685 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9689 /* create anew and remember what it is */
9690 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
9691 ptr_table_store(PL_ptr_table, fp, ret);
9695 /* duplicate a directory handle */
9698 Perl_dirp_dup(pTHX_ DIR *dp)
9706 /* duplicate a typeglob */
9709 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
9714 /* look for it in the table first */
9715 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9719 /* create anew and remember what it is */
9720 Newz(0, ret, 1, GP);
9721 ptr_table_store(PL_ptr_table, gp, ret);
9724 ret->gp_refcnt = 0; /* must be before any other dups! */
9725 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
9726 ret->gp_io = io_dup_inc(gp->gp_io, param);
9727 ret->gp_form = cv_dup_inc(gp->gp_form, param);
9728 ret->gp_av = av_dup_inc(gp->gp_av, param);
9729 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
9730 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9731 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
9732 ret->gp_cvgen = gp->gp_cvgen;
9733 ret->gp_flags = gp->gp_flags;
9734 ret->gp_line = gp->gp_line;
9735 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
9739 /* duplicate a chain of magic */
9742 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
9744 MAGIC *mgprev = (MAGIC*)NULL;
9747 return (MAGIC*)NULL;
9748 /* look for it in the table first */
9749 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9753 for (; mg; mg = mg->mg_moremagic) {
9755 Newz(0, nmg, 1, MAGIC);
9757 mgprev->mg_moremagic = nmg;
9760 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
9761 nmg->mg_private = mg->mg_private;
9762 nmg->mg_type = mg->mg_type;
9763 nmg->mg_flags = mg->mg_flags;
9764 if (mg->mg_type == PERL_MAGIC_qr) {
9765 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
9767 else if(mg->mg_type == PERL_MAGIC_backref) {
9768 const AV * const av = (AV*) mg->mg_obj;
9771 (void)SvREFCNT_inc(nmg->mg_obj = (SV*)newAV());
9773 for (i = AvFILLp(av); i >= 0; i--) {
9774 if (!svp[i]) continue;
9775 av_push((AV*)nmg->mg_obj,sv_dup(svp[i],param));
9779 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
9780 ? sv_dup_inc(mg->mg_obj, param)
9781 : sv_dup(mg->mg_obj, param);
9783 nmg->mg_len = mg->mg_len;
9784 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
9785 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
9786 if (mg->mg_len > 0) {
9787 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
9788 if (mg->mg_type == PERL_MAGIC_overload_table &&
9789 AMT_AMAGIC((AMT*)mg->mg_ptr))
9791 AMT *amtp = (AMT*)mg->mg_ptr;
9792 AMT *namtp = (AMT*)nmg->mg_ptr;
9794 for (i = 1; i < NofAMmeth; i++) {
9795 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
9799 else if (mg->mg_len == HEf_SVKEY)
9800 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
9802 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9803 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9810 /* create a new pointer-mapping table */
9813 Perl_ptr_table_new(pTHX)
9816 Newz(0, tbl, 1, PTR_TBL_t);
9819 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
9824 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 3)
9826 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 2)
9834 struct ptr_tbl_ent* pte;
9835 struct ptr_tbl_ent* pteend;
9837 New(54, ptr, PERL_ARENA_SIZE/sizeof(XPV), XPV);
9838 ptr->xpv_pv = (char*)PL_pte_arenaroot;
9839 PL_pte_arenaroot = ptr;
9841 pte = (struct ptr_tbl_ent*)ptr;
9842 pteend = &pte[PERL_ARENA_SIZE / sizeof(struct ptr_tbl_ent) - 1];
9843 PL_pte_root = ++pte;
9844 while (pte < pteend) {
9845 pte->next = pte + 1;
9851 STATIC struct ptr_tbl_ent*
9854 struct ptr_tbl_ent* pte;
9858 PL_pte_root = pte->next;
9863 S_del_pte(pTHX_ struct ptr_tbl_ent*p)
9865 p->next = PL_pte_root;
9869 /* map an existing pointer using a table */
9872 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
9874 PTR_TBL_ENT_t *tblent;
9875 const UV hash = PTR_TABLE_HASH(sv);
9877 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9878 for (; tblent; tblent = tblent->next) {
9879 if (tblent->oldval == sv)
9880 return tblent->newval;
9885 /* add a new entry to a pointer-mapping table */
9888 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
9890 PTR_TBL_ENT_t *tblent, **otblent;
9891 /* XXX this may be pessimal on platforms where pointers aren't good
9892 * hash values e.g. if they grow faster in the most significant
9894 const UV hash = PTR_TABLE_HASH(oldv);
9898 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
9899 for (tblent = *otblent; tblent; empty=0, tblent = tblent->next) {
9900 if (tblent->oldval == oldv) {
9901 tblent->newval = newv;
9905 tblent = S_new_pte(aTHX);
9906 tblent->oldval = oldv;
9907 tblent->newval = newv;
9908 tblent->next = *otblent;
9911 if (!empty && tbl->tbl_items > tbl->tbl_max)
9912 ptr_table_split(tbl);
9915 /* double the hash bucket size of an existing ptr table */
9918 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9920 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
9921 const UV oldsize = tbl->tbl_max + 1;
9922 UV newsize = oldsize * 2;
9925 Renew(ary, newsize, PTR_TBL_ENT_t*);
9926 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9927 tbl->tbl_max = --newsize;
9929 for (i=0; i < oldsize; i++, ary++) {
9930 PTR_TBL_ENT_t **curentp, **entp, *ent;
9933 curentp = ary + oldsize;
9934 for (entp = ary, ent = *ary; ent; ent = *entp) {
9935 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
9937 ent->next = *curentp;
9947 /* remove all the entries from a ptr table */
9950 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9952 register PTR_TBL_ENT_t **array;
9953 register PTR_TBL_ENT_t *entry;
9957 if (!tbl || !tbl->tbl_items) {
9961 array = tbl->tbl_ary;
9967 PTR_TBL_ENT_t *oentry = entry;
9968 entry = entry->next;
9969 S_del_pte(aTHX_ oentry);
9972 if (++riter > max) {
9975 entry = array[riter];
9982 /* clear and free a ptr table */
9985 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9990 ptr_table_clear(tbl);
9991 Safefree(tbl->tbl_ary);
9999 /* attempt to make everything in the typeglob readonly */
10002 S_gv_share(pTHX_ SV *sstr, CLONE_PARAMS *param)
10004 GV *gv = (GV*)sstr;
10005 SV *sv = ¶m->proto_perl->Isv_no; /* just need SvREADONLY-ness */
10007 if (GvIO(gv) || GvFORM(gv)) {
10008 GvUNIQUE_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
10010 else if (!GvCV(gv)) {
10011 GvCV(gv) = (CV*)sv;
10014 /* CvPADLISTs cannot be shared */
10015 if (!SvREADONLY(GvCV(gv)) && !CvXSUB(GvCV(gv))) {
10020 if (!GvUNIQUE(gv)) {
10022 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
10023 HvNAME_get(GvSTASH(gv)), GvNAME(gv));
10029 * write attempts will die with
10030 * "Modification of a read-only value attempted"
10036 SvREADONLY_on(GvSV(gv));
10040 GvAV(gv) = (AV*)sv;
10043 SvREADONLY_on(GvAV(gv));
10047 GvHV(gv) = (HV*)sv;
10050 SvREADONLY_on(GvHV(gv));
10053 return sstr; /* he_dup() will SvREFCNT_inc() */
10056 /* duplicate an SV of any type (including AV, HV etc) */
10059 Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param)
10062 SvRV_set(dstr, SvWEAKREF(sstr)
10063 ? sv_dup(SvRV(sstr), param)
10064 : sv_dup_inc(SvRV(sstr), param));
10067 else if (SvPVX_const(sstr)) {
10068 /* Has something there */
10070 /* Normal PV - clone whole allocated space */
10071 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
10074 /* Special case - not normally malloced for some reason */
10075 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10076 /* A "shared" PV - clone it as unshared string */
10077 if(SvPADTMP(sstr)) {
10078 /* However, some of them live in the pad
10079 and they should not have these flags
10082 SvPV_set(dstr, sharepvn(SvPVX_const(sstr), SvCUR(sstr),
10084 SvUV_set(dstr, SvUVX(sstr));
10087 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvCUR(sstr)));
10089 SvREADONLY_off(dstr);
10093 /* Some other special case - random pointer */
10094 SvPV_set(dstr, SvPVX(sstr));
10099 /* Copy the Null */
10100 if (SvTYPE(dstr) == SVt_RV)
10101 SvRV_set(dstr, NULL);
10108 Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param)
10112 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
10114 /* look for it in the table first */
10115 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
10119 if(param->flags & CLONEf_JOIN_IN) {
10120 /** We are joining here so we don't want do clone
10121 something that is bad **/
10122 const char *hvname;
10124 if(SvTYPE(sstr) == SVt_PVHV &&
10125 (hvname = HvNAME_get(sstr))) {
10126 /** don't clone stashes if they already exist **/
10127 HV* old_stash = gv_stashpv(hvname,0);
10128 return (SV*) old_stash;
10132 /* create anew and remember what it is */
10134 ptr_table_store(PL_ptr_table, sstr, dstr);
10137 SvFLAGS(dstr) = SvFLAGS(sstr);
10138 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
10139 SvREFCNT(dstr) = 0; /* must be before any other dups! */
10142 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
10143 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10144 PL_watch_pvx, SvPVX_const(sstr));
10147 /* don't clone objects whose class has asked us not to */
10148 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10149 SvFLAGS(dstr) &= ~SVTYPEMASK;
10150 SvOBJECT_off(dstr);
10154 switch (SvTYPE(sstr)) {
10156 SvANY(dstr) = NULL;
10159 SvANY(dstr) = new_XIV();
10160 SvIV_set(dstr, SvIVX(sstr));
10163 SvANY(dstr) = new_XNV();
10164 SvNV_set(dstr, SvNVX(sstr));
10167 SvANY(dstr) = new_XRV();
10168 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10171 SvANY(dstr) = new_XPV();
10172 SvCUR_set(dstr, SvCUR(sstr));
10173 SvLEN_set(dstr, SvLEN(sstr));
10174 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10177 SvANY(dstr) = new_XPVIV();
10178 SvCUR_set(dstr, SvCUR(sstr));
10179 SvLEN_set(dstr, SvLEN(sstr));
10180 SvIV_set(dstr, SvIVX(sstr));
10181 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10184 SvANY(dstr) = new_XPVNV();
10185 SvCUR_set(dstr, SvCUR(sstr));
10186 SvLEN_set(dstr, SvLEN(sstr));
10187 SvIV_set(dstr, SvIVX(sstr));
10188 SvNV_set(dstr, SvNVX(sstr));
10189 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10192 SvANY(dstr) = new_XPVMG();
10193 SvCUR_set(dstr, SvCUR(sstr));
10194 SvLEN_set(dstr, SvLEN(sstr));
10195 SvIV_set(dstr, SvIVX(sstr));
10196 SvNV_set(dstr, SvNVX(sstr));
10197 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10198 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10199 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10202 SvANY(dstr) = new_XPVBM();
10203 SvCUR_set(dstr, SvCUR(sstr));
10204 SvLEN_set(dstr, SvLEN(sstr));
10205 SvIV_set(dstr, SvIVX(sstr));
10206 SvNV_set(dstr, SvNVX(sstr));
10207 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10208 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10209 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10210 BmRARE(dstr) = BmRARE(sstr);
10211 BmUSEFUL(dstr) = BmUSEFUL(sstr);
10212 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
10215 SvANY(dstr) = new_XPVLV();
10216 SvCUR_set(dstr, SvCUR(sstr));
10217 SvLEN_set(dstr, SvLEN(sstr));
10218 SvIV_set(dstr, SvIVX(sstr));
10219 SvNV_set(dstr, SvNVX(sstr));
10220 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10221 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10222 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10223 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
10224 LvTARGLEN(dstr) = LvTARGLEN(sstr);
10225 if (LvTYPE(sstr) == 't') /* for tie: unrefcnted fake (SV**) */
10226 LvTARG(dstr) = dstr;
10227 else if (LvTYPE(sstr) == 'T') /* for tie: fake HE */
10228 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(sstr), 0, param);
10230 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr), param);
10231 LvTYPE(dstr) = LvTYPE(sstr);
10234 if (GvUNIQUE((GV*)sstr)) {
10236 if ((share = gv_share(sstr, param))) {
10239 ptr_table_store(PL_ptr_table, sstr, dstr);
10241 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
10242 HvNAME_get(GvSTASH(share)), GvNAME(share));
10247 SvANY(dstr) = new_XPVGV();
10248 SvCUR_set(dstr, SvCUR(sstr));
10249 SvLEN_set(dstr, SvLEN(sstr));
10250 SvIV_set(dstr, SvIVX(sstr));
10251 SvNV_set(dstr, SvNVX(sstr));
10252 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10253 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10254 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10255 GvNAMELEN(dstr) = GvNAMELEN(sstr);
10256 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
10257 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr), param);
10258 GvFLAGS(dstr) = GvFLAGS(sstr);
10259 GvGP(dstr) = gp_dup(GvGP(sstr), param);
10260 (void)GpREFCNT_inc(GvGP(dstr));
10263 SvANY(dstr) = new_XPVIO();
10264 SvCUR_set(dstr, SvCUR(sstr));
10265 SvLEN_set(dstr, SvLEN(sstr));
10266 SvIV_set(dstr, SvIVX(sstr));
10267 SvNV_set(dstr, SvNVX(sstr));
10268 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10269 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10270 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10271 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr), param);
10272 if (IoOFP(sstr) == IoIFP(sstr))
10273 IoOFP(dstr) = IoIFP(dstr);
10275 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr), param);
10276 /* PL_rsfp_filters entries have fake IoDIRP() */
10277 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
10278 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
10280 IoDIRP(dstr) = IoDIRP(sstr);
10281 IoLINES(dstr) = IoLINES(sstr);
10282 IoPAGE(dstr) = IoPAGE(sstr);
10283 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
10284 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
10285 if(IoFLAGS(sstr) & IOf_FAKE_DIRP) {
10286 /* I have no idea why fake dirp (rsfps)
10287 should be treaded differently but otherwise
10288 we end up with leaks -- sky*/
10289 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(sstr), param);
10290 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(sstr), param);
10291 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(sstr), param);
10293 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr), param);
10294 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr), param);
10295 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr), param);
10297 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
10298 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
10299 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
10300 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
10301 IoTYPE(dstr) = IoTYPE(sstr);
10302 IoFLAGS(dstr) = IoFLAGS(sstr);
10305 SvANY(dstr) = new_XPVAV();
10306 SvCUR_set(dstr, SvCUR(sstr));
10307 SvLEN_set(dstr, SvLEN(sstr));
10308 SvIV_set(dstr, SvIVX(sstr));
10309 SvNV_set(dstr, SvNVX(sstr));
10310 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10311 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10312 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param);
10313 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
10314 if (AvARRAY((AV*)sstr)) {
10315 SV **dst_ary, **src_ary;
10316 SSize_t items = AvFILLp((AV*)sstr) + 1;
10318 src_ary = AvARRAY((AV*)sstr);
10319 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
10320 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10321 SvPV_set(dstr, (char*)dst_ary);
10322 AvALLOC((AV*)dstr) = dst_ary;
10323 if (AvREAL((AV*)sstr)) {
10324 while (items-- > 0)
10325 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10328 while (items-- > 0)
10329 *dst_ary++ = sv_dup(*src_ary++, param);
10331 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10332 while (items-- > 0) {
10333 *dst_ary++ = &PL_sv_undef;
10337 SvPV_set(dstr, Nullch);
10338 AvALLOC((AV*)dstr) = (SV**)NULL;
10342 SvANY(dstr) = new_XPVHV();
10343 SvCUR_set(dstr, SvCUR(sstr));
10344 SvLEN_set(dstr, SvLEN(sstr));
10345 HvTOTALKEYS(dstr) = HvTOTALKEYS(sstr);
10346 SvNV_set(dstr, SvNVX(sstr));
10347 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10348 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10349 HvRITER_set((HV*)dstr, HvRITER_get((HV*)sstr));
10350 if (HvARRAY((HV*)sstr)) {
10351 bool sharekeys = !!HvSHAREKEYS(sstr);
10353 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
10354 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
10355 New(0, dxhv->xhv_array,
10356 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
10357 while (i <= sxhv->xhv_max) {
10358 HE *source = HvARRAY(sstr)[i];
10360 = source ? he_dup(source, sharekeys, param) : 0;
10363 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter,
10364 (bool)!!HvSHAREKEYS(sstr), param);
10367 SvPV_set(dstr, Nullch);
10368 HvEITER_set((HV*)dstr, (HE*)NULL);
10370 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
10371 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
10372 /* Record stashes for possible cloning in Perl_clone(). */
10373 if(HvNAME((HV*)dstr))
10374 av_push(param->stashes, dstr);
10377 SvANY(dstr) = new_XPVFM();
10378 FmLINES(dstr) = FmLINES(sstr);
10382 SvANY(dstr) = new_XPVCV();
10384 SvCUR_set(dstr, SvCUR(sstr));
10385 SvLEN_set(dstr, SvLEN(sstr));
10386 SvIV_set(dstr, SvIVX(sstr));
10387 SvNV_set(dstr, SvNVX(sstr));
10388 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10389 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10390 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10391 CvSTASH(dstr) = hv_dup(CvSTASH(sstr), param); /* NOTE: not refcounted */
10392 CvSTART(dstr) = CvSTART(sstr);
10394 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
10396 CvXSUB(dstr) = CvXSUB(sstr);
10397 CvXSUBANY(dstr) = CvXSUBANY(sstr);
10398 if (CvCONST(sstr)) {
10399 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(sstr)) ?
10400 SvREFCNT_inc(CvXSUBANY(sstr).any_ptr) :
10401 sv_dup_inc(CvXSUBANY(sstr).any_ptr, param);
10403 /* don't dup if copying back - CvGV isn't refcounted, so the
10404 * duped GV may never be freed. A bit of a hack! DAPM */
10405 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
10406 Nullgv : gv_dup(CvGV(sstr), param) ;
10407 if (param->flags & CLONEf_COPY_STACKS) {
10408 CvDEPTH(dstr) = CvDEPTH(sstr);
10412 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10413 CvOUTSIDE_SEQ(dstr) = CvOUTSIDE_SEQ(sstr);
10415 CvWEAKOUTSIDE(sstr)
10416 ? cv_dup( CvOUTSIDE(sstr), param)
10417 : cv_dup_inc(CvOUTSIDE(sstr), param);
10418 CvFLAGS(dstr) = CvFLAGS(sstr);
10419 CvFILE(dstr) = CvXSUB(sstr) ? CvFILE(sstr) : SAVEPV(CvFILE(sstr));
10422 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
10426 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10432 /* duplicate a context */
10435 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10437 PERL_CONTEXT *ncxs;
10440 return (PERL_CONTEXT*)NULL;
10442 /* look for it in the table first */
10443 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10447 /* create anew and remember what it is */
10448 Newz(56, ncxs, max + 1, PERL_CONTEXT);
10449 ptr_table_store(PL_ptr_table, cxs, ncxs);
10452 PERL_CONTEXT *cx = &cxs[ix];
10453 PERL_CONTEXT *ncx = &ncxs[ix];
10454 ncx->cx_type = cx->cx_type;
10455 if (CxTYPE(cx) == CXt_SUBST) {
10456 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10459 ncx->blk_oldsp = cx->blk_oldsp;
10460 ncx->blk_oldcop = cx->blk_oldcop;
10461 ncx->blk_oldretsp = cx->blk_oldretsp;
10462 ncx->blk_oldmarksp = cx->blk_oldmarksp;
10463 ncx->blk_oldscopesp = cx->blk_oldscopesp;
10464 ncx->blk_oldpm = cx->blk_oldpm;
10465 ncx->blk_gimme = cx->blk_gimme;
10466 switch (CxTYPE(cx)) {
10468 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
10469 ? cv_dup_inc(cx->blk_sub.cv, param)
10470 : cv_dup(cx->blk_sub.cv,param));
10471 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
10472 ? av_dup_inc(cx->blk_sub.argarray, param)
10474 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
10475 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
10476 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10477 ncx->blk_sub.lval = cx->blk_sub.lval;
10480 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10481 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
10482 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
10483 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
10484 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
10487 ncx->blk_loop.label = cx->blk_loop.label;
10488 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
10489 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
10490 ncx->blk_loop.next_op = cx->blk_loop.next_op;
10491 ncx->blk_loop.last_op = cx->blk_loop.last_op;
10492 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
10493 ? cx->blk_loop.iterdata
10494 : gv_dup((GV*)cx->blk_loop.iterdata, param));
10495 ncx->blk_loop.oldcomppad
10496 = (PAD*)ptr_table_fetch(PL_ptr_table,
10497 cx->blk_loop.oldcomppad);
10498 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
10499 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
10500 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
10501 ncx->blk_loop.iterix = cx->blk_loop.iterix;
10502 ncx->blk_loop.itermax = cx->blk_loop.itermax;
10505 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
10506 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
10507 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
10508 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10520 /* duplicate a stack info structure */
10523 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
10528 return (PERL_SI*)NULL;
10530 /* look for it in the table first */
10531 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10535 /* create anew and remember what it is */
10536 Newz(56, nsi, 1, PERL_SI);
10537 ptr_table_store(PL_ptr_table, si, nsi);
10539 nsi->si_stack = av_dup_inc(si->si_stack, param);
10540 nsi->si_cxix = si->si_cxix;
10541 nsi->si_cxmax = si->si_cxmax;
10542 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
10543 nsi->si_type = si->si_type;
10544 nsi->si_prev = si_dup(si->si_prev, param);
10545 nsi->si_next = si_dup(si->si_next, param);
10546 nsi->si_markoff = si->si_markoff;
10551 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10552 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
10553 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10554 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
10555 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10556 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
10557 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10558 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
10559 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10560 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10561 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10562 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10563 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10564 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10567 #define pv_dup_inc(p) SAVEPV(p)
10568 #define pv_dup(p) SAVEPV(p)
10569 #define svp_dup_inc(p,pp) any_dup(p,pp)
10571 /* map any object to the new equivent - either something in the
10572 * ptr table, or something in the interpreter structure
10576 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
10581 return (void*)NULL;
10583 /* look for it in the table first */
10584 ret = ptr_table_fetch(PL_ptr_table, v);
10588 /* see if it is part of the interpreter structure */
10589 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
10590 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
10598 /* duplicate the save stack */
10601 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
10603 ANY *ss = proto_perl->Tsavestack;
10604 I32 ix = proto_perl->Tsavestack_ix;
10605 I32 max = proto_perl->Tsavestack_max;
10617 void (*dptr) (void*);
10618 void (*dxptr) (pTHX_ void*);
10621 Newz(54, nss, max, ANY);
10624 I32 i = POPINT(ss,ix);
10625 TOPINT(nss,ix) = i;
10627 case SAVEt_ITEM: /* normal string */
10628 sv = (SV*)POPPTR(ss,ix);
10629 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10630 sv = (SV*)POPPTR(ss,ix);
10631 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10633 case SAVEt_SV: /* scalar reference */
10634 sv = (SV*)POPPTR(ss,ix);
10635 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10636 gv = (GV*)POPPTR(ss,ix);
10637 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10639 case SAVEt_GENERIC_PVREF: /* generic char* */
10640 c = (char*)POPPTR(ss,ix);
10641 TOPPTR(nss,ix) = pv_dup(c);
10642 ptr = POPPTR(ss,ix);
10643 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10645 case SAVEt_SHARED_PVREF: /* char* in shared space */
10646 c = (char*)POPPTR(ss,ix);
10647 TOPPTR(nss,ix) = savesharedpv(c);
10648 ptr = POPPTR(ss,ix);
10649 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10651 case SAVEt_GENERIC_SVREF: /* generic sv */
10652 case SAVEt_SVREF: /* scalar reference */
10653 sv = (SV*)POPPTR(ss,ix);
10654 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10655 ptr = POPPTR(ss,ix);
10656 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10658 case SAVEt_AV: /* array reference */
10659 av = (AV*)POPPTR(ss,ix);
10660 TOPPTR(nss,ix) = av_dup_inc(av, param);
10661 gv = (GV*)POPPTR(ss,ix);
10662 TOPPTR(nss,ix) = gv_dup(gv, param);
10664 case SAVEt_HV: /* hash reference */
10665 hv = (HV*)POPPTR(ss,ix);
10666 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10667 gv = (GV*)POPPTR(ss,ix);
10668 TOPPTR(nss,ix) = gv_dup(gv, param);
10670 case SAVEt_INT: /* int reference */
10671 ptr = POPPTR(ss,ix);
10672 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10673 intval = (int)POPINT(ss,ix);
10674 TOPINT(nss,ix) = intval;
10676 case SAVEt_LONG: /* long reference */
10677 ptr = POPPTR(ss,ix);
10678 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10679 longval = (long)POPLONG(ss,ix);
10680 TOPLONG(nss,ix) = longval;
10682 case SAVEt_I32: /* I32 reference */
10683 case SAVEt_I16: /* I16 reference */
10684 case SAVEt_I8: /* I8 reference */
10685 ptr = POPPTR(ss,ix);
10686 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10688 TOPINT(nss,ix) = i;
10690 case SAVEt_IV: /* IV reference */
10691 ptr = POPPTR(ss,ix);
10692 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10694 TOPIV(nss,ix) = iv;
10696 case SAVEt_SPTR: /* SV* reference */
10697 ptr = POPPTR(ss,ix);
10698 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10699 sv = (SV*)POPPTR(ss,ix);
10700 TOPPTR(nss,ix) = sv_dup(sv, param);
10702 case SAVEt_VPTR: /* random* reference */
10703 ptr = POPPTR(ss,ix);
10704 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10705 ptr = POPPTR(ss,ix);
10706 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10708 case SAVEt_PPTR: /* char* reference */
10709 ptr = POPPTR(ss,ix);
10710 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10711 c = (char*)POPPTR(ss,ix);
10712 TOPPTR(nss,ix) = pv_dup(c);
10714 case SAVEt_HPTR: /* HV* reference */
10715 ptr = POPPTR(ss,ix);
10716 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10717 hv = (HV*)POPPTR(ss,ix);
10718 TOPPTR(nss,ix) = hv_dup(hv, param);
10720 case SAVEt_APTR: /* AV* reference */
10721 ptr = POPPTR(ss,ix);
10722 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10723 av = (AV*)POPPTR(ss,ix);
10724 TOPPTR(nss,ix) = av_dup(av, param);
10727 gv = (GV*)POPPTR(ss,ix);
10728 TOPPTR(nss,ix) = gv_dup(gv, param);
10730 case SAVEt_GP: /* scalar reference */
10731 gp = (GP*)POPPTR(ss,ix);
10732 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
10733 (void)GpREFCNT_inc(gp);
10734 gv = (GV*)POPPTR(ss,ix);
10735 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10736 c = (char*)POPPTR(ss,ix);
10737 TOPPTR(nss,ix) = pv_dup(c);
10739 TOPIV(nss,ix) = iv;
10741 TOPIV(nss,ix) = iv;
10744 case SAVEt_MORTALIZESV:
10745 sv = (SV*)POPPTR(ss,ix);
10746 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10749 ptr = POPPTR(ss,ix);
10750 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10751 /* these are assumed to be refcounted properly */
10752 switch (((OP*)ptr)->op_type) {
10754 case OP_LEAVESUBLV:
10758 case OP_LEAVEWRITE:
10759 TOPPTR(nss,ix) = ptr;
10764 TOPPTR(nss,ix) = Nullop;
10769 TOPPTR(nss,ix) = Nullop;
10772 c = (char*)POPPTR(ss,ix);
10773 TOPPTR(nss,ix) = pv_dup_inc(c);
10775 case SAVEt_CLEARSV:
10776 longval = POPLONG(ss,ix);
10777 TOPLONG(nss,ix) = longval;
10780 hv = (HV*)POPPTR(ss,ix);
10781 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10782 c = (char*)POPPTR(ss,ix);
10783 TOPPTR(nss,ix) = pv_dup_inc(c);
10785 TOPINT(nss,ix) = i;
10787 case SAVEt_DESTRUCTOR:
10788 ptr = POPPTR(ss,ix);
10789 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10790 dptr = POPDPTR(ss,ix);
10791 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
10792 any_dup(FPTR2DPTR(void *, dptr),
10795 case SAVEt_DESTRUCTOR_X:
10796 ptr = POPPTR(ss,ix);
10797 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10798 dxptr = POPDXPTR(ss,ix);
10799 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
10800 any_dup(FPTR2DPTR(void *, dxptr),
10803 case SAVEt_REGCONTEXT:
10806 TOPINT(nss,ix) = i;
10809 case SAVEt_STACK_POS: /* Position on Perl stack */
10811 TOPINT(nss,ix) = i;
10813 case SAVEt_AELEM: /* array element */
10814 sv = (SV*)POPPTR(ss,ix);
10815 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10817 TOPINT(nss,ix) = i;
10818 av = (AV*)POPPTR(ss,ix);
10819 TOPPTR(nss,ix) = av_dup_inc(av, param);
10821 case SAVEt_HELEM: /* hash element */
10822 sv = (SV*)POPPTR(ss,ix);
10823 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10824 sv = (SV*)POPPTR(ss,ix);
10825 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10826 hv = (HV*)POPPTR(ss,ix);
10827 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10830 ptr = POPPTR(ss,ix);
10831 TOPPTR(nss,ix) = ptr;
10835 TOPINT(nss,ix) = i;
10837 case SAVEt_COMPPAD:
10838 av = (AV*)POPPTR(ss,ix);
10839 TOPPTR(nss,ix) = av_dup(av, param);
10842 longval = (long)POPLONG(ss,ix);
10843 TOPLONG(nss,ix) = longval;
10844 ptr = POPPTR(ss,ix);
10845 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10846 sv = (SV*)POPPTR(ss,ix);
10847 TOPPTR(nss,ix) = sv_dup(sv, param);
10850 ptr = POPPTR(ss,ix);
10851 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10852 longval = (long)POPBOOL(ss,ix);
10853 TOPBOOL(nss,ix) = (bool)longval;
10856 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
10864 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
10865 * flag to the result. This is done for each stash before cloning starts,
10866 * so we know which stashes want their objects cloned */
10869 do_mark_cloneable_stash(pTHX_ SV *sv)
10871 const char *hvname = HvNAME_get((HV*)sv);
10873 GV* cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
10874 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
10875 if (cloner && GvCV(cloner)) {
10882 XPUSHs(sv_2mortal(newSVpv(hvname, 0)));
10884 call_sv((SV*)GvCV(cloner), G_SCALAR);
10891 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
10899 =for apidoc perl_clone
10901 Create and return a new interpreter by cloning the current one.
10903 perl_clone takes these flags as parameters:
10905 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10906 without it we only clone the data and zero the stacks,
10907 with it we copy the stacks and the new perl interpreter is
10908 ready to run at the exact same point as the previous one.
10909 The pseudo-fork code uses COPY_STACKS while the
10910 threads->new doesn't.
10912 CLONEf_KEEP_PTR_TABLE
10913 perl_clone keeps a ptr_table with the pointer of the old
10914 variable as a key and the new variable as a value,
10915 this allows it to check if something has been cloned and not
10916 clone it again but rather just use the value and increase the
10917 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10918 the ptr_table using the function
10919 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10920 reason to keep it around is if you want to dup some of your own
10921 variable who are outside the graph perl scans, example of this
10922 code is in threads.xs create
10925 This is a win32 thing, it is ignored on unix, it tells perls
10926 win32host code (which is c++) to clone itself, this is needed on
10927 win32 if you want to run two threads at the same time,
10928 if you just want to do some stuff in a separate perl interpreter
10929 and then throw it away and return to the original one,
10930 you don't need to do anything.
10935 /* XXX the above needs expanding by someone who actually understands it ! */
10936 EXTERN_C PerlInterpreter *
10937 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10940 perl_clone(PerlInterpreter *proto_perl, UV flags)
10942 #ifdef PERL_IMPLICIT_SYS
10944 /* perlhost.h so we need to call into it
10945 to clone the host, CPerlHost should have a c interface, sky */
10947 if (flags & CLONEf_CLONE_HOST) {
10948 return perl_clone_host(proto_perl,flags);
10950 return perl_clone_using(proto_perl, flags,
10952 proto_perl->IMemShared,
10953 proto_perl->IMemParse,
10955 proto_perl->IStdIO,
10959 proto_perl->IProc);
10963 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10964 struct IPerlMem* ipM, struct IPerlMem* ipMS,
10965 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10966 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10967 struct IPerlDir* ipD, struct IPerlSock* ipS,
10968 struct IPerlProc* ipP)
10970 /* XXX many of the string copies here can be optimized if they're
10971 * constants; they need to be allocated as common memory and just
10972 * their pointers copied. */
10975 CLONE_PARAMS clone_params;
10976 CLONE_PARAMS* param = &clone_params;
10978 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
10979 /* for each stash, determine whether its objects should be cloned */
10980 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10981 PERL_SET_THX(my_perl);
10984 Poison(my_perl, 1, PerlInterpreter);
10986 PL_curcop = (COP *)Nullop;
10990 PL_savestack_ix = 0;
10991 PL_savestack_max = -1;
10993 PL_sig_pending = 0;
10994 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10995 # else /* !DEBUGGING */
10996 Zero(my_perl, 1, PerlInterpreter);
10997 # endif /* DEBUGGING */
10999 /* host pointers */
11001 PL_MemShared = ipMS;
11002 PL_MemParse = ipMP;
11009 #else /* !PERL_IMPLICIT_SYS */
11011 CLONE_PARAMS clone_params;
11012 CLONE_PARAMS* param = &clone_params;
11013 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
11014 /* for each stash, determine whether its objects should be cloned */
11015 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11016 PERL_SET_THX(my_perl);
11019 Poison(my_perl, 1, PerlInterpreter);
11021 PL_curcop = (COP *)Nullop;
11025 PL_savestack_ix = 0;
11026 PL_savestack_max = -1;
11028 PL_sig_pending = 0;
11029 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11030 # else /* !DEBUGGING */
11031 Zero(my_perl, 1, PerlInterpreter);
11032 # endif /* DEBUGGING */
11033 #endif /* PERL_IMPLICIT_SYS */
11034 param->flags = flags;
11035 param->proto_perl = proto_perl;
11038 PL_xiv_arenaroot = NULL;
11039 PL_xiv_root = NULL;
11040 PL_xnv_arenaroot = NULL;
11041 PL_xnv_root = NULL;
11042 PL_xrv_arenaroot = NULL;
11043 PL_xrv_root = NULL;
11044 PL_xpv_arenaroot = NULL;
11045 PL_xpv_root = NULL;
11046 PL_xpviv_arenaroot = NULL;
11047 PL_xpviv_root = NULL;
11048 PL_xpvnv_arenaroot = NULL;
11049 PL_xpvnv_root = NULL;
11050 PL_xpvcv_arenaroot = NULL;
11051 PL_xpvcv_root = NULL;
11052 PL_xpvav_arenaroot = NULL;
11053 PL_xpvav_root = NULL;
11054 PL_xpvhv_arenaroot = NULL;
11055 PL_xpvhv_root = NULL;
11056 PL_xpvmg_arenaroot = NULL;
11057 PL_xpvmg_root = NULL;
11058 PL_xpvgv_arenaroot = NULL;
11059 PL_xpvgv_root = NULL;
11060 PL_xpvlv_arenaroot = NULL;
11061 PL_xpvlv_root = NULL;
11062 PL_xpvbm_arenaroot = NULL;
11063 PL_xpvbm_root = NULL;
11064 PL_he_arenaroot = NULL;
11066 #if defined(USE_ITHREADS)
11067 PL_pte_arenaroot = NULL;
11068 PL_pte_root = NULL;
11070 PL_nice_chunk = NULL;
11071 PL_nice_chunk_size = 0;
11073 PL_sv_objcount = 0;
11074 PL_sv_root = Nullsv;
11075 PL_sv_arenaroot = Nullsv;
11077 PL_debug = proto_perl->Idebug;
11079 PL_hash_seed = proto_perl->Ihash_seed;
11080 PL_rehash_seed = proto_perl->Irehash_seed;
11082 #ifdef USE_REENTRANT_API
11083 /* XXX: things like -Dm will segfault here in perlio, but doing
11084 * PERL_SET_CONTEXT(proto_perl);
11085 * breaks too many other things
11087 Perl_reentrant_init(aTHX);
11090 /* create SV map for pointer relocation */
11091 PL_ptr_table = ptr_table_new();
11093 /* initialize these special pointers as early as possible */
11094 SvANY(&PL_sv_undef) = NULL;
11095 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
11096 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
11097 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11099 SvANY(&PL_sv_no) = new_XPVNV();
11100 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
11101 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11102 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11103 SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
11104 SvCUR_set(&PL_sv_no, 0);
11105 SvLEN_set(&PL_sv_no, 1);
11106 SvIV_set(&PL_sv_no, 0);
11107 SvNV_set(&PL_sv_no, 0);
11108 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
11110 SvANY(&PL_sv_yes) = new_XPVNV();
11111 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
11112 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11113 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11114 SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
11115 SvCUR_set(&PL_sv_yes, 1);
11116 SvLEN_set(&PL_sv_yes, 2);
11117 SvIV_set(&PL_sv_yes, 1);
11118 SvNV_set(&PL_sv_yes, 1);
11119 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11121 /* create (a non-shared!) shared string table */
11122 PL_strtab = newHV();
11123 HvSHAREKEYS_off(PL_strtab);
11124 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11125 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11127 PL_compiling = proto_perl->Icompiling;
11129 /* These two PVs will be free'd special way so must set them same way op.c does */
11130 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11131 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11133 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
11134 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11136 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11137 if (!specialWARN(PL_compiling.cop_warnings))
11138 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
11139 if (!specialCopIO(PL_compiling.cop_io))
11140 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
11141 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
11143 /* pseudo environmental stuff */
11144 PL_origargc = proto_perl->Iorigargc;
11145 PL_origargv = proto_perl->Iorigargv;
11147 param->stashes = newAV(); /* Setup array of objects to call clone on */
11149 #ifdef PERLIO_LAYERS
11150 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11151 PerlIO_clone(aTHX_ proto_perl, param);
11154 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
11155 PL_incgv = gv_dup(proto_perl->Iincgv, param);
11156 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
11157 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
11158 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
11159 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
11162 PL_minus_c = proto_perl->Iminus_c;
11163 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
11164 PL_localpatches = proto_perl->Ilocalpatches;
11165 PL_splitstr = proto_perl->Isplitstr;
11166 PL_preprocess = proto_perl->Ipreprocess;
11167 PL_minus_n = proto_perl->Iminus_n;
11168 PL_minus_p = proto_perl->Iminus_p;
11169 PL_minus_l = proto_perl->Iminus_l;
11170 PL_minus_a = proto_perl->Iminus_a;
11171 PL_minus_F = proto_perl->Iminus_F;
11172 PL_doswitches = proto_perl->Idoswitches;
11173 PL_dowarn = proto_perl->Idowarn;
11174 PL_doextract = proto_perl->Idoextract;
11175 PL_sawampersand = proto_perl->Isawampersand;
11176 PL_unsafe = proto_perl->Iunsafe;
11177 PL_inplace = SAVEPV(proto_perl->Iinplace);
11178 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
11179 PL_perldb = proto_perl->Iperldb;
11180 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11181 PL_exit_flags = proto_perl->Iexit_flags;
11183 /* magical thingies */
11184 /* XXX time(&PL_basetime) when asked for? */
11185 PL_basetime = proto_perl->Ibasetime;
11186 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
11188 PL_maxsysfd = proto_perl->Imaxsysfd;
11189 PL_multiline = proto_perl->Imultiline;
11190 PL_statusvalue = proto_perl->Istatusvalue;
11192 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
11194 PL_encoding = sv_dup(proto_perl->Iencoding, param);
11196 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
11197 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
11198 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
11200 /* Clone the regex array */
11201 PL_regex_padav = newAV();
11203 const I32 len = av_len((AV*)proto_perl->Iregex_padav);
11204 SV** regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
11206 av_push(PL_regex_padav,
11207 sv_dup_inc(regexen[0],param));
11208 for(i = 1; i <= len; i++) {
11209 if(SvREPADTMP(regexen[i])) {
11210 av_push(PL_regex_padav, sv_dup_inc(regexen[i], param));
11212 av_push(PL_regex_padav,
11214 newSViv(PTR2IV(re_dup(INT2PTR(REGEXP *,
11215 SvIVX(regexen[i])), param)))
11220 PL_regex_pad = AvARRAY(PL_regex_padav);
11222 /* shortcuts to various I/O objects */
11223 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11224 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11225 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11226 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11227 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11228 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
11230 /* shortcuts to regexp stuff */
11231 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
11233 /* shortcuts to misc objects */
11234 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
11236 /* shortcuts to debugging objects */
11237 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
11238 PL_DBline = gv_dup(proto_perl->IDBline, param);
11239 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
11240 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
11241 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
11242 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
11243 PL_lineary = av_dup(proto_perl->Ilineary, param);
11244 PL_dbargs = av_dup(proto_perl->Idbargs, param);
11246 /* symbol tables */
11247 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
11248 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
11249 PL_nullstash = hv_dup(proto_perl->Inullstash, param);
11250 PL_debstash = hv_dup(proto_perl->Idebstash, param);
11251 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
11252 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
11254 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
11255 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
11256 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
11257 PL_endav = av_dup_inc(proto_perl->Iendav, param);
11258 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
11259 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
11261 PL_sub_generation = proto_perl->Isub_generation;
11263 /* funky return mechanisms */
11264 PL_forkprocess = proto_perl->Iforkprocess;
11266 /* subprocess state */
11267 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
11269 /* internal state */
11270 PL_tainting = proto_perl->Itainting;
11271 PL_taint_warn = proto_perl->Itaint_warn;
11272 PL_maxo = proto_perl->Imaxo;
11273 if (proto_perl->Iop_mask)
11274 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11276 PL_op_mask = Nullch;
11278 /* current interpreter roots */
11279 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
11280 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
11281 PL_main_start = proto_perl->Imain_start;
11282 PL_eval_root = proto_perl->Ieval_root;
11283 PL_eval_start = proto_perl->Ieval_start;
11285 /* runtime control stuff */
11286 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11287 PL_copline = proto_perl->Icopline;
11289 PL_filemode = proto_perl->Ifilemode;
11290 PL_lastfd = proto_perl->Ilastfd;
11291 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11294 PL_gensym = proto_perl->Igensym;
11295 PL_preambled = proto_perl->Ipreambled;
11296 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11297 PL_laststatval = proto_perl->Ilaststatval;
11298 PL_laststype = proto_perl->Ilaststype;
11299 PL_mess_sv = Nullsv;
11301 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11302 PL_ofmt = SAVEPV(proto_perl->Iofmt);
11304 /* interpreter atexit processing */
11305 PL_exitlistlen = proto_perl->Iexitlistlen;
11306 if (PL_exitlistlen) {
11307 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11308 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11311 PL_exitlist = (PerlExitListEntry*)NULL;
11312 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
11313 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
11314 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11316 PL_profiledata = NULL;
11317 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
11318 /* PL_rsfp_filters entries have fake IoDIRP() */
11319 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
11321 PL_compcv = cv_dup(proto_perl->Icompcv, param);
11323 PAD_CLONE_VARS(proto_perl, param);
11325 #ifdef HAVE_INTERP_INTERN
11326 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11329 /* more statics moved here */
11330 PL_generation = proto_perl->Igeneration;
11331 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
11333 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11334 PL_in_clean_all = proto_perl->Iin_clean_all;
11336 PL_uid = proto_perl->Iuid;
11337 PL_euid = proto_perl->Ieuid;
11338 PL_gid = proto_perl->Igid;
11339 PL_egid = proto_perl->Iegid;
11340 PL_nomemok = proto_perl->Inomemok;
11341 PL_an = proto_perl->Ian;
11342 PL_op_seqmax = proto_perl->Iop_seqmax;
11343 PL_evalseq = proto_perl->Ievalseq;
11344 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11345 PL_origalen = proto_perl->Iorigalen;
11346 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11347 PL_osname = SAVEPV(proto_perl->Iosname);
11348 PL_sh_path_compat = proto_perl->Ish_path_compat; /* XXX never deallocated */
11349 PL_sighandlerp = proto_perl->Isighandlerp;
11352 PL_runops = proto_perl->Irunops;
11354 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
11357 PL_cshlen = proto_perl->Icshlen;
11358 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
11361 PL_lex_state = proto_perl->Ilex_state;
11362 PL_lex_defer = proto_perl->Ilex_defer;
11363 PL_lex_expect = proto_perl->Ilex_expect;
11364 PL_lex_formbrack = proto_perl->Ilex_formbrack;
11365 PL_lex_dojoin = proto_perl->Ilex_dojoin;
11366 PL_lex_starts = proto_perl->Ilex_starts;
11367 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff, param);
11368 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl, param);
11369 PL_lex_op = proto_perl->Ilex_op;
11370 PL_lex_inpat = proto_perl->Ilex_inpat;
11371 PL_lex_inwhat = proto_perl->Ilex_inwhat;
11372 PL_lex_brackets = proto_perl->Ilex_brackets;
11373 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
11374 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
11375 PL_lex_casemods = proto_perl->Ilex_casemods;
11376 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
11377 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
11379 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
11380 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
11381 PL_nexttoke = proto_perl->Inexttoke;
11383 /* XXX This is probably masking the deeper issue of why
11384 * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
11385 * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
11386 * (A little debugging with a watchpoint on it may help.)
11388 if (SvANY(proto_perl->Ilinestr)) {
11389 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
11390 i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr);
11391 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11392 i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr);
11393 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11394 i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr);
11395 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11396 i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr);
11397 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11400 PL_linestr = NEWSV(65,79);
11401 sv_upgrade(PL_linestr,SVt_PVIV);
11402 sv_setpvn(PL_linestr,"",0);
11403 PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
11405 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
11406 PL_pending_ident = proto_perl->Ipending_ident;
11407 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
11409 PL_expect = proto_perl->Iexpect;
11411 PL_multi_start = proto_perl->Imulti_start;
11412 PL_multi_end = proto_perl->Imulti_end;
11413 PL_multi_open = proto_perl->Imulti_open;
11414 PL_multi_close = proto_perl->Imulti_close;
11416 PL_error_count = proto_perl->Ierror_count;
11417 PL_subline = proto_perl->Isubline;
11418 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
11420 /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
11421 if (SvANY(proto_perl->Ilinestr)) {
11422 i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr);
11423 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11424 i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr);
11425 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11426 PL_last_lop_op = proto_perl->Ilast_lop_op;
11429 PL_last_uni = SvPVX(PL_linestr);
11430 PL_last_lop = SvPVX(PL_linestr);
11431 PL_last_lop_op = 0;
11433 PL_in_my = proto_perl->Iin_my;
11434 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
11436 PL_cryptseen = proto_perl->Icryptseen;
11439 PL_hints = proto_perl->Ihints;
11441 PL_amagic_generation = proto_perl->Iamagic_generation;
11443 #ifdef USE_LOCALE_COLLATE
11444 PL_collation_ix = proto_perl->Icollation_ix;
11445 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11446 PL_collation_standard = proto_perl->Icollation_standard;
11447 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11448 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11449 #endif /* USE_LOCALE_COLLATE */
11451 #ifdef USE_LOCALE_NUMERIC
11452 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11453 PL_numeric_standard = proto_perl->Inumeric_standard;
11454 PL_numeric_local = proto_perl->Inumeric_local;
11455 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11456 #endif /* !USE_LOCALE_NUMERIC */
11458 /* utf8 character classes */
11459 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11460 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11461 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11462 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11463 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11464 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11465 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11466 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11467 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11468 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11469 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11470 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11471 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11472 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11473 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11474 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11475 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11476 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11477 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11478 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11480 /* Did the locale setup indicate UTF-8? */
11481 PL_utf8locale = proto_perl->Iutf8locale;
11482 /* Unicode features (see perlrun/-C) */
11483 PL_unicode = proto_perl->Iunicode;
11485 /* Pre-5.8 signals control */
11486 PL_signals = proto_perl->Isignals;
11488 /* times() ticks per second */
11489 PL_clocktick = proto_perl->Iclocktick;
11491 /* Recursion stopper for PerlIO_find_layer */
11492 PL_in_load_module = proto_perl->Iin_load_module;
11494 /* sort() routine */
11495 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
11497 /* Not really needed/useful since the reenrant_retint is "volatile",
11498 * but do it for consistency's sake. */
11499 PL_reentrant_retint = proto_perl->Ireentrant_retint;
11501 /* Hooks to shared SVs and locks. */
11502 PL_sharehook = proto_perl->Isharehook;
11503 PL_lockhook = proto_perl->Ilockhook;
11504 PL_unlockhook = proto_perl->Iunlockhook;
11505 PL_threadhook = proto_perl->Ithreadhook;
11507 PL_runops_std = proto_perl->Irunops_std;
11508 PL_runops_dbg = proto_perl->Irunops_dbg;
11510 #ifdef THREADS_HAVE_PIDS
11511 PL_ppid = proto_perl->Ippid;
11515 PL_last_swash_hv = Nullhv; /* reinits on demand */
11516 PL_last_swash_klen = 0;
11517 PL_last_swash_key[0]= '\0';
11518 PL_last_swash_tmps = (U8*)NULL;
11519 PL_last_swash_slen = 0;
11521 /* perly.c globals */
11522 PL_yydebug = proto_perl->Iyydebug;
11523 PL_yynerrs = proto_perl->Iyynerrs;
11524 PL_yyerrflag = proto_perl->Iyyerrflag;
11525 PL_yychar = proto_perl->Iyychar;
11526 PL_yyval = proto_perl->Iyyval;
11527 PL_yylval = proto_perl->Iyylval;
11529 PL_glob_index = proto_perl->Iglob_index;
11530 PL_srand_called = proto_perl->Isrand_called;
11531 PL_uudmap['M'] = 0; /* reinits on demand */
11532 PL_bitcount = Nullch; /* reinits on demand */
11534 if (proto_perl->Ipsig_pend) {
11535 Newz(0, PL_psig_pend, SIG_SIZE, int);
11538 PL_psig_pend = (int*)NULL;
11541 if (proto_perl->Ipsig_ptr) {
11542 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
11543 Newz(0, PL_psig_name, SIG_SIZE, SV*);
11544 for (i = 1; i < SIG_SIZE; i++) {
11545 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11546 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11550 PL_psig_ptr = (SV**)NULL;
11551 PL_psig_name = (SV**)NULL;
11554 /* thrdvar.h stuff */
11556 if (flags & CLONEf_COPY_STACKS) {
11557 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11558 PL_tmps_ix = proto_perl->Ttmps_ix;
11559 PL_tmps_max = proto_perl->Ttmps_max;
11560 PL_tmps_floor = proto_perl->Ttmps_floor;
11561 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
11563 while (i <= PL_tmps_ix) {
11564 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
11568 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11569 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
11570 Newz(54, PL_markstack, i, I32);
11571 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
11572 - proto_perl->Tmarkstack);
11573 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
11574 - proto_perl->Tmarkstack);
11575 Copy(proto_perl->Tmarkstack, PL_markstack,
11576 PL_markstack_ptr - PL_markstack + 1, I32);
11578 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11579 * NOTE: unlike the others! */
11580 PL_scopestack_ix = proto_perl->Tscopestack_ix;
11581 PL_scopestack_max = proto_perl->Tscopestack_max;
11582 Newz(54, PL_scopestack, PL_scopestack_max, I32);
11583 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
11585 /* next push_return() sets PL_retstack[PL_retstack_ix]
11586 * NOTE: unlike the others! */
11587 PL_retstack_ix = proto_perl->Tretstack_ix;
11588 PL_retstack_max = proto_perl->Tretstack_max;
11589 Newz(54, PL_retstack, PL_retstack_max, OP*);
11590 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, OP*);
11592 /* NOTE: si_dup() looks at PL_markstack */
11593 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
11595 /* PL_curstack = PL_curstackinfo->si_stack; */
11596 PL_curstack = av_dup(proto_perl->Tcurstack, param);
11597 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
11599 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11600 PL_stack_base = AvARRAY(PL_curstack);
11601 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
11602 - proto_perl->Tstack_base);
11603 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
11605 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11606 * NOTE: unlike the others! */
11607 PL_savestack_ix = proto_perl->Tsavestack_ix;
11608 PL_savestack_max = proto_perl->Tsavestack_max;
11609 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
11610 PL_savestack = ss_dup(proto_perl, param);
11614 ENTER; /* perl_destruct() wants to LEAVE; */
11617 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
11618 PL_top_env = &PL_start_env;
11620 PL_op = proto_perl->Top;
11623 PL_Xpv = (XPV*)NULL;
11624 PL_na = proto_perl->Tna;
11626 PL_statbuf = proto_perl->Tstatbuf;
11627 PL_statcache = proto_perl->Tstatcache;
11628 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
11629 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
11631 PL_timesbuf = proto_perl->Ttimesbuf;
11634 PL_tainted = proto_perl->Ttainted;
11635 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
11636 PL_rs = sv_dup_inc(proto_perl->Trs, param);
11637 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
11638 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
11639 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
11640 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
11641 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
11642 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
11643 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
11645 PL_restartop = proto_perl->Trestartop;
11646 PL_in_eval = proto_perl->Tin_eval;
11647 PL_delaymagic = proto_perl->Tdelaymagic;
11648 PL_dirty = proto_perl->Tdirty;
11649 PL_localizing = proto_perl->Tlocalizing;
11651 #ifdef PERL_FLEXIBLE_EXCEPTIONS
11652 PL_protect = proto_perl->Tprotect;
11654 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
11655 PL_hv_fetch_ent_mh = Nullhe;
11656 PL_modcount = proto_perl->Tmodcount;
11657 PL_lastgotoprobe = Nullop;
11658 PL_dumpindent = proto_perl->Tdumpindent;
11660 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
11661 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
11662 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
11663 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
11664 PL_sortcxix = proto_perl->Tsortcxix;
11665 PL_efloatbuf = Nullch; /* reinits on demand */
11666 PL_efloatsize = 0; /* reinits on demand */
11670 PL_screamfirst = NULL;
11671 PL_screamnext = NULL;
11672 PL_maxscream = -1; /* reinits on demand */
11673 PL_lastscream = Nullsv;
11675 PL_watchaddr = NULL;
11676 PL_watchok = Nullch;
11678 PL_regdummy = proto_perl->Tregdummy;
11679 PL_regcomp_parse = Nullch;
11680 PL_regxend = Nullch;
11681 PL_regcode = (regnode*)NULL;
11684 PL_regprecomp = Nullch;
11689 PL_seen_zerolen = 0;
11691 PL_regcomp_rx = (regexp*)NULL;
11693 PL_colorset = 0; /* reinits PL_colors[] */
11694 /*PL_colors[6] = {0,0,0,0,0,0};*/
11695 PL_reg_whilem_seen = 0;
11696 PL_reginput = Nullch;
11697 PL_regbol = Nullch;
11698 PL_regeol = Nullch;
11699 PL_regstartp = (I32*)NULL;
11700 PL_regendp = (I32*)NULL;
11701 PL_reglastparen = (U32*)NULL;
11702 PL_reglastcloseparen = (U32*)NULL;
11703 PL_regtill = Nullch;
11704 PL_reg_start_tmp = (char**)NULL;
11705 PL_reg_start_tmpl = 0;
11706 PL_regdata = (struct reg_data*)NULL;
11709 PL_reg_eval_set = 0;
11711 PL_regprogram = (regnode*)NULL;
11713 PL_regcc = (CURCUR*)NULL;
11714 PL_reg_call_cc = (struct re_cc_state*)NULL;
11715 PL_reg_re = (regexp*)NULL;
11716 PL_reg_ganch = Nullch;
11717 PL_reg_sv = Nullsv;
11718 PL_reg_match_utf8 = FALSE;
11719 PL_reg_magic = (MAGIC*)NULL;
11721 PL_reg_oldcurpm = (PMOP*)NULL;
11722 PL_reg_curpm = (PMOP*)NULL;
11723 PL_reg_oldsaved = Nullch;
11724 PL_reg_oldsavedlen = 0;
11725 PL_reg_maxiter = 0;
11726 PL_reg_leftiter = 0;
11727 PL_reg_poscache = Nullch;
11728 PL_reg_poscache_size= 0;
11730 /* RE engine - function pointers */
11731 PL_regcompp = proto_perl->Tregcompp;
11732 PL_regexecp = proto_perl->Tregexecp;
11733 PL_regint_start = proto_perl->Tregint_start;
11734 PL_regint_string = proto_perl->Tregint_string;
11735 PL_regfree = proto_perl->Tregfree;
11737 PL_reginterp_cnt = 0;
11738 PL_reg_starttry = 0;
11740 /* Pluggable optimizer */
11741 PL_peepp = proto_perl->Tpeepp;
11743 PL_stashcache = newHV();
11745 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11746 ptr_table_free(PL_ptr_table);
11747 PL_ptr_table = NULL;
11750 /* Call the ->CLONE method, if it exists, for each of the stashes
11751 identified by sv_dup() above.
11753 while(av_len(param->stashes) != -1) {
11754 HV* stash = (HV*) av_shift(param->stashes);
11755 GV* cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11756 if (cloner && GvCV(cloner)) {
11761 XPUSHs(sv_2mortal(newSVpv(HvNAME_get(stash), 0)));
11763 call_sv((SV*)GvCV(cloner), G_DISCARD);
11769 SvREFCNT_dec(param->stashes);
11771 /* orphaned? eg threads->new inside BEGIN or use */
11772 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
11773 (void)SvREFCNT_inc(PL_compcv);
11774 SAVEFREESV(PL_compcv);
11780 #endif /* USE_ITHREADS */
11783 =head1 Unicode Support
11785 =for apidoc sv_recode_to_utf8
11787 The encoding is assumed to be an Encode object, on entry the PV
11788 of the sv is assumed to be octets in that encoding, and the sv
11789 will be converted into Unicode (and UTF-8).
11791 If the sv already is UTF-8 (or if it is not POK), or if the encoding
11792 is not a reference, nothing is done to the sv. If the encoding is not
11793 an C<Encode::XS> Encoding object, bad things will happen.
11794 (See F<lib/encoding.pm> and L<Encode>).
11796 The PV of the sv is returned.
11801 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11803 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11817 Passing sv_yes is wrong - it needs to be or'ed set of constants
11818 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11819 remove converted chars from source.
11821 Both will default the value - let them.
11823 XPUSHs(&PL_sv_yes);
11826 call_method("decode", G_SCALAR);
11830 s = SvPV_const(uni, len);
11831 if (s != SvPVX_const(sv)) {
11832 SvGROW(sv, len + 1);
11833 Move(s, SvPVX(sv), len + 1, char);
11834 SvCUR_set(sv, len);
11841 return SvPOKp(sv) ? SvPVX(sv) : NULL;
11845 =for apidoc sv_cat_decode
11847 The encoding is assumed to be an Encode object, the PV of the ssv is
11848 assumed to be octets in that encoding and decoding the input starts
11849 from the position which (PV + *offset) pointed to. The dsv will be
11850 concatenated the decoded UTF-8 string from ssv. Decoding will terminate
11851 when the string tstr appears in decoding output or the input ends on
11852 the PV of the ssv. The value which the offset points will be modified
11853 to the last input position on the ssv.
11855 Returns TRUE if the terminator was found, else returns FALSE.
11860 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11861 SV *ssv, int *offset, char *tstr, int tlen)
11864 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11875 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11876 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11878 call_method("cat_decode", G_SCALAR);
11880 ret = SvTRUE(TOPs);
11881 *offset = SvIV(offsv);
11887 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
11893 * c-indentation-style: bsd
11894 * c-basic-offset: 4
11895 * indent-tabs-mode: t
11898 * ex: set ts=8 sts=4 sw=4 noet: