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);
1414 else if (mt == SVt_NV)
1422 del_XPVIV(SvANY(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);
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);
1671 else if (SvOOK(sv)) { /* pv is offset? */
1674 if (newlen > SvLEN(sv))
1675 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1676 #ifdef HAS_64K_LIMIT
1677 if (newlen >= 0x10000)
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(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 */
1900 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
1902 if (ch & 128 && !isPRINT_LC(ch)) {
1911 else if (ch == '\r') {
1915 else if (ch == '\f') {
1919 else if (ch == '\\') {
1923 else if (ch == '\0') {
1927 else if (isPRINT_LC(ch))
1944 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1945 "Argument \"%s\" isn't numeric in %s", pv,
1948 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1949 "Argument \"%s\" isn't numeric", pv);
1953 =for apidoc looks_like_number
1955 Test if the content of an SV looks like a number (or is a number).
1956 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1957 non-numeric warning), even if your atof() doesn't grok them.
1963 Perl_looks_like_number(pTHX_ SV *sv)
1965 register const char *sbegin;
1969 sbegin = SvPVX_const(sv);
1972 else if (SvPOKp(sv))
1973 sbegin = SvPV(sv, len);
1975 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1976 return grok_number(sbegin, len, NULL);
1979 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1980 until proven guilty, assume that things are not that bad... */
1985 As 64 bit platforms often have an NV that doesn't preserve all bits of
1986 an IV (an assumption perl has been based on to date) it becomes necessary
1987 to remove the assumption that the NV always carries enough precision to
1988 recreate the IV whenever needed, and that the NV is the canonical form.
1989 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1990 precision as a side effect of conversion (which would lead to insanity
1991 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1992 1) to distinguish between IV/UV/NV slots that have cached a valid
1993 conversion where precision was lost and IV/UV/NV slots that have a
1994 valid conversion which has lost no precision
1995 2) to ensure that if a numeric conversion to one form is requested that
1996 would lose precision, the precise conversion (or differently
1997 imprecise conversion) is also performed and cached, to prevent
1998 requests for different numeric formats on the same SV causing
1999 lossy conversion chains. (lossless conversion chains are perfectly
2004 SvIOKp is true if the IV slot contains a valid value
2005 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
2006 SvNOKp is true if the NV slot contains a valid value
2007 SvNOK is true only if the NV value is accurate
2010 while converting from PV to NV, check to see if converting that NV to an
2011 IV(or UV) would lose accuracy over a direct conversion from PV to
2012 IV(or UV). If it would, cache both conversions, return NV, but mark
2013 SV as IOK NOKp (ie not NOK).
2015 While converting from PV to IV, check to see if converting that IV to an
2016 NV would lose accuracy over a direct conversion from PV to NV. If it
2017 would, cache both conversions, flag similarly.
2019 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2020 correctly because if IV & NV were set NV *always* overruled.
2021 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2022 changes - now IV and NV together means that the two are interchangeable:
2023 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2025 The benefit of this is that operations such as pp_add know that if
2026 SvIOK is true for both left and right operands, then integer addition
2027 can be used instead of floating point (for cases where the result won't
2028 overflow). Before, floating point was always used, which could lead to
2029 loss of precision compared with integer addition.
2031 * making IV and NV equal status should make maths accurate on 64 bit
2033 * may speed up maths somewhat if pp_add and friends start to use
2034 integers when possible instead of fp. (Hopefully the overhead in
2035 looking for SvIOK and checking for overflow will not outweigh the
2036 fp to integer speedup)
2037 * will slow down integer operations (callers of SvIV) on "inaccurate"
2038 values, as the change from SvIOK to SvIOKp will cause a call into
2039 sv_2iv each time rather than a macro access direct to the IV slot
2040 * should speed up number->string conversion on integers as IV is
2041 favoured when IV and NV are equally accurate
2043 ####################################################################
2044 You had better be using SvIOK_notUV if you want an IV for arithmetic:
2045 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2046 On the other hand, SvUOK is true iff UV.
2047 ####################################################################
2049 Your mileage will vary depending your CPU's relative fp to integer
2053 #ifndef NV_PRESERVES_UV
2054 # define IS_NUMBER_UNDERFLOW_IV 1
2055 # define IS_NUMBER_UNDERFLOW_UV 2
2056 # define IS_NUMBER_IV_AND_UV 2
2057 # define IS_NUMBER_OVERFLOW_IV 4
2058 # define IS_NUMBER_OVERFLOW_UV 5
2060 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2062 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2064 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2066 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));
2067 if (SvNVX(sv) < (NV)IV_MIN) {
2068 (void)SvIOKp_on(sv);
2070 SvIV_set(sv, IV_MIN);
2071 return IS_NUMBER_UNDERFLOW_IV;
2073 if (SvNVX(sv) > (NV)UV_MAX) {
2074 (void)SvIOKp_on(sv);
2077 SvUV_set(sv, UV_MAX);
2078 return IS_NUMBER_OVERFLOW_UV;
2080 (void)SvIOKp_on(sv);
2082 /* Can't use strtol etc to convert this string. (See truth table in
2084 if (SvNVX(sv) <= (UV)IV_MAX) {
2085 SvIV_set(sv, I_V(SvNVX(sv)));
2086 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2087 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2089 /* Integer is imprecise. NOK, IOKp */
2091 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2094 SvUV_set(sv, U_V(SvNVX(sv)));
2095 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2096 if (SvUVX(sv) == UV_MAX) {
2097 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2098 possibly be preserved by NV. Hence, it must be overflow.
2100 return IS_NUMBER_OVERFLOW_UV;
2102 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2104 /* Integer is imprecise. NOK, IOKp */
2106 return IS_NUMBER_OVERFLOW_IV;
2108 #endif /* !NV_PRESERVES_UV*/
2113 Return the integer value of an SV, doing any necessary string conversion,
2114 magic etc. Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2120 Perl_sv_2iv(pTHX_ register SV *sv)
2124 if (SvGMAGICAL(sv)) {
2129 return I_V(SvNVX(sv));
2131 if (SvPOKp(sv) && SvLEN(sv))
2134 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2135 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2141 if (SvTHINKFIRST(sv)) {
2144 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2145 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2146 return SvIV(tmpstr);
2147 return PTR2IV(SvRV(sv));
2149 if (SvREADONLY(sv) && SvFAKE(sv)) {
2150 sv_force_normal(sv);
2152 if (SvREADONLY(sv) && !SvOK(sv)) {
2153 if (ckWARN(WARN_UNINITIALIZED))
2160 return (IV)(SvUVX(sv));
2167 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2168 * without also getting a cached IV/UV from it at the same time
2169 * (ie PV->NV conversion should detect loss of accuracy and cache
2170 * IV or UV at same time to avoid this. NWC */
2172 if (SvTYPE(sv) == SVt_NV)
2173 sv_upgrade(sv, SVt_PVNV);
2175 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2176 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2177 certainly cast into the IV range at IV_MAX, whereas the correct
2178 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2180 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2181 SvIV_set(sv, I_V(SvNVX(sv)));
2182 if (SvNVX(sv) == (NV) SvIVX(sv)
2183 #ifndef NV_PRESERVES_UV
2184 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2185 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2186 /* Don't flag it as "accurately an integer" if the number
2187 came from a (by definition imprecise) NV operation, and
2188 we're outside the range of NV integer precision */
2191 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2192 DEBUG_c(PerlIO_printf(Perl_debug_log,
2193 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2199 /* IV not precise. No need to convert from PV, as NV
2200 conversion would already have cached IV if it detected
2201 that PV->IV would be better than PV->NV->IV
2202 flags already correct - don't set public IOK. */
2203 DEBUG_c(PerlIO_printf(Perl_debug_log,
2204 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2209 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2210 but the cast (NV)IV_MIN rounds to a the value less (more
2211 negative) than IV_MIN which happens to be equal to SvNVX ??
2212 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2213 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2214 (NV)UVX == NVX are both true, but the values differ. :-(
2215 Hopefully for 2s complement IV_MIN is something like
2216 0x8000000000000000 which will be exact. NWC */
2219 SvUV_set(sv, U_V(SvNVX(sv)));
2221 (SvNVX(sv) == (NV) SvUVX(sv))
2222 #ifndef NV_PRESERVES_UV
2223 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2224 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2225 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2226 /* Don't flag it as "accurately an integer" if the number
2227 came from a (by definition imprecise) NV operation, and
2228 we're outside the range of NV integer precision */
2234 DEBUG_c(PerlIO_printf(Perl_debug_log,
2235 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2239 return (IV)SvUVX(sv);
2242 else if (SvPOKp(sv) && SvLEN(sv)) {
2244 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2245 /* We want to avoid a possible problem when we cache an IV which
2246 may be later translated to an NV, and the resulting NV is not
2247 the same as the direct translation of the initial string
2248 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2249 be careful to ensure that the value with the .456 is around if the
2250 NV value is requested in the future).
2252 This means that if we cache such an IV, we need to cache the
2253 NV as well. Moreover, we trade speed for space, and do not
2254 cache the NV if we are sure it's not needed.
2257 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2258 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2259 == IS_NUMBER_IN_UV) {
2260 /* It's definitely an integer, only upgrade to PVIV */
2261 if (SvTYPE(sv) < SVt_PVIV)
2262 sv_upgrade(sv, SVt_PVIV);
2264 } else if (SvTYPE(sv) < SVt_PVNV)
2265 sv_upgrade(sv, SVt_PVNV);
2267 /* If NV preserves UV then we only use the UV value if we know that
2268 we aren't going to call atof() below. If NVs don't preserve UVs
2269 then the value returned may have more precision than atof() will
2270 return, even though value isn't perfectly accurate. */
2271 if ((numtype & (IS_NUMBER_IN_UV
2272 #ifdef NV_PRESERVES_UV
2275 )) == IS_NUMBER_IN_UV) {
2276 /* This won't turn off the public IOK flag if it was set above */
2277 (void)SvIOKp_on(sv);
2279 if (!(numtype & IS_NUMBER_NEG)) {
2281 if (value <= (UV)IV_MAX) {
2282 SvIV_set(sv, (IV)value);
2284 SvUV_set(sv, value);
2288 /* 2s complement assumption */
2289 if (value <= (UV)IV_MIN) {
2290 SvIV_set(sv, -(IV)value);
2292 /* Too negative for an IV. This is a double upgrade, but
2293 I'm assuming it will be rare. */
2294 if (SvTYPE(sv) < SVt_PVNV)
2295 sv_upgrade(sv, SVt_PVNV);
2299 SvNV_set(sv, -(NV)value);
2300 SvIV_set(sv, IV_MIN);
2304 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2305 will be in the previous block to set the IV slot, and the next
2306 block to set the NV slot. So no else here. */
2308 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2309 != IS_NUMBER_IN_UV) {
2310 /* It wasn't an (integer that doesn't overflow the UV). */
2311 SvNV_set(sv, Atof(SvPVX_const(sv)));
2313 if (! numtype && ckWARN(WARN_NUMERIC))
2316 #if defined(USE_LONG_DOUBLE)
2317 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2318 PTR2UV(sv), SvNVX(sv)));
2320 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2321 PTR2UV(sv), SvNVX(sv)));
2325 #ifdef NV_PRESERVES_UV
2326 (void)SvIOKp_on(sv);
2328 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2329 SvIV_set(sv, I_V(SvNVX(sv)));
2330 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2333 /* Integer is imprecise. NOK, IOKp */
2335 /* UV will not work better than IV */
2337 if (SvNVX(sv) > (NV)UV_MAX) {
2339 /* Integer is inaccurate. NOK, IOKp, is UV */
2340 SvUV_set(sv, UV_MAX);
2343 SvUV_set(sv, U_V(SvNVX(sv)));
2344 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2345 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2349 /* Integer is imprecise. NOK, IOKp, is UV */
2355 #else /* NV_PRESERVES_UV */
2356 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2357 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2358 /* The IV slot will have been set from value returned by
2359 grok_number above. The NV slot has just been set using
2362 assert (SvIOKp(sv));
2364 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2365 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2366 /* Small enough to preserve all bits. */
2367 (void)SvIOKp_on(sv);
2369 SvIV_set(sv, I_V(SvNVX(sv)));
2370 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2372 /* Assumption: first non-preserved integer is < IV_MAX,
2373 this NV is in the preserved range, therefore: */
2374 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2376 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);
2380 0 0 already failed to read UV.
2381 0 1 already failed to read UV.
2382 1 0 you won't get here in this case. IV/UV
2383 slot set, public IOK, Atof() unneeded.
2384 1 1 already read UV.
2385 so there's no point in sv_2iuv_non_preserve() attempting
2386 to use atol, strtol, strtoul etc. */
2387 if (sv_2iuv_non_preserve (sv, numtype)
2388 >= IS_NUMBER_OVERFLOW_IV)
2392 #endif /* NV_PRESERVES_UV */
2395 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2397 if (SvTYPE(sv) < SVt_IV)
2398 /* Typically the caller expects that sv_any is not NULL now. */
2399 sv_upgrade(sv, SVt_IV);
2402 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2403 PTR2UV(sv),SvIVX(sv)));
2404 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2410 Return the unsigned integer value of an SV, doing any necessary string
2411 conversion, magic etc. Normally used via the C<SvUV(sv)> and C<SvUVx(sv)>
2418 Perl_sv_2uv(pTHX_ register SV *sv)
2422 if (SvGMAGICAL(sv)) {
2427 return U_V(SvNVX(sv));
2428 if (SvPOKp(sv) && SvLEN(sv))
2431 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2432 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2438 if (SvTHINKFIRST(sv)) {
2441 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2442 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2443 return SvUV(tmpstr);
2444 return PTR2UV(SvRV(sv));
2446 if (SvREADONLY(sv) && SvFAKE(sv)) {
2447 sv_force_normal(sv);
2449 if (SvREADONLY(sv) && !SvOK(sv)) {
2450 if (ckWARN(WARN_UNINITIALIZED))
2460 return (UV)SvIVX(sv);
2464 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2465 * without also getting a cached IV/UV from it at the same time
2466 * (ie PV->NV conversion should detect loss of accuracy and cache
2467 * IV or UV at same time to avoid this. */
2468 /* IV-over-UV optimisation - choose to cache IV if possible */
2470 if (SvTYPE(sv) == SVt_NV)
2471 sv_upgrade(sv, SVt_PVNV);
2473 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2474 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2475 SvIV_set(sv, I_V(SvNVX(sv)));
2476 if (SvNVX(sv) == (NV) SvIVX(sv)
2477 #ifndef NV_PRESERVES_UV
2478 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2479 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2480 /* Don't flag it as "accurately an integer" if the number
2481 came from a (by definition imprecise) NV operation, and
2482 we're outside the range of NV integer precision */
2485 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2486 DEBUG_c(PerlIO_printf(Perl_debug_log,
2487 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2493 /* IV not precise. No need to convert from PV, as NV
2494 conversion would already have cached IV if it detected
2495 that PV->IV would be better than PV->NV->IV
2496 flags already correct - don't set public IOK. */
2497 DEBUG_c(PerlIO_printf(Perl_debug_log,
2498 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2503 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2504 but the cast (NV)IV_MIN rounds to a the value less (more
2505 negative) than IV_MIN which happens to be equal to SvNVX ??
2506 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2507 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2508 (NV)UVX == NVX are both true, but the values differ. :-(
2509 Hopefully for 2s complement IV_MIN is something like
2510 0x8000000000000000 which will be exact. NWC */
2513 SvUV_set(sv, U_V(SvNVX(sv)));
2515 (SvNVX(sv) == (NV) SvUVX(sv))
2516 #ifndef NV_PRESERVES_UV
2517 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2518 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2519 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2520 /* Don't flag it as "accurately an integer" if the number
2521 came from a (by definition imprecise) NV operation, and
2522 we're outside the range of NV integer precision */
2527 DEBUG_c(PerlIO_printf(Perl_debug_log,
2528 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2534 else if (SvPOKp(sv) && SvLEN(sv)) {
2536 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2538 /* We want to avoid a possible problem when we cache a UV which
2539 may be later translated to an NV, and the resulting NV is not
2540 the translation of the initial data.
2542 This means that if we cache such a UV, we need to cache the
2543 NV as well. Moreover, we trade speed for space, and do not
2544 cache the NV if not needed.
2547 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2548 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2549 == IS_NUMBER_IN_UV) {
2550 /* It's definitely an integer, only upgrade to PVIV */
2551 if (SvTYPE(sv) < SVt_PVIV)
2552 sv_upgrade(sv, SVt_PVIV);
2554 } else if (SvTYPE(sv) < SVt_PVNV)
2555 sv_upgrade(sv, SVt_PVNV);
2557 /* If NV preserves UV then we only use the UV value if we know that
2558 we aren't going to call atof() below. If NVs don't preserve UVs
2559 then the value returned may have more precision than atof() will
2560 return, even though it isn't accurate. */
2561 if ((numtype & (IS_NUMBER_IN_UV
2562 #ifdef NV_PRESERVES_UV
2565 )) == IS_NUMBER_IN_UV) {
2566 /* This won't turn off the public IOK flag if it was set above */
2567 (void)SvIOKp_on(sv);
2569 if (!(numtype & IS_NUMBER_NEG)) {
2571 if (value <= (UV)IV_MAX) {
2572 SvIV_set(sv, (IV)value);
2574 /* it didn't overflow, and it was positive. */
2575 SvUV_set(sv, value);
2579 /* 2s complement assumption */
2580 if (value <= (UV)IV_MIN) {
2581 SvIV_set(sv, -(IV)value);
2583 /* Too negative for an IV. This is a double upgrade, but
2584 I'm assuming it will be rare. */
2585 if (SvTYPE(sv) < SVt_PVNV)
2586 sv_upgrade(sv, SVt_PVNV);
2590 SvNV_set(sv, -(NV)value);
2591 SvIV_set(sv, IV_MIN);
2596 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2597 != IS_NUMBER_IN_UV) {
2598 /* It wasn't an integer, or it overflowed the UV. */
2599 SvNV_set(sv, Atof(SvPVX_const(sv)));
2601 if (! numtype && ckWARN(WARN_NUMERIC))
2604 #if defined(USE_LONG_DOUBLE)
2605 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2606 PTR2UV(sv), SvNVX(sv)));
2608 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
2609 PTR2UV(sv), SvNVX(sv)));
2612 #ifdef NV_PRESERVES_UV
2613 (void)SvIOKp_on(sv);
2615 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2616 SvIV_set(sv, I_V(SvNVX(sv)));
2617 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2620 /* Integer is imprecise. NOK, IOKp */
2622 /* UV will not work better than IV */
2624 if (SvNVX(sv) > (NV)UV_MAX) {
2626 /* Integer is inaccurate. NOK, IOKp, is UV */
2627 SvUV_set(sv, UV_MAX);
2630 SvUV_set(sv, U_V(SvNVX(sv)));
2631 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2632 NV preservse UV so can do correct comparison. */
2633 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2637 /* Integer is imprecise. NOK, IOKp, is UV */
2642 #else /* NV_PRESERVES_UV */
2643 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2644 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2645 /* The UV slot will have been set from value returned by
2646 grok_number above. The NV slot has just been set using
2649 assert (SvIOKp(sv));
2651 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2652 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2653 /* Small enough to preserve all bits. */
2654 (void)SvIOKp_on(sv);
2656 SvIV_set(sv, I_V(SvNVX(sv)));
2657 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2659 /* Assumption: first non-preserved integer is < IV_MAX,
2660 this NV is in the preserved range, therefore: */
2661 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2663 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);
2666 sv_2iuv_non_preserve (sv, numtype);
2668 #endif /* NV_PRESERVES_UV */
2672 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2673 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2676 if (SvTYPE(sv) < SVt_IV)
2677 /* Typically the caller expects that sv_any is not NULL now. */
2678 sv_upgrade(sv, SVt_IV);
2682 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2683 PTR2UV(sv),SvUVX(sv)));
2684 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2690 Return the num value of an SV, doing any necessary string or integer
2691 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2698 Perl_sv_2nv(pTHX_ register SV *sv)
2702 if (SvGMAGICAL(sv)) {
2706 if (SvPOKp(sv) && SvLEN(sv)) {
2707 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
2708 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2710 return Atof(SvPVX_const(sv));
2714 return (NV)SvUVX(sv);
2716 return (NV)SvIVX(sv);
2719 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2720 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2726 if (SvTHINKFIRST(sv)) {
2729 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2730 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2731 return SvNV(tmpstr);
2732 return PTR2NV(SvRV(sv));
2734 if (SvREADONLY(sv) && SvFAKE(sv)) {
2735 sv_force_normal(sv);
2737 if (SvREADONLY(sv) && !SvOK(sv)) {
2738 if (ckWARN(WARN_UNINITIALIZED))
2743 if (SvTYPE(sv) < SVt_NV) {
2744 if (SvTYPE(sv) == SVt_IV)
2745 sv_upgrade(sv, SVt_PVNV);
2747 sv_upgrade(sv, SVt_NV);
2748 #ifdef USE_LONG_DOUBLE
2750 STORE_NUMERIC_LOCAL_SET_STANDARD();
2751 PerlIO_printf(Perl_debug_log,
2752 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2753 PTR2UV(sv), SvNVX(sv));
2754 RESTORE_NUMERIC_LOCAL();
2758 STORE_NUMERIC_LOCAL_SET_STANDARD();
2759 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2760 PTR2UV(sv), SvNVX(sv));
2761 RESTORE_NUMERIC_LOCAL();
2765 else if (SvTYPE(sv) < SVt_PVNV)
2766 sv_upgrade(sv, SVt_PVNV);
2771 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2772 #ifdef NV_PRESERVES_UV
2775 /* Only set the public NV OK flag if this NV preserves the IV */
2776 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2777 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2778 : (SvIVX(sv) == I_V(SvNVX(sv))))
2784 else if (SvPOKp(sv) && SvLEN(sv)) {
2786 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2787 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
2789 #ifdef NV_PRESERVES_UV
2790 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2791 == IS_NUMBER_IN_UV) {
2792 /* It's definitely an integer */
2793 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2795 SvNV_set(sv, Atof(SvPVX_const(sv)));
2798 SvNV_set(sv, Atof(SvPVX_const(sv)));
2799 /* Only set the public NV OK flag if this NV preserves the value in
2800 the PV at least as well as an IV/UV would.
2801 Not sure how to do this 100% reliably. */
2802 /* if that shift count is out of range then Configure's test is
2803 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2805 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2806 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2807 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2808 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2809 /* Can't use strtol etc to convert this string, so don't try.
2810 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2813 /* value has been set. It may not be precise. */
2814 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2815 /* 2s complement assumption for (UV)IV_MIN */
2816 SvNOK_on(sv); /* Integer is too negative. */
2821 if (numtype & IS_NUMBER_NEG) {
2822 SvIV_set(sv, -(IV)value);
2823 } else if (value <= (UV)IV_MAX) {
2824 SvIV_set(sv, (IV)value);
2826 SvUV_set(sv, value);
2830 if (numtype & IS_NUMBER_NOT_INT) {
2831 /* I believe that even if the original PV had decimals,
2832 they are lost beyond the limit of the FP precision.
2833 However, neither is canonical, so both only get p
2834 flags. NWC, 2000/11/25 */
2835 /* Both already have p flags, so do nothing */
2838 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2839 if (SvIVX(sv) == I_V(nv)) {
2844 /* It had no "." so it must be integer. */
2847 /* between IV_MAX and NV(UV_MAX).
2848 Could be slightly > UV_MAX */
2850 if (numtype & IS_NUMBER_NOT_INT) {
2851 /* UV and NV both imprecise. */
2853 UV nv_as_uv = U_V(nv);
2855 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2866 #endif /* NV_PRESERVES_UV */
2869 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2871 if (SvTYPE(sv) < SVt_NV)
2872 /* Typically the caller expects that sv_any is not NULL now. */
2873 /* XXX Ilya implies that this is a bug in callers that assume this
2874 and ideally should be fixed. */
2875 sv_upgrade(sv, SVt_NV);
2878 #if defined(USE_LONG_DOUBLE)
2880 STORE_NUMERIC_LOCAL_SET_STANDARD();
2881 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2882 PTR2UV(sv), SvNVX(sv));
2883 RESTORE_NUMERIC_LOCAL();
2887 STORE_NUMERIC_LOCAL_SET_STANDARD();
2888 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2889 PTR2UV(sv), SvNVX(sv));
2890 RESTORE_NUMERIC_LOCAL();
2896 /* asIV(): extract an integer from the string value of an SV.
2897 * Caller must validate PVX */
2900 S_asIV(pTHX_ SV *sv)
2903 int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2905 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2906 == IS_NUMBER_IN_UV) {
2907 /* It's definitely an integer */
2908 if (numtype & IS_NUMBER_NEG) {
2909 if (value < (UV)IV_MIN)
2912 if (value < (UV)IV_MAX)
2917 if (ckWARN(WARN_NUMERIC))
2920 return I_V(Atof(SvPVX_const(sv)));
2923 /* asUV(): extract an unsigned integer from the string value of an SV
2924 * Caller must validate PVX */
2927 S_asUV(pTHX_ SV *sv)
2930 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2932 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2933 == IS_NUMBER_IN_UV) {
2934 /* It's definitely an integer */
2935 if (!(numtype & IS_NUMBER_NEG))
2939 if (ckWARN(WARN_NUMERIC))
2942 return U_V(Atof(SvPVX_const(sv)));
2946 =for apidoc sv_2pv_nolen
2948 Like C<sv_2pv()>, but doesn't return the length too. You should usually
2949 use the macro wrapper C<SvPV_nolen(sv)> instead.
2954 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2957 return sv_2pv(sv, &n_a);
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;
3027 if (SvGMAGICAL(sv)) {
3028 if (flags & SV_GMAGIC)
3036 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
3038 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
3043 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
3048 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3049 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3056 if (SvTHINKFIRST(sv)) {
3059 register const char *typestr;
3060 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3061 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3062 char *pv = SvPV(tmpstr, *lp);
3072 typestr = "NULLREF";
3076 switch (SvTYPE(sv)) {
3078 if ( ((SvFLAGS(sv) &
3079 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3080 == (SVs_OBJECT|SVs_SMG))
3081 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3082 const regexp *re = (regexp *)mg->mg_obj;
3085 const char *fptr = "msix";
3090 char need_newline = 0;
3091 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3093 while((ch = *fptr++)) {
3095 reflags[left++] = ch;
3098 reflags[right--] = ch;
3103 reflags[left] = '-';
3107 mg->mg_len = re->prelen + 4 + left;
3109 * If /x was used, we have to worry about a regex
3110 * ending with a comment later being embedded
3111 * within another regex. If so, we don't want this
3112 * regex's "commentization" to leak out to the
3113 * right part of the enclosing regex, we must cap
3114 * it with a newline.
3116 * So, if /x was used, we scan backwards from the
3117 * end of the regex. If we find a '#' before we
3118 * find a newline, we need to add a newline
3119 * ourself. If we find a '\n' first (or if we
3120 * don't find '#' or '\n'), we don't need to add
3121 * anything. -jfriedl
3123 if (PMf_EXTENDED & re->reganch)
3125 const char *endptr = re->precomp + re->prelen;
3126 while (endptr >= re->precomp)
3128 const char c = *(endptr--);
3130 break; /* don't need another */
3132 /* we end while in a comment, so we
3134 mg->mg_len++; /* save space for it */
3135 need_newline = 1; /* note to add it */
3141 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3142 Copy("(?", mg->mg_ptr, 2, char);
3143 Copy(reflags, mg->mg_ptr+2, left, char);
3144 Copy(":", mg->mg_ptr+left+2, 1, char);
3145 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3147 mg->mg_ptr[mg->mg_len - 2] = '\n';
3148 mg->mg_ptr[mg->mg_len - 1] = ')';
3149 mg->mg_ptr[mg->mg_len] = 0;
3151 PL_reginterp_cnt += re->program[0].next_off;
3153 if (re->reganch & ROPT_UTF8)
3168 case SVt_PVBM: typestr = SvROK(sv) ? "REF" : "SCALAR"; break;
3169 case SVt_PVLV: typestr = SvROK(sv) ? "REF"
3170 /* tied lvalues should appear to be
3171 * scalars for backwards compatitbility */
3172 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3173 ? "SCALAR" : "LVALUE"; break;
3174 case SVt_PVAV: typestr = "ARRAY"; break;
3175 case SVt_PVHV: typestr = "HASH"; break;
3176 case SVt_PVCV: typestr = "CODE"; break;
3177 case SVt_PVGV: typestr = "GLOB"; break;
3178 case SVt_PVFM: typestr = "FORMAT"; break;
3179 case SVt_PVIO: typestr = "IO"; break;
3180 default: typestr = "UNKNOWN"; break;
3184 const char *name = HvNAME_get(SvSTASH(sv));
3185 Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
3186 name ? name : "__ANON__" , typestr, PTR2UV(sv));
3189 Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, PTR2UV(sv));
3192 *lp = strlen(typestr);
3193 return (char *)typestr;
3195 if (SvREADONLY(sv) && !SvOK(sv)) {
3196 if (ckWARN(WARN_UNINITIALIZED))
3202 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3203 /* I'm assuming that if both IV and NV are equally valid then
3204 converting the IV is going to be more efficient */
3205 const U32 isIOK = SvIOK(sv);
3206 const U32 isUIOK = SvIsUV(sv);
3207 char buf[TYPE_CHARS(UV)];
3210 if (SvTYPE(sv) < SVt_PVIV)
3211 sv_upgrade(sv, SVt_PVIV);
3213 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3215 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3216 SvGROW(sv, (STRLEN)(ebuf - ptr + 1)); /* inlined from sv_setpvn */
3217 Move(ptr,SvPVX(sv),ebuf - ptr,char);
3218 SvCUR_set(sv, ebuf - ptr);
3228 else if (SvNOKp(sv)) {
3229 if (SvTYPE(sv) < SVt_PVNV)
3230 sv_upgrade(sv, SVt_PVNV);
3231 /* The +20 is pure guesswork. Configure test needed. --jhi */
3232 SvGROW(sv, NV_DIG + 20);
3234 olderrno = errno; /* some Xenix systems wipe out errno here */
3236 if (SvNVX(sv) == 0.0)
3237 (void)strcpy(s,"0");
3241 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3244 #ifdef FIXNEGATIVEZERO
3245 if (*s == '-' && s[1] == '0' && !s[2])
3255 if (ckWARN(WARN_UNINITIALIZED)
3256 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3259 if (SvTYPE(sv) < SVt_PV)
3260 /* Typically the caller expects that sv_any is not NULL now. */
3261 sv_upgrade(sv, SVt_PV);
3264 *lp = s - SvPVX_const(sv);
3267 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3268 PTR2UV(sv),SvPVX_const(sv)));
3272 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3273 /* Sneaky stuff here */
3277 tsv = newSVpv(tmpbuf, 0);
3288 t = SvPVX_const(tsv);
3293 len = strlen(tmpbuf);
3295 #ifdef FIXNEGATIVEZERO
3296 if (len == 2 && t[0] == '-' && t[1] == '0') {
3301 (void)SvUPGRADE(sv, SVt_PV);
3303 s = SvGROW(sv, len + 1);
3306 return strcpy(s, t);
3311 =for apidoc sv_copypv
3313 Copies a stringified representation of the source SV into the
3314 destination SV. Automatically performs any necessary mg_get and
3315 coercion of numeric values into strings. Guaranteed to preserve
3316 UTF-8 flag even from overloaded objects. Similar in nature to
3317 sv_2pv[_flags] but operates directly on an SV instead of just the
3318 string. Mostly uses sv_2pv_flags to do its work, except when that
3319 would lose the UTF-8'ness of the PV.
3325 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3330 sv_setpvn(dsv,s,len);
3338 =for apidoc sv_2pvbyte_nolen
3340 Return a pointer to the byte-encoded representation of the SV.
3341 May cause the SV to be downgraded from UTF-8 as a side-effect.
3343 Usually accessed via the C<SvPVbyte_nolen> macro.
3349 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3352 return sv_2pvbyte(sv, &n_a);
3356 =for apidoc sv_2pvbyte
3358 Return a pointer to the byte-encoded representation of the SV, and set *lp
3359 to its length. May cause the SV to be downgraded from UTF-8 as a
3362 Usually accessed via the C<SvPVbyte> macro.
3368 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3370 sv_utf8_downgrade(sv,0);
3371 return SvPV(sv,*lp);
3375 =for apidoc sv_2pvutf8_nolen
3377 Return a pointer to the UTF-8-encoded representation of the SV.
3378 May cause the SV to be upgraded to UTF-8 as a side-effect.
3380 Usually accessed via the C<SvPVutf8_nolen> macro.
3386 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3389 return sv_2pvutf8(sv, &n_a);
3393 =for apidoc sv_2pvutf8
3395 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3396 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3398 Usually accessed via the C<SvPVutf8> macro.
3404 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3406 sv_utf8_upgrade(sv);
3407 return SvPV(sv,*lp);
3411 =for apidoc sv_2bool
3413 This function is only called on magical items, and is only used by
3414 sv_true() or its macro equivalent.
3420 Perl_sv_2bool(pTHX_ register SV *sv)
3429 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3430 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3431 return (bool)SvTRUE(tmpsv);
3432 return SvRV(sv) != 0;
3435 register XPV* Xpvtmp;
3436 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3437 (*Xpvtmp->xpv_pv > '0' ||
3438 Xpvtmp->xpv_cur > 1 ||
3439 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
3446 return SvIVX(sv) != 0;
3449 return SvNVX(sv) != 0.0;
3456 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3457 * this function provided for binary compatibility only
3462 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3464 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3468 =for apidoc sv_utf8_upgrade
3470 Converts the PV of an SV to its UTF-8-encoded form.
3471 Forces the SV to string form if it is not already.
3472 Always sets the SvUTF8 flag to avoid future validity checks even
3473 if all the bytes have hibit clear.
3475 This is not as a general purpose byte encoding to Unicode interface:
3476 use the Encode extension for that.
3478 =for apidoc sv_utf8_upgrade_flags
3480 Converts the PV of an SV to its UTF-8-encoded form.
3481 Forces the SV to string form if it is not already.
3482 Always sets the SvUTF8 flag to avoid future validity checks even
3483 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3484 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3485 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3487 This is not as a general purpose byte encoding to Unicode interface:
3488 use the Encode extension for that.
3494 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3496 if (sv == &PL_sv_undef)
3500 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3501 (void) sv_2pv_flags(sv,&len, flags);
3505 (void) SvPV_force(sv,len);
3513 if (SvREADONLY(sv) && SvFAKE(sv)) {
3514 sv_force_normal(sv);
3517 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3518 sv_recode_to_utf8(sv, PL_encoding);
3519 else { /* Assume Latin-1/EBCDIC */
3520 /* This function could be much more efficient if we
3521 * had a FLAG in SVs to signal if there are any hibit
3522 * chars in the PV. Given that there isn't such a flag
3523 * make the loop as fast as possible. */
3524 U8 *s = (U8 *) SvPVX(sv);
3525 U8 *e = (U8 *) SvEND(sv);
3531 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3535 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3536 s = bytes_to_utf8((U8*)s, &len);
3538 SvPV_free(sv); /* No longer using what was there before. */
3540 SvPV_set(sv, (char*)s);
3541 SvCUR_set(sv, len - 1);
3542 SvLEN_set(sv, len); /* No longer know the real size. */
3544 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3551 =for apidoc sv_utf8_downgrade
3553 Attempts to convert the PV of an SV from characters to bytes.
3554 If the PV contains a character beyond byte, this conversion will fail;
3555 in this case, either returns false or, if C<fail_ok> is not
3558 This is not as a general purpose Unicode to byte encoding interface:
3559 use the Encode extension for that.
3565 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3567 if (SvPOKp(sv) && SvUTF8(sv)) {
3572 if (SvREADONLY(sv) && SvFAKE(sv))
3573 sv_force_normal(sv);
3574 s = (U8 *) SvPV(sv, len);
3575 if (!utf8_to_bytes(s, &len)) {
3580 Perl_croak(aTHX_ "Wide character in %s",
3583 Perl_croak(aTHX_ "Wide character");
3594 =for apidoc sv_utf8_encode
3596 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3597 flag off so that it looks like octets again.
3603 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3605 (void) sv_utf8_upgrade(sv);
3607 sv_force_normal_flags(sv, 0);
3609 if (SvREADONLY(sv)) {
3610 Perl_croak(aTHX_ PL_no_modify);
3616 =for apidoc sv_utf8_decode
3618 If the PV of the SV is an octet sequence in UTF-8
3619 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3620 so that it looks like a character. If the PV contains only single-byte
3621 characters, the C<SvUTF8> flag stays being off.
3622 Scans PV for validity and returns false if the PV is invalid UTF-8.
3628 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3634 /* The octets may have got themselves encoded - get them back as
3637 if (!sv_utf8_downgrade(sv, TRUE))
3640 /* it is actually just a matter of turning the utf8 flag on, but
3641 * we want to make sure everything inside is valid utf8 first.
3643 c = (U8 *) SvPVX(sv);
3644 if (!is_utf8_string(c, SvCUR(sv)+1))
3646 e = (U8 *) SvEND(sv);
3649 if (!UTF8_IS_INVARIANT(ch)) {
3658 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
3659 * this function provided for binary compatibility only
3663 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3665 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
3669 =for apidoc sv_setsv
3671 Copies the contents of the source SV C<ssv> into the destination SV
3672 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3673 function if the source SV needs to be reused. Does not handle 'set' magic.
3674 Loosely speaking, it performs a copy-by-value, obliterating any previous
3675 content of the destination.
3677 You probably want to use one of the assortment of wrappers, such as
3678 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3679 C<SvSetMagicSV_nosteal>.
3681 =for apidoc sv_setsv_flags
3683 Copies the contents of the source SV C<ssv> into the destination SV
3684 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3685 function if the source SV needs to be reused. Does not handle 'set' magic.
3686 Loosely speaking, it performs a copy-by-value, obliterating any previous
3687 content of the destination.
3688 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3689 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3690 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3691 and C<sv_setsv_nomg> are implemented in terms of this function.
3693 You probably want to use one of the assortment of wrappers, such as
3694 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3695 C<SvSetMagicSV_nosteal>.
3697 This is the primary function for copying scalars, and most other
3698 copy-ish functions and macros use this underneath.
3704 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3706 register U32 sflags;
3712 SV_CHECK_THINKFIRST(dstr);
3714 sstr = &PL_sv_undef;
3715 stype = SvTYPE(sstr);
3716 dtype = SvTYPE(dstr);
3721 /* need to nuke the magic */
3723 SvRMAGICAL_off(dstr);
3726 /* There's a lot of redundancy below but we're going for speed here */
3731 if (dtype != SVt_PVGV) {
3732 (void)SvOK_off(dstr);
3740 sv_upgrade(dstr, SVt_IV);
3743 sv_upgrade(dstr, SVt_PVNV);
3747 sv_upgrade(dstr, SVt_PVIV);
3750 (void)SvIOK_only(dstr);
3751 SvIV_set(dstr, SvIVX(sstr));
3754 if (SvTAINTED(sstr))
3765 sv_upgrade(dstr, SVt_NV);
3770 sv_upgrade(dstr, SVt_PVNV);
3773 SvNV_set(dstr, SvNVX(sstr));
3774 (void)SvNOK_only(dstr);
3775 if (SvTAINTED(sstr))
3783 sv_upgrade(dstr, SVt_RV);
3784 else if (dtype == SVt_PVGV &&
3785 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3788 if (GvIMPORTED(dstr) != GVf_IMPORTED
3789 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3791 GvIMPORTED_on(dstr);
3802 sv_upgrade(dstr, SVt_PV);
3805 if (dtype < SVt_PVIV)
3806 sv_upgrade(dstr, SVt_PVIV);
3809 if (dtype < SVt_PVNV)
3810 sv_upgrade(dstr, SVt_PVNV);
3817 const char * const type = sv_reftype(sstr,0);
3819 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3821 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3826 if (dtype <= SVt_PVGV) {
3828 if (dtype != SVt_PVGV) {
3829 const char * const name = GvNAME(sstr);
3830 const STRLEN len = GvNAMELEN(sstr);
3831 sv_upgrade(dstr, SVt_PVGV);
3832 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
3833 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3834 GvNAME(dstr) = savepvn(name, len);
3835 GvNAMELEN(dstr) = len;
3836 SvFAKE_on(dstr); /* can coerce to non-glob */
3838 /* ahem, death to those who redefine active sort subs */
3839 else if (PL_curstackinfo->si_type == PERLSI_SORT
3840 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3841 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3844 #ifdef GV_UNIQUE_CHECK
3845 if (GvUNIQUE((GV*)dstr)) {
3846 Perl_croak(aTHX_ PL_no_modify);
3850 (void)SvOK_off(dstr);
3851 GvINTRO_off(dstr); /* one-shot flag */
3853 GvGP(dstr) = gp_ref(GvGP(sstr));
3854 if (SvTAINTED(sstr))
3856 if (GvIMPORTED(dstr) != GVf_IMPORTED
3857 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3859 GvIMPORTED_on(dstr);
3867 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3869 if ((int)SvTYPE(sstr) != stype) {
3870 stype = SvTYPE(sstr);
3871 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3875 if (stype == SVt_PVLV)
3876 (void)SvUPGRADE(dstr, SVt_PVNV);
3878 (void)SvUPGRADE(dstr, (U32)stype);
3881 sflags = SvFLAGS(sstr);
3883 if (sflags & SVf_ROK) {
3884 if (dtype >= SVt_PV) {
3885 if (dtype == SVt_PVGV) {
3886 SV *sref = SvREFCNT_inc(SvRV(sstr));
3888 const int intro = GvINTRO(dstr);
3890 #ifdef GV_UNIQUE_CHECK
3891 if (GvUNIQUE((GV*)dstr)) {
3892 Perl_croak(aTHX_ PL_no_modify);
3897 GvINTRO_off(dstr); /* one-shot flag */
3898 GvLINE(dstr) = CopLINE(PL_curcop);
3899 GvEGV(dstr) = (GV*)dstr;
3902 switch (SvTYPE(sref)) {
3905 SAVEGENERICSV(GvAV(dstr));
3907 dref = (SV*)GvAV(dstr);
3908 GvAV(dstr) = (AV*)sref;
3909 if (!GvIMPORTED_AV(dstr)
3910 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3912 GvIMPORTED_AV_on(dstr);
3917 SAVEGENERICSV(GvHV(dstr));
3919 dref = (SV*)GvHV(dstr);
3920 GvHV(dstr) = (HV*)sref;
3921 if (!GvIMPORTED_HV(dstr)
3922 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3924 GvIMPORTED_HV_on(dstr);
3929 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3930 SvREFCNT_dec(GvCV(dstr));
3931 GvCV(dstr) = Nullcv;
3932 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3933 PL_sub_generation++;
3935 SAVEGENERICSV(GvCV(dstr));
3938 dref = (SV*)GvCV(dstr);
3939 if (GvCV(dstr) != (CV*)sref) {
3940 CV* cv = GvCV(dstr);
3942 if (!GvCVGEN((GV*)dstr) &&
3943 (CvROOT(cv) || CvXSUB(cv)))
3945 /* ahem, death to those who redefine
3946 * active sort subs */
3947 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3948 PL_sortcop == CvSTART(cv))
3950 "Can't redefine active sort subroutine %s",
3951 GvENAME((GV*)dstr));
3952 /* Redefining a sub - warning is mandatory if
3953 it was a const and its value changed. */
3954 if (ckWARN(WARN_REDEFINE)
3956 && (!CvCONST((CV*)sref)
3957 || sv_cmp(cv_const_sv(cv),
3958 cv_const_sv((CV*)sref)))))
3960 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3962 ? "Constant subroutine %s::%s redefined"
3963 : "Subroutine %s::%s redefined",
3964 HvNAME_get(GvSTASH((GV*)dstr)),
3965 GvENAME((GV*)dstr));
3969 cv_ckproto(cv, (GV*)dstr,
3970 SvPOK(sref) ? SvPVX(sref) : Nullch);
3972 GvCV(dstr) = (CV*)sref;
3973 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3974 GvASSUMECV_on(dstr);
3975 PL_sub_generation++;
3977 if (!GvIMPORTED_CV(dstr)
3978 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3980 GvIMPORTED_CV_on(dstr);
3985 SAVEGENERICSV(GvIOp(dstr));
3987 dref = (SV*)GvIOp(dstr);
3988 GvIOp(dstr) = (IO*)sref;
3992 SAVEGENERICSV(GvFORM(dstr));
3994 dref = (SV*)GvFORM(dstr);
3995 GvFORM(dstr) = (CV*)sref;
3999 SAVEGENERICSV(GvSV(dstr));
4001 dref = (SV*)GvSV(dstr);
4003 if (!GvIMPORTED_SV(dstr)
4004 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4006 GvIMPORTED_SV_on(dstr);
4012 if (SvTAINTED(sstr))
4016 if (SvPVX_const(dstr)) {
4022 (void)SvOK_off(dstr);
4023 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4025 if (sflags & SVp_NOK) {
4027 /* Only set the public OK flag if the source has public OK. */
4028 if (sflags & SVf_NOK)
4029 SvFLAGS(dstr) |= SVf_NOK;
4030 SvNV_set(dstr, SvNVX(sstr));
4032 if (sflags & SVp_IOK) {
4033 (void)SvIOKp_on(dstr);
4034 if (sflags & SVf_IOK)
4035 SvFLAGS(dstr) |= SVf_IOK;
4036 if (sflags & SVf_IVisUV)
4038 SvIV_set(dstr, SvIVX(sstr));
4040 if (SvAMAGIC(sstr)) {
4044 else if (sflags & SVp_POK) {
4047 * Check to see if we can just swipe the string. If so, it's a
4048 * possible small lose on short strings, but a big win on long ones.
4049 * It might even be a win on short strings if SvPVX_const(dstr)
4050 * has to be allocated and SvPVX_const(sstr) has to be freed.
4053 if (SvTEMP(sstr) && /* slated for free anyway? */
4054 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4055 (!(flags & SV_NOSTEAL)) && /* and we're allowed to steal temps */
4056 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4057 SvLEN(sstr) && /* and really is a string */
4058 /* and won't be needed again, potentially */
4059 !(PL_op && PL_op->op_type == OP_AASSIGN))
4061 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4063 SvFLAGS(dstr) &= ~SVf_OOK;
4064 Safefree(SvPVX_const(dstr) - SvIVX(dstr));
4066 else if (SvLEN(dstr))
4067 Safefree(SvPVX_const(dstr));
4069 (void)SvPOK_only(dstr);
4070 SvPV_set(dstr, SvPVX(sstr));
4071 SvLEN_set(dstr, SvLEN(sstr));
4072 SvCUR_set(dstr, SvCUR(sstr));
4075 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4076 SvPV_set(sstr, Nullch);
4081 else { /* have to copy actual string */
4082 STRLEN len = SvCUR(sstr);
4083 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4084 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4085 SvCUR_set(dstr, len);
4086 *SvEND(dstr) = '\0';
4087 (void)SvPOK_only(dstr);
4089 if (sflags & SVf_UTF8)
4092 if (sflags & SVp_NOK) {
4094 if (sflags & SVf_NOK)
4095 SvFLAGS(dstr) |= SVf_NOK;
4096 SvNV_set(dstr, SvNVX(sstr));
4098 if (sflags & SVp_IOK) {
4099 (void)SvIOKp_on(dstr);
4100 if (sflags & SVf_IOK)
4101 SvFLAGS(dstr) |= SVf_IOK;
4102 if (sflags & SVf_IVisUV)
4104 SvIV_set(dstr, SvIVX(sstr));
4106 if ( SvVOK(sstr) ) {
4107 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4108 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4109 smg->mg_ptr, smg->mg_len);
4110 SvRMAGICAL_on(dstr);
4113 else if (sflags & SVp_IOK) {
4114 if (sflags & SVf_IOK)
4115 (void)SvIOK_only(dstr);
4117 (void)SvOK_off(dstr);
4118 (void)SvIOKp_on(dstr);
4120 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4121 if (sflags & SVf_IVisUV)
4123 SvIV_set(dstr, SvIVX(sstr));
4124 if (sflags & SVp_NOK) {
4125 if (sflags & SVf_NOK)
4126 (void)SvNOK_on(dstr);
4128 (void)SvNOKp_on(dstr);
4129 SvNV_set(dstr, SvNVX(sstr));
4132 else if (sflags & SVp_NOK) {
4133 if (sflags & SVf_NOK)
4134 (void)SvNOK_only(dstr);
4136 (void)SvOK_off(dstr);
4139 SvNV_set(dstr, SvNVX(sstr));
4142 if (dtype == SVt_PVGV) {
4143 if (ckWARN(WARN_MISC))
4144 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4147 (void)SvOK_off(dstr);
4149 if (SvTAINTED(sstr))
4154 =for apidoc sv_setsv_mg
4156 Like C<sv_setsv>, but also handles 'set' magic.
4162 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4164 sv_setsv(dstr,sstr);
4169 =for apidoc sv_setpvn
4171 Copies a string into an SV. The C<len> parameter indicates the number of
4172 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4173 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4179 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4181 register char *dptr;
4183 SV_CHECK_THINKFIRST(sv);
4189 /* len is STRLEN which is unsigned, need to copy to signed */
4192 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4194 (void)SvUPGRADE(sv, SVt_PV);
4196 SvGROW(sv, len + 1);
4198 Move(ptr,dptr,len,char);
4201 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4206 =for apidoc sv_setpvn_mg
4208 Like C<sv_setpvn>, but also handles 'set' magic.
4214 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4216 sv_setpvn(sv,ptr,len);
4221 =for apidoc sv_setpv
4223 Copies a string into an SV. The string must be null-terminated. Does not
4224 handle 'set' magic. See C<sv_setpv_mg>.
4230 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4232 register STRLEN len;
4234 SV_CHECK_THINKFIRST(sv);
4240 (void)SvUPGRADE(sv, SVt_PV);
4242 SvGROW(sv, len + 1);
4243 Move(ptr,SvPVX(sv),len+1,char);
4245 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4250 =for apidoc sv_setpv_mg
4252 Like C<sv_setpv>, but also handles 'set' magic.
4258 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4265 =for apidoc sv_usepvn
4267 Tells an SV to use C<ptr> to find its string value. Normally the string is
4268 stored inside the SV but sv_usepvn allows the SV to use an outside string.
4269 The C<ptr> should point to memory that was allocated by C<malloc>. The
4270 string length, C<len>, must be supplied. This function will realloc the
4271 memory pointed to by C<ptr>, so that pointer should not be freed or used by
4272 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
4273 See C<sv_usepvn_mg>.
4279 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4282 SV_CHECK_THINKFIRST(sv);
4283 (void)SvUPGRADE(sv, SVt_PV);
4288 if (SvPVX_const(sv))
4291 allocate = PERL_STRLEN_ROUNDUP(len + 1);
4292 ptr = saferealloc (ptr, allocate);
4295 SvLEN_set(sv, allocate);
4297 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4302 =for apidoc sv_usepvn_mg
4304 Like C<sv_usepvn>, but also handles 'set' magic.
4310 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4312 sv_usepvn(sv,ptr,len);
4317 =for apidoc sv_force_normal_flags
4319 Undo various types of fakery on an SV: if the PV is a shared string, make
4320 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4321 an xpvmg. The C<flags> parameter gets passed to C<sv_unref_flags()>
4322 when unrefing. C<sv_force_normal> calls this function with flags set to 0.
4328 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4330 if (SvREADONLY(sv)) {
4332 const char *pvx = SvPVX_const(sv);
4333 STRLEN len = SvCUR(sv);
4334 U32 hash = SvUVX(sv);
4337 SvGROW(sv, len + 1);
4338 Move(pvx,SvPVX_const(sv),len,char);
4340 unsharepvn(pvx, SvUTF8(sv) ? -(I32)len : len, hash);
4342 else if (IN_PERL_RUNTIME)
4343 Perl_croak(aTHX_ PL_no_modify);
4346 sv_unref_flags(sv, flags);
4347 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4352 =for apidoc sv_force_normal
4354 Undo various types of fakery on an SV: if the PV is a shared string, make
4355 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4356 an xpvmg. See also C<sv_force_normal_flags>.
4362 Perl_sv_force_normal(pTHX_ register SV *sv)
4364 sv_force_normal_flags(sv, 0);
4370 Efficient removal of characters from the beginning of the string buffer.
4371 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4372 the string buffer. The C<ptr> becomes the first character of the adjusted
4373 string. Uses the "OOK hack".
4374 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4375 refer to the same chunk of data.
4381 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr)
4383 register STRLEN delta;
4384 if (!ptr || !SvPOKp(sv))
4386 delta = ptr - SvPVX_const(sv);
4387 SV_CHECK_THINKFIRST(sv);
4388 if (SvTYPE(sv) < SVt_PVIV)
4389 sv_upgrade(sv,SVt_PVIV);
4392 if (!SvLEN(sv)) { /* make copy of shared string */
4393 const char *pvx = SvPVX_const(sv);
4394 STRLEN len = SvCUR(sv);
4395 SvGROW(sv, len + 1);
4396 Move(pvx,SvPVX_const(sv),len,char);
4400 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4401 and we do that anyway inside the SvNIOK_off
4403 SvFLAGS(sv) |= SVf_OOK;
4406 SvLEN_set(sv, SvLEN(sv) - delta);
4407 SvCUR_set(sv, SvCUR(sv) - delta);
4408 SvPV_set(sv, SvPVX(sv) + delta);
4409 SvIV_set(sv, SvIVX(sv) + delta);
4412 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
4413 * this function provided for binary compatibility only
4417 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
4419 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
4423 =for apidoc sv_catpvn
4425 Concatenates the string onto the end of the string which is in the SV. The
4426 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4427 status set, then the bytes appended should be valid UTF-8.
4428 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4430 =for apidoc sv_catpvn_flags
4432 Concatenates the string onto the end of the string which is in the SV. The
4433 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4434 status set, then the bytes appended should be valid UTF-8.
4435 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4436 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4437 in terms of this function.
4443 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4446 const char *dstr = SvPV_force_flags(dsv, dlen, flags);
4448 SvGROW(dsv, dlen + slen + 1);
4450 sstr = SvPVX_const(dsv);
4451 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4452 SvCUR_set(dsv, SvCUR(dsv) + slen);
4454 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4459 =for apidoc sv_catpvn_mg
4461 Like C<sv_catpvn>, but also handles 'set' magic.
4467 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4469 sv_catpvn(sv,ptr,len);
4473 /* sv_catsv() is now a macro using Perl_sv_catsv_flags();
4474 * this function provided for binary compatibility only
4478 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
4480 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
4484 =for apidoc sv_catsv
4486 Concatenates the string from SV C<ssv> onto the end of the string in
4487 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4488 not 'set' magic. See C<sv_catsv_mg>.
4490 =for apidoc sv_catsv_flags
4492 Concatenates the string from SV C<ssv> onto the end of the string in
4493 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4494 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4495 and C<sv_catsv_nomg> are implemented in terms of this function.
4500 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4506 if ((spv = SvPV(ssv, slen))) {
4507 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4508 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4509 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4510 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4511 dsv->sv_flags doesn't have that bit set.
4512 Andy Dougherty 12 Oct 2001
4514 const I32 sutf8 = DO_UTF8(ssv);
4517 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4519 dutf8 = DO_UTF8(dsv);
4521 if (dutf8 != sutf8) {
4523 /* Not modifying source SV, so taking a temporary copy. */
4524 SV* csv = sv_2mortal(newSVpvn(spv, slen));
4526 sv_utf8_upgrade(csv);
4527 spv = SvPV(csv, slen);
4530 sv_utf8_upgrade_nomg(dsv);
4532 sv_catpvn_nomg(dsv, spv, slen);
4537 =for apidoc sv_catsv_mg
4539 Like C<sv_catsv>, but also handles 'set' magic.
4545 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
4552 =for apidoc sv_catpv
4554 Concatenates the string onto the end of the string which is in the SV.
4555 If the SV has the UTF-8 status set, then the bytes appended should be
4556 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4561 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4563 register STRLEN len;
4569 junk = SvPV_force(sv, tlen);
4571 SvGROW(sv, tlen + len + 1);
4573 ptr = SvPVX_const(sv);
4574 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4575 SvCUR_set(sv, SvCUR(sv) + len);
4576 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4581 =for apidoc sv_catpv_mg
4583 Like C<sv_catpv>, but also handles 'set' magic.
4589 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4598 Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
4599 with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
4606 Perl_newSV(pTHX_ STRLEN len)
4612 sv_upgrade(sv, SVt_PV);
4613 SvGROW(sv, len + 1);
4618 =for apidoc sv_magicext
4620 Adds magic to an SV, upgrading it if necessary. Applies the
4621 supplied vtable and returns a pointer to the magic added.
4623 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4624 In particular, you can add magic to SvREADONLY SVs, and add more than
4625 one instance of the same 'how'.
4627 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4628 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4629 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4630 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4632 (This is now used as a subroutine by C<sv_magic>.)
4637 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
4638 const char* name, I32 namlen)
4642 if (SvTYPE(sv) < SVt_PVMG) {
4643 (void)SvUPGRADE(sv, SVt_PVMG);
4645 Newz(702,mg, 1, MAGIC);
4646 mg->mg_moremagic = SvMAGIC(sv);
4647 SvMAGIC_set(sv, mg);
4649 /* Sometimes a magic contains a reference loop, where the sv and
4650 object refer to each other. To prevent a reference loop that
4651 would prevent such objects being freed, we look for such loops
4652 and if we find one we avoid incrementing the object refcount.
4654 Note we cannot do this to avoid self-tie loops as intervening RV must
4655 have its REFCNT incremented to keep it in existence.
4658 if (!obj || obj == sv ||
4659 how == PERL_MAGIC_arylen ||
4660 how == PERL_MAGIC_qr ||
4661 (SvTYPE(obj) == SVt_PVGV &&
4662 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4663 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4664 GvFORM(obj) == (CV*)sv)))
4669 mg->mg_obj = SvREFCNT_inc(obj);
4670 mg->mg_flags |= MGf_REFCOUNTED;
4673 /* Normal self-ties simply pass a null object, and instead of
4674 using mg_obj directly, use the SvTIED_obj macro to produce a
4675 new RV as needed. For glob "self-ties", we are tieing the PVIO
4676 with an RV obj pointing to the glob containing the PVIO. In
4677 this case, to avoid a reference loop, we need to weaken the
4681 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4682 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4688 mg->mg_len = namlen;
4691 mg->mg_ptr = savepvn(name, namlen);
4692 else if (namlen == HEf_SVKEY)
4693 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4695 mg->mg_ptr = (char *) name;
4697 mg->mg_virtual = vtable;
4701 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4706 =for apidoc sv_magic
4708 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4709 then adds a new magic item of type C<how> to the head of the magic list.
4711 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4712 handling of the C<name> and C<namlen> arguments.
4714 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4715 to add more than one instance of the same 'how'.
4721 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4723 const MGVTBL *vtable = 0;
4726 if (SvREADONLY(sv)) {
4728 && how != PERL_MAGIC_regex_global
4729 && how != PERL_MAGIC_bm
4730 && how != PERL_MAGIC_fm
4731 && how != PERL_MAGIC_sv
4732 && how != PERL_MAGIC_backref
4735 Perl_croak(aTHX_ PL_no_modify);
4738 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4739 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4740 /* sv_magic() refuses to add a magic of the same 'how' as an
4743 if (how == PERL_MAGIC_taint)
4751 vtable = &PL_vtbl_sv;
4753 case PERL_MAGIC_overload:
4754 vtable = &PL_vtbl_amagic;
4756 case PERL_MAGIC_overload_elem:
4757 vtable = &PL_vtbl_amagicelem;
4759 case PERL_MAGIC_overload_table:
4760 vtable = &PL_vtbl_ovrld;
4763 vtable = &PL_vtbl_bm;
4765 case PERL_MAGIC_regdata:
4766 vtable = &PL_vtbl_regdata;
4768 case PERL_MAGIC_regdatum:
4769 vtable = &PL_vtbl_regdatum;
4771 case PERL_MAGIC_env:
4772 vtable = &PL_vtbl_env;
4775 vtable = &PL_vtbl_fm;
4777 case PERL_MAGIC_envelem:
4778 vtable = &PL_vtbl_envelem;
4780 case PERL_MAGIC_regex_global:
4781 vtable = &PL_vtbl_mglob;
4783 case PERL_MAGIC_isa:
4784 vtable = &PL_vtbl_isa;
4786 case PERL_MAGIC_isaelem:
4787 vtable = &PL_vtbl_isaelem;
4789 case PERL_MAGIC_nkeys:
4790 vtable = &PL_vtbl_nkeys;
4792 case PERL_MAGIC_dbfile:
4795 case PERL_MAGIC_dbline:
4796 vtable = &PL_vtbl_dbline;
4798 #ifdef USE_5005THREADS
4799 case PERL_MAGIC_mutex:
4800 vtable = &PL_vtbl_mutex;
4802 #endif /* USE_5005THREADS */
4803 #ifdef USE_LOCALE_COLLATE
4804 case PERL_MAGIC_collxfrm:
4805 vtable = &PL_vtbl_collxfrm;
4807 #endif /* USE_LOCALE_COLLATE */
4808 case PERL_MAGIC_tied:
4809 vtable = &PL_vtbl_pack;
4811 case PERL_MAGIC_tiedelem:
4812 case PERL_MAGIC_tiedscalar:
4813 vtable = &PL_vtbl_packelem;
4816 vtable = &PL_vtbl_regexp;
4818 case PERL_MAGIC_sig:
4819 vtable = &PL_vtbl_sig;
4821 case PERL_MAGIC_sigelem:
4822 vtable = &PL_vtbl_sigelem;
4824 case PERL_MAGIC_taint:
4825 vtable = &PL_vtbl_taint;
4827 case PERL_MAGIC_uvar:
4828 vtable = &PL_vtbl_uvar;
4830 case PERL_MAGIC_vec:
4831 vtable = &PL_vtbl_vec;
4833 case PERL_MAGIC_vstring:
4836 case PERL_MAGIC_utf8:
4837 vtable = &PL_vtbl_utf8;
4839 case PERL_MAGIC_substr:
4840 vtable = &PL_vtbl_substr;
4842 case PERL_MAGIC_defelem:
4843 vtable = &PL_vtbl_defelem;
4845 case PERL_MAGIC_glob:
4846 vtable = &PL_vtbl_glob;
4848 case PERL_MAGIC_arylen:
4849 vtable = &PL_vtbl_arylen;
4851 case PERL_MAGIC_pos:
4852 vtable = &PL_vtbl_pos;
4854 case PERL_MAGIC_backref:
4855 vtable = &PL_vtbl_backref;
4857 case PERL_MAGIC_ext:
4858 /* Reserved for use by extensions not perl internals. */
4859 /* Useful for attaching extension internal data to perl vars. */
4860 /* Note that multiple extensions may clash if magical scalars */
4861 /* etc holding private data from one are passed to another. */
4864 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4867 /* Rest of work is done else where */
4868 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4871 case PERL_MAGIC_taint:
4874 case PERL_MAGIC_ext:
4875 case PERL_MAGIC_dbfile:
4882 =for apidoc sv_unmagic
4884 Removes all magic of type C<type> from an SV.
4890 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4894 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4897 for (mg = *mgp; mg; mg = *mgp) {
4898 if (mg->mg_type == type) {
4899 const MGVTBL* const vtbl = mg->mg_virtual;
4900 *mgp = mg->mg_moremagic;
4901 if (vtbl && vtbl->svt_free)
4902 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4903 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4905 Safefree(mg->mg_ptr);
4906 else if (mg->mg_len == HEf_SVKEY)
4907 SvREFCNT_dec((SV*)mg->mg_ptr);
4908 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
4909 Safefree(mg->mg_ptr);
4911 if (mg->mg_flags & MGf_REFCOUNTED)
4912 SvREFCNT_dec(mg->mg_obj);
4916 mgp = &mg->mg_moremagic;
4920 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4927 =for apidoc sv_rvweaken
4929 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4930 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4931 push a back-reference to this RV onto the array of backreferences
4932 associated with that magic.
4938 Perl_sv_rvweaken(pTHX_ SV *sv)
4941 if (!SvOK(sv)) /* let undefs pass */
4944 Perl_croak(aTHX_ "Can't weaken a nonreference");
4945 else if (SvWEAKREF(sv)) {
4946 if (ckWARN(WARN_MISC))
4947 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4951 sv_add_backref(tsv, sv);
4957 /* Give tsv backref magic if it hasn't already got it, then push a
4958 * back-reference to sv onto the array associated with the backref magic.
4962 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4966 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
4967 av = (AV*)mg->mg_obj;
4970 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4971 /* av now has a refcnt of 2, which avoids it getting freed
4972 * before us during global cleanup. The extra ref is removed
4973 * by magic_killbackrefs() when tsv is being freed */
4975 if (AvFILLp(av) >= AvMAX(av)) {
4976 av_extend(av, AvFILLp(av)+1);
4978 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
4981 /* delete a back-reference to ourselves from the backref magic associated
4982 * with the SV we point to.
4986 S_sv_del_backref(pTHX_ SV *sv)
4993 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
4994 Perl_croak(aTHX_ "panic: del_backref");
4995 av = (AV *)mg->mg_obj;
4997 /* We shouldn't be in here more than once, but for paranoia reasons lets
4999 for (i = AvFILLp(av); i >= 0; i--) {
5001 const SSize_t fill = AvFILLp(av);
5003 /* We weren't the last entry.
5004 An unordered list has this property that you can take the
5005 last element off the end to fill the hole, and it's still
5006 an unordered list :-)
5011 AvFILLp(av) = fill - 1;
5017 =for apidoc sv_insert
5019 Inserts a string at the specified offset/length within the SV. Similar to
5020 the Perl substr() function.
5026 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
5030 register char *midend;
5031 register char *bigend;
5037 Perl_croak(aTHX_ "Can't modify non-existent substring");
5038 SvPV_force(bigstr, curlen);
5039 (void)SvPOK_only_UTF8(bigstr);
5040 if (offset + len > curlen) {
5041 SvGROW(bigstr, offset+len+1);
5042 Zero(SvPVX_const(bigstr)+curlen, offset+len-curlen, char);
5043 SvCUR_set(bigstr, offset+len);
5047 i = littlelen - len;
5048 if (i > 0) { /* string might grow */
5049 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5050 mid = big + offset + len;
5051 midend = bigend = big + SvCUR(bigstr);
5054 while (midend > mid) /* shove everything down */
5055 *--bigend = *--midend;
5056 Move(little,big+offset,littlelen,char);
5057 SvCUR_set(bigstr, SvCUR(bigstr) + i);
5062 Move(little,SvPVX(bigstr)+offset,len,char);
5067 big = SvPVX(bigstr);
5070 bigend = big + SvCUR(bigstr);
5072 if (midend > bigend)
5073 Perl_croak(aTHX_ "panic: sv_insert");
5075 if (mid - big > bigend - midend) { /* faster to shorten from end */
5077 Move(little, mid, littlelen,char);
5080 i = bigend - midend;
5082 Move(midend, mid, i,char);
5086 SvCUR_set(bigstr, mid - big);
5089 else if ((i = mid - big)) { /* faster from front */
5090 midend -= littlelen;
5092 sv_chop(bigstr,midend-i);
5097 Move(little, mid, littlelen,char);
5099 else if (littlelen) {
5100 midend -= littlelen;
5101 sv_chop(bigstr,midend);
5102 Move(little,midend,littlelen,char);
5105 sv_chop(bigstr,midend);
5111 =for apidoc sv_replace
5113 Make the first argument a copy of the second, then delete the original.
5114 The target SV physically takes over ownership of the body of the source SV
5115 and inherits its flags; however, the target keeps any magic it owns,
5116 and any magic in the source is discarded.
5117 Note that this is a rather specialist SV copying operation; most of the
5118 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5124 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
5126 const U32 refcnt = SvREFCNT(sv);
5127 SV_CHECK_THINKFIRST(sv);
5128 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
5129 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Reference miscount in sv_replace()");
5130 if (SvMAGICAL(sv)) {
5134 sv_upgrade(nsv, SVt_PVMG);
5135 SvMAGIC_set(nsv, SvMAGIC(sv));
5136 SvFLAGS(nsv) |= SvMAGICAL(sv);
5138 SvMAGIC_set(sv, NULL);
5142 assert(!SvREFCNT(sv));
5143 StructCopy(nsv,sv,SV);
5144 SvREFCNT(sv) = refcnt;
5145 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5151 =for apidoc sv_clear
5153 Clear an SV: call any destructors, free up any memory used by the body,
5154 and free the body itself. The SV's head is I<not> freed, although
5155 its type is set to all 1's so that it won't inadvertently be assumed
5156 to be live during global destruction etc.
5157 This function should only be called when REFCNT is zero. Most of the time
5158 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5165 Perl_sv_clear(pTHX_ register SV *sv)
5169 assert(SvREFCNT(sv) == 0);
5172 if (PL_defstash) { /* Still have a symbol table? */
5176 stash = SvSTASH(sv);
5177 destructor = StashHANDLER(stash,DESTROY);
5179 SV* tmpref = newRV(sv);
5180 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5182 PUSHSTACKi(PERLSI_DESTROY);
5187 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5193 if(SvREFCNT(tmpref) < 2) {
5194 /* tmpref is not kept alive! */
5196 SvRV_set(tmpref, NULL);
5199 SvREFCNT_dec(tmpref);
5201 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5205 if (PL_in_clean_objs)
5206 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5208 /* DESTROY gave object new lease on life */
5214 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5215 SvOBJECT_off(sv); /* Curse the object. */
5216 if (SvTYPE(sv) != SVt_PVIO)
5217 --PL_sv_objcount; /* XXX Might want something more general */
5220 if (SvTYPE(sv) >= SVt_PVMG) {
5223 if (SvTYPE(sv) == SVt_PVMG && SvFLAGS(sv) & SVpad_TYPED)
5224 SvREFCNT_dec(SvSTASH(sv));
5227 switch (SvTYPE(sv)) {
5230 IoIFP(sv) != PerlIO_stdin() &&
5231 IoIFP(sv) != PerlIO_stdout() &&
5232 IoIFP(sv) != PerlIO_stderr())
5234 io_close((IO*)sv, FALSE);
5236 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5237 PerlDir_close(IoDIRP(sv));
5238 IoDIRP(sv) = (DIR*)NULL;
5239 Safefree(IoTOP_NAME(sv));
5240 Safefree(IoFMT_NAME(sv));
5241 Safefree(IoBOTTOM_NAME(sv));
5256 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5257 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5258 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5259 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5261 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
5262 SvREFCNT_dec(LvTARG(sv));
5266 Safefree(GvNAME(sv));
5267 /* cannot decrease stash refcount yet, as we might recursively delete
5268 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
5269 of stash until current sv is completely gone.
5270 -- JohnPC, 27 Mar 1998 */
5271 stash = GvSTASH(sv);
5277 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
5279 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
5280 /* Don't even bother with turning off the OOK flag. */
5289 SvREFCNT_dec(SvRV(sv));
5291 else if (SvPVX_const(sv) && SvLEN(sv))
5292 Safefree(SvPVX_const(sv));
5293 else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5294 unsharepvn(SvPVX_const(sv),
5295 SvUTF8(sv) ? -(I32)SvCUR(sv) : SvCUR(sv),
5308 switch (SvTYPE(sv)) {
5324 del_XPVIV(SvANY(sv));
5327 del_XPVNV(SvANY(sv));
5330 del_XPVMG(SvANY(sv));
5333 del_XPVLV(SvANY(sv));
5336 del_XPVAV(SvANY(sv));
5339 del_XPVHV(SvANY(sv));
5342 del_XPVCV(SvANY(sv));
5345 del_XPVGV(SvANY(sv));
5346 /* code duplication for increased performance. */
5347 SvFLAGS(sv) &= SVf_BREAK;
5348 SvFLAGS(sv) |= SVTYPEMASK;
5349 /* decrease refcount of the stash that owns this GV, if any */
5351 SvREFCNT_dec(stash);
5352 return; /* not break, SvFLAGS reset already happened */
5354 del_XPVBM(SvANY(sv));
5357 del_XPVFM(SvANY(sv));
5360 del_XPVIO(SvANY(sv));
5363 SvFLAGS(sv) &= SVf_BREAK;
5364 SvFLAGS(sv) |= SVTYPEMASK;
5368 =for apidoc sv_newref
5370 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5377 Perl_sv_newref(pTHX_ SV *sv)
5380 ATOMIC_INC(SvREFCNT(sv));
5387 Decrement an SV's reference count, and if it drops to zero, call
5388 C<sv_clear> to invoke destructors and free up any memory used by
5389 the body; finally, deallocate the SV's head itself.
5390 Normally called via a wrapper macro C<SvREFCNT_dec>.
5396 Perl_sv_free(pTHX_ SV *sv)
5398 int refcount_is_zero;
5402 if (SvREFCNT(sv) == 0) {
5403 if (SvFLAGS(sv) & SVf_BREAK)
5404 /* this SV's refcnt has been artificially decremented to
5405 * trigger cleanup */
5407 if (PL_in_clean_all) /* All is fair */
5409 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5410 /* make sure SvREFCNT(sv)==0 happens very seldom */
5411 SvREFCNT(sv) = (~(U32)0)/2;
5414 if (ckWARN_d(WARN_INTERNAL))
5415 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5416 "Attempt to free unreferenced scalar: SV 0x%"UVxf
5417 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5420 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
5421 if (!refcount_is_zero)
5425 if (ckWARN_d(WARN_DEBUGGING))
5426 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5427 "Attempt to free temp prematurely: SV 0x%"UVxf
5428 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5432 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5433 /* make sure SvREFCNT(sv)==0 happens very seldom */
5434 SvREFCNT(sv) = (~(U32)0)/2;
5445 Returns the length of the string in the SV. Handles magic and type
5446 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5452 Perl_sv_len(pTHX_ register SV *sv)
5460 len = mg_length(sv);
5462 (void)SvPV(sv, len);
5467 =for apidoc sv_len_utf8
5469 Returns the number of characters in the string in an SV, counting wide
5470 UTF-8 bytes as a single character. Handles magic and type coercion.
5476 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
5477 * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init().
5478 * (Note that the mg_len is not the length of the mg_ptr field.)
5483 Perl_sv_len_utf8(pTHX_ register SV *sv)
5489 return mg_length(sv);
5493 const U8 *s = (U8*)SvPV(sv, len);
5494 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
5496 if (mg && mg->mg_len != -1 && (mg->mg_len > 0 || len == 0)) {
5498 #ifdef PERL_UTF8_CACHE_ASSERT
5499 assert(ulen == Perl_utf8_length(aTHX_ s, s + len));
5503 ulen = Perl_utf8_length(aTHX_ s, s + len);
5504 if (!mg && !SvREADONLY(sv)) {
5505 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5506 mg = mg_find(sv, PERL_MAGIC_utf8);
5516 /* S_utf8_mg_pos_init() is used to initialize the mg_ptr field of
5517 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5518 * between UTF-8 and byte offsets. There are two (substr offset and substr
5519 * length, the i offset, PERL_MAGIC_UTF8_CACHESIZE) times two (UTF-8 offset
5520 * and byte offset) cache positions.
5522 * The mg_len field is used by sv_len_utf8(), see its comments.
5523 * Note that the mg_len is not the length of the mg_ptr field.
5527 S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 offsetp, U8 *s, U8 *start)
5531 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5533 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
5537 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5539 Newz(0, *cachep, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5540 (*mgp)->mg_ptr = (char *) *cachep;
5544 (*cachep)[i] = offsetp;
5545 (*cachep)[i+1] = s - start;
5553 * S_utf8_mg_pos() is used to query and update mg_ptr field of
5554 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
5555 * between UTF-8 and byte offsets. See also the comments of
5556 * S_utf8_mg_pos_init().
5560 S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I32 uoff, U8 **sp, U8 *start, U8 *send)
5564 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5566 *mgp = mg_find(sv, PERL_MAGIC_utf8);
5567 if (*mgp && (*mgp)->mg_ptr) {
5568 *cachep = (STRLEN *) (*mgp)->mg_ptr;
5569 ASSERT_UTF8_CACHE(*cachep);
5570 if ((*cachep)[i] == (STRLEN)uoff) /* An exact match. */
5572 else { /* We will skip to the right spot. */
5577 /* The assumption is that going backward is half
5578 * the speed of going forward (that's where the
5579 * 2 * backw in the below comes from). (The real
5580 * figure of course depends on the UTF-8 data.) */
5582 if ((*cachep)[i] > (STRLEN)uoff) {
5584 backw = (*cachep)[i] - (STRLEN)uoff;
5586 if (forw < 2 * backw)
5589 p = start + (*cachep)[i+1];
5591 /* Try this only for the substr offset (i == 0),
5592 * not for the substr length (i == 2). */
5593 else if (i == 0) { /* (*cachep)[i] < uoff */
5594 const STRLEN ulen = sv_len_utf8(sv);
5596 if ((STRLEN)uoff < ulen) {
5597 forw = (STRLEN)uoff - (*cachep)[i];
5598 backw = ulen - (STRLEN)uoff;
5600 if (forw < 2 * backw)
5601 p = start + (*cachep)[i+1];
5606 /* If the string is not long enough for uoff,
5607 * we could extend it, but not at this low a level. */
5611 if (forw < 2 * backw) {
5618 while (UTF8_IS_CONTINUATION(*p))
5623 /* Update the cache. */
5624 (*cachep)[i] = (STRLEN)uoff;
5625 (*cachep)[i+1] = p - start;
5627 /* Drop the stale "length" cache */
5636 if (found) { /* Setup the return values. */
5637 *offsetp = (*cachep)[i+1];
5638 *sp = start + *offsetp;
5641 *offsetp = send - start;
5643 else if (*sp < start) {
5649 #ifdef PERL_UTF8_CACHE_ASSERT
5654 while (n-- && s < send)
5658 assert(*offsetp == s - start);
5659 assert((*cachep)[0] == (STRLEN)uoff);
5660 assert((*cachep)[1] == *offsetp);
5662 ASSERT_UTF8_CACHE(*cachep);
5671 =for apidoc sv_pos_u2b
5673 Converts the value pointed to by offsetp from a count of UTF-8 chars from
5674 the start of the string, to a count of the equivalent number of bytes; if
5675 lenp is non-zero, it does the same to lenp, but this time starting from
5676 the offset, rather than from the start of the string. Handles magic and
5683 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5684 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5685 * byte offsets. See also the comments of S_utf8_mg_pos().
5690 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
5698 start = (U8*)SvPV(sv, len);
5703 I32 uoffset = *offsetp;
5708 if (utf8_mg_pos(sv, &mg, &cache, 0, offsetp, *offsetp, &s, start, send))
5710 if (!found && uoffset > 0) {
5711 while (s < send && uoffset--)
5715 if (utf8_mg_pos_init(sv, &mg, &cache, 0, *offsetp, s, start))
5717 *offsetp = s - start;
5722 if (utf8_mg_pos(sv, &mg, &cache, 2, lenp, *lenp, &s, start, send)) {
5726 if (!found && *lenp > 0) {
5729 while (s < send && ulen--)
5733 utf8_mg_pos_init(sv, &mg, &cache, 2, *lenp, s, start);
5737 ASSERT_UTF8_CACHE(cache);
5749 =for apidoc sv_pos_b2u
5751 Converts the value pointed to by offsetp from a count of bytes from the
5752 start of the string, to a count of the equivalent number of UTF-8 chars.
5753 Handles magic and type coercion.
5759 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5760 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5761 * byte offsets. See also the comments of S_utf8_mg_pos().
5766 Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
5774 s = (U8*)SvPV(sv, len);
5775 if ((I32)len < *offsetp)
5776 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
5778 U8* send = s + *offsetp;
5780 STRLEN *cache = NULL;
5784 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5785 mg = mg_find(sv, PERL_MAGIC_utf8);
5786 if (mg && mg->mg_ptr) {
5787 cache = (STRLEN *) mg->mg_ptr;
5788 if (cache[1] == (STRLEN)*offsetp) {
5789 /* An exact match. */
5790 *offsetp = cache[0];
5794 else if (cache[1] < (STRLEN)*offsetp) {
5795 /* We already know part of the way. */
5798 /* Let the below loop do the rest. */
5800 else { /* cache[1] > *offsetp */
5801 /* We already know all of the way, now we may
5802 * be able to walk back. The same assumption
5803 * is made as in S_utf8_mg_pos(), namely that
5804 * walking backward is twice slower than
5805 * walking forward. */
5806 STRLEN forw = *offsetp;
5807 STRLEN backw = cache[1] - *offsetp;
5809 if (!(forw < 2 * backw)) {
5810 U8 *p = s + cache[1];
5817 while (UTF8_IS_CONTINUATION(*p)) {
5825 *offsetp = cache[0];
5827 /* Drop the stale "length" cache */
5835 ASSERT_UTF8_CACHE(cache);
5841 /* Call utf8n_to_uvchr() to validate the sequence
5842 * (unless a simple non-UTF character) */
5843 if (!UTF8_IS_INVARIANT(*s))
5844 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
5853 if (!SvREADONLY(sv)) {
5855 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5856 mg = mg_find(sv, PERL_MAGIC_utf8);
5861 Newz(0, cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5862 mg->mg_ptr = (char *) cache;
5867 cache[1] = *offsetp;
5868 /* Drop the stale "length" cache */
5882 Returns a boolean indicating whether the strings in the two SVs are
5883 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5884 coerce its args to strings if necessary.
5890 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
5898 SV* svrecode = Nullsv;
5905 pv1 = SvPV(sv1, cur1);
5912 pv2 = SvPV(sv2, cur2);
5914 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5915 /* Differing utf8ness.
5916 * Do not UTF8size the comparands as a side-effect. */
5919 svrecode = newSVpvn(pv2, cur2);
5920 sv_recode_to_utf8(svrecode, PL_encoding);
5921 pv2 = SvPV(svrecode, cur2);
5924 svrecode = newSVpvn(pv1, cur1);
5925 sv_recode_to_utf8(svrecode, PL_encoding);
5926 pv1 = SvPV(svrecode, cur1);
5928 /* Now both are in UTF-8. */
5930 SvREFCNT_dec(svrecode);
5935 bool is_utf8 = TRUE;
5938 /* sv1 is the UTF-8 one,
5939 * if is equal it must be downgrade-able */
5940 char *pv = (char*)bytes_from_utf8((const U8*)pv1,
5946 /* sv2 is the UTF-8 one,
5947 * if is equal it must be downgrade-able */
5948 char *pv = (char *)bytes_from_utf8((const U8*)pv2,
5954 /* Downgrade not possible - cannot be eq */
5961 eq = memEQ(pv1, pv2, cur1);
5964 SvREFCNT_dec(svrecode);
5975 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
5976 string in C<sv1> is less than, equal to, or greater than the string in
5977 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5978 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
5984 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
5987 const char *pv1, *pv2;
5990 SV *svrecode = Nullsv;
5997 pv1 = SvPV(sv1, cur1);
6004 pv2 = SvPV(sv2, cur2);
6006 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6007 /* Differing utf8ness.
6008 * Do not UTF8size the comparands as a side-effect. */
6011 svrecode = newSVpvn(pv2, cur2);
6012 sv_recode_to_utf8(svrecode, PL_encoding);
6013 pv2 = SvPV(svrecode, cur2);
6016 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6021 svrecode = newSVpvn(pv1, cur1);
6022 sv_recode_to_utf8(svrecode, PL_encoding);
6023 pv1 = SvPV(svrecode, cur1);
6026 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6032 cmp = cur2 ? -1 : 0;
6036 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6039 cmp = retval < 0 ? -1 : 1;
6040 } else if (cur1 == cur2) {
6043 cmp = cur1 < cur2 ? -1 : 1;
6048 SvREFCNT_dec(svrecode);
6057 =for apidoc sv_cmp_locale
6059 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6060 'use bytes' aware, handles get magic, and will coerce its args to strings
6061 if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
6067 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
6069 #ifdef USE_LOCALE_COLLATE
6075 if (PL_collation_standard)
6079 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6081 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6083 if (!pv1 || !len1) {
6094 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6097 return retval < 0 ? -1 : 1;
6100 * When the result of collation is equality, that doesn't mean
6101 * that there are no differences -- some locales exclude some
6102 * characters from consideration. So to avoid false equalities,
6103 * we use the raw string as a tiebreaker.
6109 #endif /* USE_LOCALE_COLLATE */
6111 return sv_cmp(sv1, sv2);
6115 #ifdef USE_LOCALE_COLLATE
6118 =for apidoc sv_collxfrm
6120 Add Collate Transform magic to an SV if it doesn't already have it.
6122 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6123 scalar data of the variable, but transformed to such a format that a normal
6124 memory comparison can be used to compare the data according to the locale
6131 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
6135 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6136 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6141 Safefree(mg->mg_ptr);
6143 if ((xf = mem_collxfrm(s, len, &xlen))) {
6144 if (SvREADONLY(sv)) {
6147 return xf + sizeof(PL_collation_ix);
6150 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
6151 mg = mg_find(sv, PERL_MAGIC_collxfrm);
6164 if (mg && mg->mg_ptr) {
6166 return mg->mg_ptr + sizeof(PL_collation_ix);
6174 #endif /* USE_LOCALE_COLLATE */
6179 Get a line from the filehandle and store it into the SV, optionally
6180 appending to the currently-stored string.
6186 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
6190 register STDCHAR rslast;
6191 register STDCHAR *bp;
6197 if (SvTHINKFIRST(sv))
6198 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6199 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6201 However, perlbench says it's slower, because the existing swipe code
6202 is faster than copy on write.
6203 Swings and roundabouts. */
6204 (void)SvUPGRADE(sv, SVt_PV);
6209 if (PerlIO_isutf8(fp)) {
6211 sv_utf8_upgrade_nomg(sv);
6212 sv_pos_u2b(sv,&append,0);
6214 } else if (SvUTF8(sv)) {
6215 SV *tsv = NEWSV(0,0);
6216 sv_gets(tsv, fp, 0);
6217 sv_utf8_upgrade_nomg(tsv);
6218 SvCUR_set(sv,append);
6221 goto return_string_or_null;
6226 if (PerlIO_isutf8(fp))
6229 if (IN_PERL_COMPILETIME) {
6230 /* we always read code in line mode */
6234 else if (RsSNARF(PL_rs)) {
6235 /* If it is a regular disk file use size from stat() as estimate
6236 of amount we are going to read - may result in malloc-ing
6237 more memory than we realy need if layers bellow reduce
6238 size we read (e.g. CRLF or a gzip layer)
6241 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
6242 const Off_t offset = PerlIO_tell(fp);
6243 if (offset != (Off_t) -1 && st.st_size + append > offset) {
6244 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6250 else if (RsRECORD(PL_rs)) {
6254 /* Grab the size of the record we're getting */
6255 recsize = SvIV(SvRV(PL_rs));
6256 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6259 /* VMS wants read instead of fread, because fread doesn't respect */
6260 /* RMS record boundaries. This is not necessarily a good thing to be */
6261 /* doing, but we've got no other real choice - except avoid stdio
6262 as implementation - perhaps write a :vms layer ?
6264 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6266 bytesread = PerlIO_read(fp, buffer, recsize);
6270 SvCUR_set(sv, bytesread += append);
6271 buffer[bytesread] = '\0';
6272 goto return_string_or_null;
6274 else if (RsPARA(PL_rs)) {
6280 /* Get $/ i.e. PL_rs into same encoding as stream wants */
6281 if (PerlIO_isutf8(fp)) {
6282 rsptr = SvPVutf8(PL_rs, rslen);
6285 if (SvUTF8(PL_rs)) {
6286 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6287 Perl_croak(aTHX_ "Wide character in $/");
6290 rsptr = SvPV(PL_rs, rslen);
6294 rslast = rslen ? rsptr[rslen - 1] : '\0';
6296 if (rspara) { /* have to do this both before and after */
6297 do { /* to make sure file boundaries work right */
6300 i = PerlIO_getc(fp);
6304 PerlIO_ungetc(fp,i);
6310 /* See if we know enough about I/O mechanism to cheat it ! */
6312 /* This used to be #ifdef test - it is made run-time test for ease
6313 of abstracting out stdio interface. One call should be cheap
6314 enough here - and may even be a macro allowing compile
6318 if (PerlIO_fast_gets(fp)) {
6321 * We're going to steal some values from the stdio struct
6322 * and put EVERYTHING in the innermost loop into registers.
6324 register STDCHAR *ptr;
6328 #if defined(VMS) && defined(PERLIO_IS_STDIO)
6329 /* An ungetc()d char is handled separately from the regular
6330 * buffer, so we getc() it back out and stuff it in the buffer.
6332 i = PerlIO_getc(fp);
6333 if (i == EOF) return 0;
6334 *(--((*fp)->_ptr)) = (unsigned char) i;
6338 /* Here is some breathtakingly efficient cheating */
6340 cnt = PerlIO_get_cnt(fp); /* get count into register */
6341 /* make sure we have the room */
6342 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6343 /* Not room for all of it
6344 if we are looking for a separator and room for some
6346 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6347 /* just process what we have room for */
6348 shortbuffered = cnt - SvLEN(sv) + append + 1;
6349 cnt -= shortbuffered;
6353 /* remember that cnt can be negative */
6354 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6359 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */
6360 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6361 DEBUG_P(PerlIO_printf(Perl_debug_log,
6362 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6363 DEBUG_P(PerlIO_printf(Perl_debug_log,
6364 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6365 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6366 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6371 while (cnt > 0) { /* this | eat */
6373 if ((*bp++ = *ptr++) == rslast) /* really | dust */
6374 goto thats_all_folks; /* screams | sed :-) */
6378 Copy(ptr, bp, cnt, char); /* this | eat */
6379 bp += cnt; /* screams | dust */
6380 ptr += cnt; /* louder | sed :-) */
6385 if (shortbuffered) { /* oh well, must extend */
6386 cnt = shortbuffered;
6388 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6390 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6391 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6395 DEBUG_P(PerlIO_printf(Perl_debug_log,
6396 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6397 PTR2UV(ptr),(long)cnt));
6398 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6400 DEBUG_P(PerlIO_printf(Perl_debug_log,
6401 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6402 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6403 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6405 /* This used to call 'filbuf' in stdio form, but as that behaves like
6406 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6407 another abstraction. */
6408 i = PerlIO_getc(fp); /* get more characters */
6410 DEBUG_P(PerlIO_printf(Perl_debug_log,
6411 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6412 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6413 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6415 cnt = PerlIO_get_cnt(fp);
6416 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
6417 DEBUG_P(PerlIO_printf(Perl_debug_log,
6418 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6420 if (i == EOF) /* all done for ever? */
6421 goto thats_really_all_folks;
6423 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6425 SvGROW(sv, bpx + cnt + 2);
6426 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6428 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
6430 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
6431 goto thats_all_folks;
6435 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6436 memNE((char*)bp - rslen, rsptr, rslen))
6437 goto screamer; /* go back to the fray */
6438 thats_really_all_folks:
6440 cnt += shortbuffered;
6441 DEBUG_P(PerlIO_printf(Perl_debug_log,
6442 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6443 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
6444 DEBUG_P(PerlIO_printf(Perl_debug_log,
6445 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6446 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6447 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6449 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */
6450 DEBUG_P(PerlIO_printf(Perl_debug_log,
6451 "Screamer: done, len=%ld, string=|%.*s|\n",
6452 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6456 /*The big, slow, and stupid way. */
6458 /* Any stack-challenged places. */
6460 /* EPOC: need to work around SDK features. *
6461 * On WINS: MS VC5 generates calls to _chkstk, *
6462 * if a "large" stack frame is allocated. *
6463 * gcc on MARM does not generate calls like these. */
6464 # define USEHEAPINSTEADOFSTACK
6467 #ifdef USEHEAPINSTEADOFSTACK
6469 New(0, buf, 8192, STDCHAR);
6477 const register STDCHAR *bpe = buf + sizeof(buf);
6479 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6480 ; /* keep reading */
6484 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6485 /* Accomodate broken VAXC compiler, which applies U8 cast to
6486 * both args of ?: operator, causing EOF to change into 255
6489 i = (U8)buf[cnt - 1];
6495 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
6497 sv_catpvn(sv, (char *) buf, cnt);
6499 sv_setpvn(sv, (char *) buf, cnt);
6501 if (i != EOF && /* joy */
6503 SvCUR(sv) < rslen ||
6504 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6508 * If we're reading from a TTY and we get a short read,
6509 * indicating that the user hit his EOF character, we need
6510 * to notice it now, because if we try to read from the TTY
6511 * again, the EOF condition will disappear.
6513 * The comparison of cnt to sizeof(buf) is an optimization
6514 * that prevents unnecessary calls to feof().
6518 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
6522 #ifdef USEHEAPINSTEADOFSTACK
6527 if (rspara) { /* have to do this both before and after */
6528 while (i != EOF) { /* to make sure file boundaries work right */
6529 i = PerlIO_getc(fp);
6531 PerlIO_ungetc(fp,i);
6537 return_string_or_null:
6538 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
6544 Auto-increment of the value in the SV, doing string to numeric conversion
6545 if necessary. Handles 'get' magic.
6551 Perl_sv_inc(pTHX_ register SV *sv)
6560 if (SvTHINKFIRST(sv)) {
6561 if (SvREADONLY(sv) && SvFAKE(sv))
6562 sv_force_normal(sv);
6563 if (SvREADONLY(sv)) {
6564 if (IN_PERL_RUNTIME)
6565 Perl_croak(aTHX_ PL_no_modify);
6569 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6571 i = PTR2IV(SvRV(sv));
6576 flags = SvFLAGS(sv);
6577 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6578 /* It's (privately or publicly) a float, but not tested as an
6579 integer, so test it to see. */
6581 flags = SvFLAGS(sv);
6583 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6584 /* It's publicly an integer, or privately an integer-not-float */
6585 #ifdef PERL_PRESERVE_IVUV
6589 if (SvUVX(sv) == UV_MAX)
6590 sv_setnv(sv, UV_MAX_P1);
6592 (void)SvIOK_only_UV(sv);
6593 SvUV_set(sv, SvUVX(sv) + 1);
6595 if (SvIVX(sv) == IV_MAX)
6596 sv_setuv(sv, (UV)IV_MAX + 1);
6598 (void)SvIOK_only(sv);
6599 SvIV_set(sv, SvIVX(sv) + 1);
6604 if (flags & SVp_NOK) {
6605 (void)SvNOK_only(sv);
6606 SvNV_set(sv, SvNVX(sv) + 1.0);
6610 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
6611 if ((flags & SVTYPEMASK) < SVt_PVIV)
6612 sv_upgrade(sv, SVt_IV);
6613 (void)SvIOK_only(sv);
6618 while (isALPHA(*d)) d++;
6619 while (isDIGIT(*d)) d++;
6621 #ifdef PERL_PRESERVE_IVUV
6622 /* Got to punt this as an integer if needs be, but we don't issue
6623 warnings. Probably ought to make the sv_iv_please() that does
6624 the conversion if possible, and silently. */
6625 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6626 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6627 /* Need to try really hard to see if it's an integer.
6628 9.22337203685478e+18 is an integer.
6629 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6630 so $a="9.22337203685478e+18"; $a+0; $a++
6631 needs to be the same as $a="9.22337203685478e+18"; $a++
6638 /* sv_2iv *should* have made this an NV */
6639 if (flags & SVp_NOK) {
6640 (void)SvNOK_only(sv);
6641 SvNV_set(sv, SvNVX(sv) + 1.0);
6644 /* I don't think we can get here. Maybe I should assert this
6645 And if we do get here I suspect that sv_setnv will croak. NWC
6647 #if defined(USE_LONG_DOUBLE)
6648 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",
6649 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6651 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6652 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6655 #endif /* PERL_PRESERVE_IVUV */
6656 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
6660 while (d >= SvPVX_const(sv)) {
6668 /* MKS: The original code here died if letters weren't consecutive.
6669 * at least it didn't have to worry about non-C locales. The
6670 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
6671 * arranged in order (although not consecutively) and that only
6672 * [A-Za-z] are accepted by isALPHA in the C locale.
6674 if (*d != 'z' && *d != 'Z') {
6675 do { ++*d; } while (!isALPHA(*d));
6678 *(d--) -= 'z' - 'a';
6683 *(d--) -= 'z' - 'a' + 1;
6687 /* oh,oh, the number grew */
6688 SvGROW(sv, SvCUR(sv) + 2);
6689 SvCUR_set(sv, SvCUR(sv) + 1);
6690 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
6701 Auto-decrement of the value in the SV, doing string to numeric conversion
6702 if necessary. Handles 'get' magic.
6708 Perl_sv_dec(pTHX_ register SV *sv)
6716 if (SvTHINKFIRST(sv)) {
6717 if (SvREADONLY(sv) && SvFAKE(sv))
6718 sv_force_normal(sv);
6719 if (SvREADONLY(sv)) {
6720 if (IN_PERL_RUNTIME)
6721 Perl_croak(aTHX_ PL_no_modify);
6725 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6727 i = PTR2IV(SvRV(sv));
6732 /* Unlike sv_inc we don't have to worry about string-never-numbers
6733 and keeping them magic. But we mustn't warn on punting */
6734 flags = SvFLAGS(sv);
6735 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6736 /* It's publicly an integer, or privately an integer-not-float */
6737 #ifdef PERL_PRESERVE_IVUV
6741 if (SvUVX(sv) == 0) {
6742 (void)SvIOK_only(sv);
6746 (void)SvIOK_only_UV(sv);
6747 SvUV_set(sv, SvUVX(sv) - 1);
6750 if (SvIVX(sv) == IV_MIN)
6751 sv_setnv(sv, (NV)IV_MIN - 1.0);
6753 (void)SvIOK_only(sv);
6754 SvIV_set(sv, SvIVX(sv) - 1);
6759 if (flags & SVp_NOK) {
6760 SvNV_set(sv, SvNVX(sv) - 1.0);
6761 (void)SvNOK_only(sv);
6764 if (!(flags & SVp_POK)) {
6765 if ((flags & SVTYPEMASK) < SVt_PVIV)
6766 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
6768 (void)SvIOK_only(sv);
6771 #ifdef PERL_PRESERVE_IVUV
6773 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6774 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6775 /* Need to try really hard to see if it's an integer.
6776 9.22337203685478e+18 is an integer.
6777 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6778 so $a="9.22337203685478e+18"; $a+0; $a--
6779 needs to be the same as $a="9.22337203685478e+18"; $a--
6786 /* sv_2iv *should* have made this an NV */
6787 if (flags & SVp_NOK) {
6788 (void)SvNOK_only(sv);
6789 SvNV_set(sv, SvNVX(sv) - 1.0);
6792 /* I don't think we can get here. Maybe I should assert this
6793 And if we do get here I suspect that sv_setnv will croak. NWC
6795 #if defined(USE_LONG_DOUBLE)
6796 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",
6797 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6799 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6800 SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6804 #endif /* PERL_PRESERVE_IVUV */
6805 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */
6809 =for apidoc sv_mortalcopy
6811 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
6812 The new SV is marked as mortal. It will be destroyed "soon", either by an
6813 explicit call to FREETMPS, or by an implicit call at places such as
6814 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
6819 /* Make a string that will exist for the duration of the expression
6820 * evaluation. Actually, it may have to last longer than that, but
6821 * hopefully we won't free it until it has been assigned to a
6822 * permanent location. */
6825 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
6830 sv_setsv(sv,oldstr);
6832 PL_tmps_stack[++PL_tmps_ix] = sv;
6838 =for apidoc sv_newmortal
6840 Creates a new null SV which is mortal. The reference count of the SV is
6841 set to 1. It will be destroyed "soon", either by an explicit call to
6842 FREETMPS, or by an implicit call at places such as statement boundaries.
6843 See also C<sv_mortalcopy> and C<sv_2mortal>.
6849 Perl_sv_newmortal(pTHX)
6854 SvFLAGS(sv) = SVs_TEMP;
6856 PL_tmps_stack[++PL_tmps_ix] = sv;
6861 =for apidoc sv_2mortal
6863 Marks an existing SV as mortal. The SV will be destroyed "soon", either
6864 by an explicit call to FREETMPS, or by an implicit call at places such as
6865 statement boundaries. SvTEMP() is turned on which means that the SV's
6866 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
6867 and C<sv_mortalcopy>.
6873 Perl_sv_2mortal(pTHX_ register SV *sv)
6877 if (SvREADONLY(sv) && SvIMMORTAL(sv))
6880 PL_tmps_stack[++PL_tmps_ix] = sv;
6888 Creates a new SV and copies a string into it. The reference count for the
6889 SV is set to 1. If C<len> is zero, Perl will compute the length using
6890 strlen(). For efficiency, consider using C<newSVpvn> instead.
6896 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
6901 sv_setpvn(sv,s,len ? len : strlen(s));
6906 =for apidoc newSVpvn
6908 Creates a new SV and copies a string into it. The reference count for the
6909 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
6910 string. You are responsible for ensuring that the source string is at least
6911 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
6917 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
6922 sv_setpvn(sv,s,len);
6928 =for apidoc newSVpv_hek
6930 Creates a new SV from the hash key structure. It will generate scalars that
6931 point to the shared string table where possible. Returns a new (undefined)
6932 SV if the hek is NULL.
6938 Perl_newSVhek(pTHX_ const HEK *hek)
6947 if (HEK_LEN(hek) == HEf_SVKEY) {
6948 return newSVsv(*(SV**)HEK_KEY(hek));
6950 const int flags = HEK_FLAGS(hek);
6951 if (flags & HVhek_WASUTF8) {
6953 Andreas would like keys he put in as utf8 to come back as utf8
6955 STRLEN utf8_len = HEK_LEN(hek);
6956 U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
6957 SV *sv = newSVpvn ((char*)as_utf8, utf8_len);
6960 Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
6962 } else if (flags & HVhek_REHASH) {
6963 /* We don't have a pointer to the hv, so we have to replicate the
6964 flag into every HEK. This hv is using custom a hasing
6965 algorithm. Hence we can't return a shared string scalar, as
6966 that would contain the (wrong) hash value, and might get passed
6967 into an hv routine with a regular hash */
6969 SV *sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
6974 /* This will be overwhelminly the most common case. */
6975 return newSVpvn_share(HEK_KEY(hek),
6976 (HEK_UTF8(hek) ? -HEK_LEN(hek) : HEK_LEN(hek)),
6982 =for apidoc newSVpvn_share
6984 Creates a new SV with its SvPVX_const pointing to a shared string in the string
6985 table. If the string does not already exist in the table, it is created
6986 first. Turns on READONLY and FAKE. The string's hash is stored in the UV
6987 slot of the SV; if the C<hash> parameter is non-zero, that value is used;
6988 otherwise the hash is computed. The idea here is that as the string table
6989 is used for shared hash keys these strings will have SvPVX_const == HeKEY and
6990 hash lookup will avoid string compare.
6996 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
6999 bool is_utf8 = FALSE;
7001 STRLEN tmplen = -len;
7003 /* See the note in hv.c:hv_fetch() --jhi */
7004 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7008 PERL_HASH(hash, src, len);
7010 sv_upgrade(sv, SVt_PVIV);
7011 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7024 #if defined(PERL_IMPLICIT_CONTEXT)
7026 /* pTHX_ magic can't cope with varargs, so this is a no-context
7027 * version of the main function, (which may itself be aliased to us).
7028 * Don't access this version directly.
7032 Perl_newSVpvf_nocontext(const char* pat, ...)
7037 va_start(args, pat);
7038 sv = vnewSVpvf(pat, &args);
7045 =for apidoc newSVpvf
7047 Creates a new SV and initializes it with the string formatted like
7054 Perl_newSVpvf(pTHX_ const char* pat, ...)
7058 va_start(args, pat);
7059 sv = vnewSVpvf(pat, &args);
7064 /* backend for newSVpvf() and newSVpvf_nocontext() */
7067 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7071 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7078 Creates a new SV and copies a floating point value into it.
7079 The reference count for the SV is set to 1.
7085 Perl_newSVnv(pTHX_ NV n)
7097 Creates a new SV and copies an integer into it. The reference count for the
7104 Perl_newSViv(pTHX_ IV i)
7116 Creates a new SV and copies an unsigned integer into it.
7117 The reference count for the SV is set to 1.
7123 Perl_newSVuv(pTHX_ UV u)
7133 =for apidoc newRV_noinc
7135 Creates an RV wrapper for an SV. The reference count for the original
7136 SV is B<not> incremented.
7142 Perl_newRV_noinc(pTHX_ SV *tmpRef)
7147 sv_upgrade(sv, SVt_RV);
7149 SvRV_set(sv, tmpRef);
7154 /* newRV_inc is the official function name to use now.
7155 * newRV_inc is in fact #defined to newRV in sv.h
7159 Perl_newRV(pTHX_ SV *tmpRef)
7161 return newRV_noinc(SvREFCNT_inc(tmpRef));
7167 Creates a new SV which is an exact duplicate of the original SV.
7174 Perl_newSVsv(pTHX_ register SV *old)
7180 if (SvTYPE(old) == SVTYPEMASK) {
7181 if (ckWARN_d(WARN_INTERNAL))
7182 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7186 /* SV_GMAGIC is the default for sv_setv()
7187 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7188 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7189 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7194 =for apidoc sv_reset
7196 Underlying implementation for the C<reset> Perl function.
7197 Note that the perl-level function is vaguely deprecated.
7203 Perl_sv_reset(pTHX_ register char *s, HV *stash)
7206 char todo[PERL_UCHAR_MAX+1];
7211 if (!*s) { /* reset ?? searches */
7212 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
7213 pm->op_pmdynflags &= ~PMdf_USED;
7218 /* reset variables */
7220 if (!HvARRAY(stash))
7223 Zero(todo, 256, char);
7226 I32 i = (unsigned char)*s;
7230 max = (unsigned char)*s++;
7231 for ( ; i <= max; i++) {
7234 for (i = 0; i <= (I32) HvMAX(stash); i++) {
7236 for (entry = HvARRAY(stash)[i];
7238 entry = HeNEXT(entry))
7243 if (!todo[(U8)*HeKEY(entry)])
7245 gv = (GV*)HeVAL(entry);
7247 if (SvTHINKFIRST(sv)) {
7248 if (!SvREADONLY(sv) && SvROK(sv))
7253 if (SvTYPE(sv) >= SVt_PV) {
7255 if (SvPVX_const(sv) != Nullch)
7262 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7265 #ifdef USE_ENVIRON_ARRAY
7267 # ifdef USE_ITHREADS
7268 && PL_curinterp == aTHX
7272 environ[0] = Nullch;
7275 #endif /* !PERL_MICRO */
7285 Using various gambits, try to get an IO from an SV: the IO slot if its a
7286 GV; or the recursive result if we're an RV; or the IO slot of the symbol
7287 named after the PV if we're a string.
7293 Perl_sv_2io(pTHX_ SV *sv)
7299 switch (SvTYPE(sv)) {
7307 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7311 Perl_croak(aTHX_ PL_no_usym, "filehandle");
7313 return sv_2io(SvRV(sv));
7314 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
7320 Perl_croak(aTHX_ "Bad filehandle: %"SVf, sv);
7329 Using various gambits, try to get a CV from an SV; in addition, try if
7330 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7336 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
7343 return *gvp = Nullgv, Nullcv;
7344 switch (SvTYPE(sv)) {
7363 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
7364 tryAMAGICunDEREF(to_cv);
7367 if (SvTYPE(sv) == SVt_PVCV) {
7376 Perl_croak(aTHX_ "Not a subroutine reference");
7381 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
7387 if (lref && !GvCVu(gv)) {
7390 tmpsv = NEWSV(704,0);
7391 gv_efullname3(tmpsv, gv, Nullch);
7392 /* XXX this is probably not what they think they're getting.
7393 * It has the same effect as "sub name;", i.e. just a forward
7395 newSUB(start_subparse(FALSE, 0),
7396 newSVOP(OP_CONST, 0, tmpsv),
7401 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7411 Returns true if the SV has a true value by Perl's rules.
7412 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7413 instead use an in-line version.
7419 Perl_sv_true(pTHX_ register SV *sv)
7424 const register XPV* tXpv;
7425 if ((tXpv = (XPV*)SvANY(sv)) &&
7426 (tXpv->xpv_cur > 1 ||
7427 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
7434 return SvIVX(sv) != 0;
7437 return SvNVX(sv) != 0.0;
7439 return sv_2bool(sv);
7447 A private implementation of the C<SvIVx> macro for compilers which can't
7448 cope with complex macro expressions. Always use the macro instead.
7454 Perl_sv_iv(pTHX_ register SV *sv)
7458 return (IV)SvUVX(sv);
7467 A private implementation of the C<SvUVx> macro for compilers which can't
7468 cope with complex macro expressions. Always use the macro instead.
7474 Perl_sv_uv(pTHX_ register SV *sv)
7479 return (UV)SvIVX(sv);
7487 A private implementation of the C<SvNVx> macro for compilers which can't
7488 cope with complex macro expressions. Always use the macro instead.
7494 Perl_sv_nv(pTHX_ register SV *sv)
7501 /* sv_pv() is now a macro using SvPV_nolen();
7502 * this function provided for binary compatibility only
7506 Perl_sv_pv(pTHX_ SV *sv)
7513 return sv_2pv(sv, &n_a);
7519 Use the C<SvPV_nolen> macro instead
7523 A private implementation of the C<SvPV> macro for compilers which can't
7524 cope with complex macro expressions. Always use the macro instead.
7530 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
7536 return sv_2pv(sv, lp);
7541 Perl_sv_pvn_nomg(pTHX_ register SV *sv, STRLEN *lp)
7547 return sv_2pv_flags(sv, lp, 0);
7550 /* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags();
7551 * this function provided for binary compatibility only
7555 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
7557 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
7561 =for apidoc sv_pvn_force
7563 Get a sensible string out of the SV somehow.
7564 A private implementation of the C<SvPV_force> macro for compilers which
7565 can't cope with complex macro expressions. Always use the macro instead.
7567 =for apidoc sv_pvn_force_flags
7569 Get a sensible string out of the SV somehow.
7570 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7571 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7572 implemented in terms of this function.
7573 You normally want to use the various wrapper macros instead: see
7574 C<SvPV_force> and C<SvPV_force_nomg>
7580 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7583 if (SvTHINKFIRST(sv) && !SvROK(sv))
7584 sv_force_normal(sv);
7591 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
7592 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
7596 s = sv_2pv_flags(sv, lp, flags);
7597 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */
7598 const STRLEN len = *lp;
7602 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
7603 SvGROW(sv, len + 1);
7604 Move(s,SvPVX_const(sv),len,char);
7609 SvPOK_on(sv); /* validate pointer */
7611 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
7612 PTR2UV(sv),SvPVX_const(sv)));
7618 /* sv_pvbyte () is now a macro using Perl_sv_2pv_flags();
7619 * this function provided for binary compatibility only
7623 Perl_sv_pvbyte(pTHX_ SV *sv)
7625 sv_utf8_downgrade(sv,0);
7630 =for apidoc sv_pvbyte
7632 Use C<SvPVbyte_nolen> instead.
7634 =for apidoc sv_pvbyten
7636 A private implementation of the C<SvPVbyte> macro for compilers
7637 which can't cope with complex macro expressions. Always use the macro
7644 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
7646 sv_utf8_downgrade(sv,0);
7647 return sv_pvn(sv,lp);
7651 =for apidoc sv_pvbyten_force
7653 A private implementation of the C<SvPVbytex_force> macro for compilers
7654 which can't cope with complex macro expressions. Always use the macro
7661 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7663 sv_pvn_force(sv,lp);
7664 sv_utf8_downgrade(sv,0);
7669 /* sv_pvutf8 () is now a macro using Perl_sv_2pv_flags();
7670 * this function provided for binary compatibility only
7674 Perl_sv_pvutf8(pTHX_ SV *sv)
7676 sv_utf8_upgrade(sv);
7681 =for apidoc sv_pvutf8
7683 Use the C<SvPVutf8_nolen> macro instead
7685 =for apidoc sv_pvutf8n
7687 A private implementation of the C<SvPVutf8> macro for compilers
7688 which can't cope with complex macro expressions. Always use the macro
7695 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
7697 sv_utf8_upgrade(sv);
7698 return sv_pvn(sv,lp);
7702 =for apidoc sv_pvutf8n_force
7704 A private implementation of the C<SvPVutf8_force> macro for compilers
7705 which can't cope with complex macro expressions. Always use the macro
7712 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7714 sv_pvn_force(sv,lp);
7715 sv_utf8_upgrade(sv);
7721 =for apidoc sv_reftype
7723 Returns a string describing what the SV is a reference to.
7729 Perl_sv_reftype(pTHX_ SV *sv, int ob)
7731 /* The fact that I don't need to downcast to char * everywhere, only in ?:
7732 inside return suggests a const propagation bug in g++. */
7733 if (ob && SvOBJECT(sv)) {
7734 char *name = HvNAME_get(SvSTASH(sv));
7735 return name ? name : (char *) "__ANON__";
7738 switch (SvTYPE(sv)) {
7753 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
7754 /* tied lvalues should appear to be
7755 * scalars for backwards compatitbility */
7756 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
7757 ? "SCALAR" : "LVALUE");
7758 case SVt_PVAV: return "ARRAY";
7759 case SVt_PVHV: return "HASH";
7760 case SVt_PVCV: return "CODE";
7761 case SVt_PVGV: return "GLOB";
7762 case SVt_PVFM: return "FORMAT";
7763 case SVt_PVIO: return "IO";
7764 default: return "UNKNOWN";
7770 =for apidoc sv_isobject
7772 Returns a boolean indicating whether the SV is an RV pointing to a blessed
7773 object. If the SV is not an RV, or if the object is not blessed, then this
7780 Perl_sv_isobject(pTHX_ SV *sv)
7797 Returns a boolean indicating whether the SV is blessed into the specified
7798 class. This does not check for subtypes; use C<sv_derived_from> to verify
7799 an inheritance relationship.
7805 Perl_sv_isa(pTHX_ SV *sv, const char *name)
7817 hvname = HvNAME_get(SvSTASH(sv));
7821 return strEQ(hvname, name);
7827 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7828 it will be upgraded to one. If C<classname> is non-null then the new SV will
7829 be blessed in the specified package. The new SV is returned and its
7830 reference count is 1.
7836 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
7842 SV_CHECK_THINKFIRST(rv);
7845 if (SvTYPE(rv) >= SVt_PVMG) {
7846 const U32 refcnt = SvREFCNT(rv);
7850 SvREFCNT(rv) = refcnt;
7853 if (SvTYPE(rv) < SVt_RV)
7854 sv_upgrade(rv, SVt_RV);
7855 else if (SvTYPE(rv) > SVt_RV) {
7866 HV* stash = gv_stashpv(classname, TRUE);
7867 (void)sv_bless(rv, stash);
7873 =for apidoc sv_setref_pv
7875 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7876 argument will be upgraded to an RV. That RV will be modified to point to
7877 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7878 into the SV. The C<classname> argument indicates the package for the
7879 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7880 will have a reference count of 1, and the RV will be returned.
7882 Do not use with other Perl types such as HV, AV, SV, CV, because those
7883 objects will become corrupted by the pointer copy process.
7885 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7891 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
7894 sv_setsv(rv, &PL_sv_undef);
7898 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
7903 =for apidoc sv_setref_iv
7905 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7906 argument will be upgraded to an RV. That RV will be modified to point to
7907 the new SV. The C<classname> argument indicates the package for the
7908 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7909 will have a reference count of 1, and the RV will be returned.
7915 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
7917 sv_setiv(newSVrv(rv,classname), iv);
7922 =for apidoc sv_setref_uv
7924 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7925 argument will be upgraded to an RV. That RV will be modified to point to
7926 the new SV. The C<classname> argument indicates the package for the
7927 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7928 will have a reference count of 1, and the RV will be returned.
7934 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7936 sv_setuv(newSVrv(rv,classname), uv);
7941 =for apidoc sv_setref_nv
7943 Copies a double into a new SV, optionally blessing the SV. The C<rv>
7944 argument will be upgraded to an RV. That RV will be modified to point to
7945 the new SV. The C<classname> argument indicates the package for the
7946 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7947 will have a reference count of 1, and the RV will be returned.
7953 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
7955 sv_setnv(newSVrv(rv,classname), nv);
7960 =for apidoc sv_setref_pvn
7962 Copies a string into a new SV, optionally blessing the SV. The length of the
7963 string must be specified with C<n>. The C<rv> argument will be upgraded to
7964 an RV. That RV will be modified to point to the new SV. The C<classname>
7965 argument indicates the package for the blessing. Set C<classname> to
7966 C<Nullch> to avoid the blessing. The new SV will have a reference count
7967 of 1, and the RV will be returned.
7969 Note that C<sv_setref_pv> copies the pointer while this copies the string.
7975 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
7977 sv_setpvn(newSVrv(rv,classname), pv, n);
7982 =for apidoc sv_bless
7984 Blesses an SV into a specified package. The SV must be an RV. The package
7985 must be designated by its stash (see C<gv_stashpv()>). The reference count
7986 of the SV is unaffected.
7992 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
7996 Perl_croak(aTHX_ "Can't bless non-reference value");
7998 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
7999 if (SvREADONLY(tmpRef))
8000 Perl_croak(aTHX_ PL_no_modify);
8001 if (SvOBJECT(tmpRef)) {
8002 if (SvTYPE(tmpRef) != SVt_PVIO)
8004 SvREFCNT_dec(SvSTASH(tmpRef));
8007 SvOBJECT_on(tmpRef);
8008 if (SvTYPE(tmpRef) != SVt_PVIO)
8010 (void)SvUPGRADE(tmpRef, SVt_PVMG);
8011 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc(stash));
8018 if(SvSMAGICAL(tmpRef))
8019 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8027 /* Downgrades a PVGV to a PVMG.
8031 S_sv_unglob(pTHX_ SV *sv)
8035 assert(SvTYPE(sv) == SVt_PVGV);
8040 SvREFCNT_dec(GvSTASH(sv));
8041 GvSTASH(sv) = Nullhv;
8043 sv_unmagic(sv, PERL_MAGIC_glob);
8044 Safefree(GvNAME(sv));
8047 /* need to keep SvANY(sv) in the right arena */
8048 xpvmg = new_XPVMG();
8049 StructCopy(SvANY(sv), xpvmg, XPVMG);
8050 del_XPVGV(SvANY(sv));
8053 SvFLAGS(sv) &= ~SVTYPEMASK;
8054 SvFLAGS(sv) |= SVt_PVMG;
8058 =for apidoc sv_unref_flags
8060 Unsets the RV status of the SV, and decrements the reference count of
8061 whatever was being referenced by the RV. This can almost be thought of
8062 as a reversal of C<newSVrv>. The C<cflags> argument can contain
8063 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8064 (otherwise the decrementing is conditional on the reference count being
8065 different from one or the reference being a readonly SV).
8072 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
8076 if (SvWEAKREF(sv)) {
8084 /* You can't have a || SvREADONLY(rv) here, as $a = $$a, where $a was
8085 assigned to as BEGIN {$a = \"Foo"} will fail. */
8086 if (SvREFCNT(rv) != 1 || (flags & SV_IMMEDIATE_UNREF))
8088 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8089 sv_2mortal(rv); /* Schedule for freeing later */
8093 =for apidoc sv_unref
8095 Unsets the RV status of the SV, and decrements the reference count of
8096 whatever was being referenced by the RV. This can almost be thought of
8097 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
8098 being zero. See C<SvROK_off>.
8104 Perl_sv_unref(pTHX_ SV *sv)
8106 sv_unref_flags(sv, 0);
8110 =for apidoc sv_taint
8112 Taint an SV. Use C<SvTAINTED_on> instead.
8117 Perl_sv_taint(pTHX_ SV *sv)
8119 sv_magic((sv), Nullsv, PERL_MAGIC_taint, Nullch, 0);
8123 =for apidoc sv_untaint
8125 Untaint an SV. Use C<SvTAINTED_off> instead.
8130 Perl_sv_untaint(pTHX_ SV *sv)
8132 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8133 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8140 =for apidoc sv_tainted
8142 Test an SV for taintedness. Use C<SvTAINTED> instead.
8147 Perl_sv_tainted(pTHX_ SV *sv)
8149 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8150 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8151 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
8158 =for apidoc sv_setpviv
8160 Copies an integer into the given SV, also updating its string value.
8161 Does not handle 'set' magic. See C<sv_setpviv_mg>.
8167 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8169 char buf[TYPE_CHARS(UV)];
8171 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8173 sv_setpvn(sv, ptr, ebuf - ptr);
8177 =for apidoc sv_setpviv_mg
8179 Like C<sv_setpviv>, but also handles 'set' magic.
8185 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8187 char buf[TYPE_CHARS(UV)];
8189 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8191 sv_setpvn(sv, ptr, ebuf - ptr);
8195 #if defined(PERL_IMPLICIT_CONTEXT)
8197 /* pTHX_ magic can't cope with varargs, so this is a no-context
8198 * version of the main function, (which may itself be aliased to us).
8199 * Don't access this version directly.
8203 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8207 va_start(args, pat);
8208 sv_vsetpvf(sv, pat, &args);
8212 /* pTHX_ magic can't cope with varargs, so this is a no-context
8213 * version of the main function, (which may itself be aliased to us).
8214 * Don't access this version directly.
8218 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8222 va_start(args, pat);
8223 sv_vsetpvf_mg(sv, pat, &args);
8229 =for apidoc sv_setpvf
8231 Works like C<sv_catpvf> but copies the text into the SV instead of
8232 appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
8238 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
8241 va_start(args, pat);
8242 sv_vsetpvf(sv, pat, &args);
8247 =for apidoc sv_vsetpvf
8249 Works like C<sv_vcatpvf> but copies the text into the SV instead of
8250 appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8252 Usually used via its frontend C<sv_setpvf>.
8258 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8260 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8264 =for apidoc sv_setpvf_mg
8266 Like C<sv_setpvf>, but also handles 'set' magic.
8272 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8275 va_start(args, pat);
8276 sv_vsetpvf_mg(sv, pat, &args);
8281 =for apidoc sv_vsetpvf_mg
8283 Like C<sv_vsetpvf>, but also handles 'set' magic.
8285 Usually used via its frontend C<sv_setpvf_mg>.
8291 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8293 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8297 #if defined(PERL_IMPLICIT_CONTEXT)
8299 /* pTHX_ magic can't cope with varargs, so this is a no-context
8300 * version of the main function, (which may itself be aliased to us).
8301 * Don't access this version directly.
8305 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8309 va_start(args, pat);
8310 sv_vcatpvf(sv, pat, &args);
8314 /* pTHX_ magic can't cope with varargs, so this is a no-context
8315 * version of the main function, (which may itself be aliased to us).
8316 * Don't access this version directly.
8320 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8324 va_start(args, pat);
8325 sv_vcatpvf_mg(sv, pat, &args);
8331 =for apidoc sv_catpvf
8333 Processes its arguments like C<sprintf> and appends the formatted
8334 output to an SV. If the appended data contains "wide" characters
8335 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8336 and characters >255 formatted with %c), the original SV might get
8337 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
8338 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8339 valid UTF-8; if the original SV was bytes, the pattern should be too.
8344 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
8347 va_start(args, pat);
8348 sv_vcatpvf(sv, pat, &args);
8353 =for apidoc sv_vcatpvf
8355 Processes its arguments like C<vsprintf> and appends the formatted output
8356 to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
8358 Usually used via its frontend C<sv_catpvf>.
8364 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8366 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8370 =for apidoc sv_catpvf_mg
8372 Like C<sv_catpvf>, but also handles 'set' magic.
8378 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8381 va_start(args, pat);
8382 sv_vcatpvf_mg(sv, pat, &args);
8387 =for apidoc sv_vcatpvf_mg
8389 Like C<sv_vcatpvf>, but also handles 'set' magic.
8391 Usually used via its frontend C<sv_catpvf_mg>.
8397 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8399 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8404 =for apidoc sv_vsetpvfn
8406 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
8409 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
8415 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8417 sv_setpvn(sv, "", 0);
8418 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8421 /* private function for use in sv_vcatpvfn via the EXPECT_NUMBER macro */
8424 S_expect_number(pTHX_ char** pattern)
8427 switch (**pattern) {
8428 case '1': case '2': case '3':
8429 case '4': case '5': case '6':
8430 case '7': case '8': case '9':
8431 while (isDIGIT(**pattern))
8432 var = var * 10 + (*(*pattern)++ - '0');
8436 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
8439 F0convert(NV nv, char *endbuf, STRLEN *len)
8441 const int neg = nv < 0;
8450 if (uv & 1 && uv == nv)
8451 uv--; /* Round to even */
8453 const unsigned dig = uv % 10;
8466 =for apidoc sv_vcatpvfn
8468 Processes its arguments like C<vsprintf> and appends the formatted output
8469 to an SV. Uses an array of SVs if the C style variable argument list is
8470 missing (NULL). When running with taint checks enabled, indicates via
8471 C<maybe_tainted> if results are untrustworthy (often due to the use of
8474 XXX Except that it maybe_tainted is never assigned to.
8476 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
8481 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8484 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8491 static char nullstr[] = "(null)";
8493 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */
8494 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
8496 /* Times 4: a decimal digit takes more than 3 binary digits.
8497 * NV_DIG: mantissa takes than many decimal digits.
8498 * Plus 32: Playing safe. */
8499 char ebuf[IV_DIG * 4 + NV_DIG + 32];
8500 /* large enough for "%#.#f" --chip */
8501 /* what about long double NVs? --jhi */
8503 /* no matter what, this is a string now */
8504 (void)SvPV_force(sv, origlen);
8506 /* special-case "", "%s", and "%_" */
8509 if (patlen == 2 && pat[0] == '%') {
8513 const char *s = va_arg(*args, char*);
8514 sv_catpv(sv, s ? s : nullstr);
8516 else if (svix < svmax) {
8517 sv_catsv(sv, *svargs);
8518 if (DO_UTF8(*svargs))
8524 argsv = va_arg(*args, SV*);
8525 sv_catsv(sv, argsv);
8530 /* See comment on '_' below */
8535 #ifndef USE_LONG_DOUBLE
8536 /* special-case "%.<number>[gf]" */
8537 if ( patlen <= 5 && pat[0] == '%' && pat[1] == '.'
8538 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8539 unsigned digits = 0;
8543 while (*pp >= '0' && *pp <= '9')
8544 digits = 10 * digits + (*pp++ - '0');
8545 if (pp - pat == (int)patlen - 1) {
8549 nv = (NV)va_arg(*args, double);
8550 else if (svix < svmax)
8555 /* Add check for digits != 0 because it seems that some
8556 gconverts are buggy in this case, and we don't yet have
8557 a Configure test for this. */
8558 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8559 /* 0, point, slack */
8560 Gconvert(nv, (int)digits, 0, ebuf);
8562 if (*ebuf) /* May return an empty string for digits==0 */
8565 } else if (!digits) {
8568 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8569 sv_catpvn(sv, p, l);
8575 #endif /* !USE_LONG_DOUBLE */
8577 if (!args && svix < svmax && DO_UTF8(*svargs))
8580 patend = (char*)pat + patlen;
8581 for (p = (char*)pat; p < patend; p = q) {
8584 bool vectorize = FALSE;
8585 bool vectorarg = FALSE;
8586 bool vec_utf8 = FALSE;
8592 bool has_precis = FALSE;
8595 bool is_utf8 = FALSE; /* is this item utf8? */
8596 #ifdef HAS_LDBL_SPRINTF_BUG
8597 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
8598 with sfio - Allen <allens@cpan.org> */
8599 bool fix_ldbl_sprintf_bug = FALSE;
8603 U8 utf8buf[UTF8_MAXBYTES+1];
8604 STRLEN esignlen = 0;
8606 char *eptr = Nullch;
8609 U8 *vecstr = Null(U8*);
8616 /* we need a long double target in case HAS_LONG_DOUBLE but
8619 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
8627 const char *dotstr = ".";
8628 STRLEN dotstrlen = 1;
8629 I32 efix = 0; /* explicit format parameter index */
8630 I32 ewix = 0; /* explicit width index */
8631 I32 epix = 0; /* explicit precision index */
8632 I32 evix = 0; /* explicit vector index */
8633 bool asterisk = FALSE;
8635 /* echo everything up to the next format specification */
8636 for (q = p; q < patend && *q != '%'; ++q) ;
8638 if (has_utf8 && !pat_utf8)
8639 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8641 sv_catpvn(sv, p, q - p);
8648 We allow format specification elements in this order:
8649 \d+\$ explicit format parameter index
8651 v|\*(\d+\$)?v vector with optional (optionally specified) arg
8652 0 flag (as above): repeated to allow "v02"
8653 \d+|\*(\d+\$)? width using optional (optionally specified) arg
8654 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8656 [%bcdefginopsux_DFOUX] format (mandatory)
8658 if (EXPECT_NUMBER(q, width)) {
8699 if (EXPECT_NUMBER(q, ewix))
8708 if ((vectorarg = asterisk)) {
8720 EXPECT_NUMBER(q, width);
8723 if ((*q == 'p') && left) {
8724 vectorize = (width == 1);
8730 vecsv = va_arg(*args, SV*);
8732 vecsv = (evix ? evix <= svmax : svix < svmax) ?
8733 svargs[evix ? evix-1 : svix++] : &PL_sv_undef;
8734 dotstr = SvPVx(vecsv, dotstrlen);
8739 vecsv = va_arg(*args, SV*);
8740 vecstr = (U8*)SvPVx(vecsv,veclen);
8741 vec_utf8 = DO_UTF8(vecsv);
8743 else if (efix ? efix <= svmax : svix < svmax) {
8744 vecsv = svargs[efix ? efix-1 : svix++];
8745 vecstr = (U8*)SvPVx(vecsv,veclen);
8746 vec_utf8 = DO_UTF8(vecsv);
8756 i = va_arg(*args, int);
8758 i = (ewix ? ewix <= svmax : svix < svmax) ?
8759 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8761 width = (i < 0) ? -i : i;
8771 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
8773 /* XXX: todo, support specified precision parameter */
8777 i = va_arg(*args, int);
8779 i = (ewix ? ewix <= svmax : svix < svmax)
8780 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8781 precis = (i < 0) ? 0 : i;
8786 precis = precis * 10 + (*q++ - '0');
8795 case 'I': /* Ix, I32x, and I64x */
8797 if (q[1] == '6' && q[2] == '4') {
8803 if (q[1] == '3' && q[2] == '2') {
8813 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8824 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8825 if (*(q + 1) == 'l') { /* lld, llf */
8850 argsv = (efix ? efix <= svmax : svix < svmax) ?
8851 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
8858 uv = (args && !vectorize) ? va_arg(*args, int) : SvIVx(argsv);
8860 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
8862 eptr = (char*)utf8buf;
8863 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
8874 if (args && !vectorize) {
8875 eptr = va_arg(*args, char*);
8877 #ifdef MACOS_TRADITIONAL
8878 /* On MacOS, %#s format is used for Pascal strings */
8883 elen = strlen(eptr);
8886 elen = sizeof nullstr - 1;
8890 eptr = SvPVx(argsv, elen);
8891 if (DO_UTF8(argsv)) {
8892 if (has_precis && precis < elen) {
8894 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
8897 if (width) { /* fudge width (can't fudge elen) */
8898 width += elen - sv_len_utf8(argsv);
8910 * The "%_" hack might have to be changed someday,
8911 * if ISO or ANSI decide to use '_' for something.
8912 * So we keep it hidden from users' code.
8914 if (!args || vectorize)
8916 argsv = va_arg(*args, SV*);
8917 eptr = SvPVx(argsv, elen);
8923 if (has_precis && elen > precis)
8934 goto format_sv; /* %-p -> %_ */
8937 goto format_vd; /* %-1p -> %vd */
8942 goto format_sv; /* %-Np -> %.N_ */
8945 if (alt || vectorize)
8947 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
8968 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8977 esignbuf[esignlen++] = plus;
8981 case 'h': iv = (short)va_arg(*args, int); break;
8982 case 'l': iv = va_arg(*args, long); break;
8983 case 'V': iv = va_arg(*args, IV); break;
8984 default: iv = va_arg(*args, int); break;
8986 case 'q': iv = va_arg(*args, Quad_t); break;
8991 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
8993 case 'h': iv = (short)tiv; break;
8994 case 'l': iv = (long)tiv; break;
8996 default: iv = tiv; break;
8998 case 'q': iv = (Quad_t)tiv; break;
9002 if ( !vectorize ) /* we already set uv above */
9007 esignbuf[esignlen++] = plus;
9011 esignbuf[esignlen++] = '-';
9054 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9065 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
9066 case 'l': uv = va_arg(*args, unsigned long); break;
9067 case 'V': uv = va_arg(*args, UV); break;
9068 default: uv = va_arg(*args, unsigned); break;
9070 case 'q': uv = va_arg(*args, Uquad_t); break;
9075 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
9077 case 'h': uv = (unsigned short)tuv; break;
9078 case 'l': uv = (unsigned long)tuv; break;
9080 default: uv = tuv; break;
9082 case 'q': uv = (Uquad_t)tuv; break;
9088 eptr = ebuf + sizeof ebuf;
9094 p = (char*)((c == 'X')
9095 ? "0123456789ABCDEF" : "0123456789abcdef");
9101 esignbuf[esignlen++] = '0';
9102 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9108 *--eptr = '0' + dig;
9110 if (alt && *eptr != '0')
9116 *--eptr = '0' + dig;
9119 esignbuf[esignlen++] = '0';
9120 esignbuf[esignlen++] = 'b';
9123 default: /* it had better be ten or less */
9124 #if defined(PERL_Y2KWARN)
9125 if (ckWARN(WARN_Y2K)) {
9127 char *s = SvPV(sv,n);
9128 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
9129 && (n == 2 || !isDIGIT(s[n-3])))
9131 Perl_warner(aTHX_ packWARN(WARN_Y2K),
9132 "Possible Y2K bug: %%%c %s",
9133 c, "format string following '19'");
9139 *--eptr = '0' + dig;
9140 } while (uv /= base);
9143 elen = (ebuf + sizeof ebuf) - eptr;
9146 zeros = precis - elen;
9147 else if (precis == 0 && elen == 1 && *eptr == '0')
9152 /* FLOATING POINT */
9155 c = 'f'; /* maybe %F isn't supported here */
9161 /* This is evil, but floating point is even more evil */
9163 /* for SV-style calling, we can only get NV
9164 for C-style calling, we assume %f is double;
9165 for simplicity we allow any of %Lf, %llf, %qf for long double
9169 #if defined(USE_LONG_DOUBLE)
9173 /* [perl #20339] - we should accept and ignore %lf rather than die */
9177 #if defined(USE_LONG_DOUBLE)
9178 intsize = args ? 0 : 'q';
9182 #if defined(HAS_LONG_DOUBLE)
9191 /* now we need (long double) if intsize == 'q', else (double) */
9192 nv = (args && !vectorize) ?
9193 #if LONG_DOUBLESIZE > DOUBLESIZE
9195 va_arg(*args, long double) :
9196 va_arg(*args, double)
9198 va_arg(*args, double)
9204 if (c != 'e' && c != 'E') {
9206 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9207 will cast our (long double) to (double) */
9208 (void)Perl_frexp(nv, &i);
9209 if (i == PERL_INT_MIN)
9210 Perl_die(aTHX_ "panic: frexp");
9212 need = BIT_DIGITS(i);
9214 need += has_precis ? precis : 6; /* known default */
9219 #ifdef HAS_LDBL_SPRINTF_BUG
9220 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9221 with sfio - Allen <allens@cpan.org> */
9224 # define MY_DBL_MAX DBL_MAX
9225 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9226 # if DOUBLESIZE >= 8
9227 # define MY_DBL_MAX 1.7976931348623157E+308L
9229 # define MY_DBL_MAX 3.40282347E+38L
9233 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9234 # define MY_DBL_MAX_BUG 1L
9236 # define MY_DBL_MAX_BUG MY_DBL_MAX
9240 # define MY_DBL_MIN DBL_MIN
9241 # else /* XXX guessing! -Allen */
9242 # if DOUBLESIZE >= 8
9243 # define MY_DBL_MIN 2.2250738585072014E-308L
9245 # define MY_DBL_MIN 1.17549435E-38L
9249 if ((intsize == 'q') && (c == 'f') &&
9250 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9252 /* it's going to be short enough that
9253 * long double precision is not needed */
9255 if ((nv <= 0L) && (nv >= -0L))
9256 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9258 /* would use Perl_fp_class as a double-check but not
9259 * functional on IRIX - see perl.h comments */
9261 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9262 /* It's within the range that a double can represent */
9263 #if defined(DBL_MAX) && !defined(DBL_MIN)
9264 if ((nv >= ((long double)1/DBL_MAX)) ||
9265 (nv <= (-(long double)1/DBL_MAX)))
9267 fix_ldbl_sprintf_bug = TRUE;
9270 if (fix_ldbl_sprintf_bug == TRUE) {
9280 # undef MY_DBL_MAX_BUG
9283 #endif /* HAS_LDBL_SPRINTF_BUG */
9285 need += 20; /* fudge factor */
9286 if (PL_efloatsize < need) {
9287 Safefree(PL_efloatbuf);
9288 PL_efloatsize = need + 20; /* more fudge */
9289 New(906, PL_efloatbuf, PL_efloatsize, char);
9290 PL_efloatbuf[0] = '\0';
9293 if ( !(width || left || plus || alt) && fill != '0'
9294 && has_precis && intsize != 'q' ) { /* Shortcuts */
9295 /* See earlier comment about buggy Gconvert when digits,
9297 if ( c == 'g' && precis) {
9298 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9299 if (*PL_efloatbuf) /* May return an empty string for digits==0 */
9300 goto float_converted;
9301 } else if ( c == 'f' && !precis) {
9302 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9306 eptr = ebuf + sizeof ebuf;
9309 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9310 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9311 if (intsize == 'q') {
9312 /* Copy the one or more characters in a long double
9313 * format before the 'base' ([efgEFG]) character to
9314 * the format string. */
9315 static char const prifldbl[] = PERL_PRIfldbl;
9316 char const *p = prifldbl + sizeof(prifldbl) - 3;
9317 while (p >= prifldbl) { *--eptr = *p--; }
9322 do { *--eptr = '0' + (base % 10); } while (base /= 10);
9327 do { *--eptr = '0' + (base % 10); } while (base /= 10);
9339 /* No taint. Otherwise we are in the strange situation
9340 * where printf() taints but print($float) doesn't.
9342 #if defined(HAS_LONG_DOUBLE)
9344 (void)sprintf(PL_efloatbuf, eptr, nv);
9346 (void)sprintf(PL_efloatbuf, eptr, (double)nv);
9348 (void)sprintf(PL_efloatbuf, eptr, nv);
9351 eptr = PL_efloatbuf;
9352 elen = strlen(PL_efloatbuf);
9358 i = SvCUR(sv) - origlen;
9359 if (args && !vectorize) {
9361 case 'h': *(va_arg(*args, short*)) = i; break;
9362 default: *(va_arg(*args, int*)) = i; break;
9363 case 'l': *(va_arg(*args, long*)) = i; break;
9364 case 'V': *(va_arg(*args, IV*)) = i; break;
9366 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
9371 sv_setuv_mg(argsv, (UV)i);
9373 continue; /* not "break" */
9379 if (!args && ckWARN(WARN_PRINTF) &&
9380 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
9381 SV *msg = sv_newmortal();
9382 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9383 (PL_op->op_type == OP_PRTF) ? "" : "s");
9386 Perl_sv_catpvf(aTHX_ msg,
9387 "\"%%%c\"", c & 0xFF);
9389 Perl_sv_catpvf(aTHX_ msg,
9390 "\"%%\\%03"UVof"\"",
9393 sv_catpv(msg, "end of string");
9394 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, msg); /* yes, this is reentrant */
9397 /* output mangled stuff ... */
9403 /* ... right here, because formatting flags should not apply */
9404 SvGROW(sv, SvCUR(sv) + elen + 1);
9406 Copy(eptr, p, elen, char);
9409 SvCUR_set(sv, p - SvPVX_const(sv));
9411 continue; /* not "break" */
9414 /* calculate width before utf8_upgrade changes it */
9415 have = esignlen + zeros + elen;
9417 if (is_utf8 != has_utf8) {
9420 sv_utf8_upgrade(sv);
9423 SV *nsv = sv_2mortal(newSVpvn(eptr, elen));
9424 sv_utf8_upgrade(nsv);
9428 SvGROW(sv, SvCUR(sv) + elen + 1);
9432 /* Use memchr() instead of strchr(), as eptr is not guaranteed */
9433 /* to point to a null-terminated string. */
9434 if (left && ckWARN(WARN_PRINTF) && memchr(eptr, '\n', elen) &&
9435 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF))
9436 Perl_warner(aTHX_ packWARN(WARN_PRINTF),
9437 "Newline in left-justified string for %sprintf",
9438 (PL_op->op_type == OP_PRTF) ? "" : "s");
9440 need = (have > width ? have : width);
9443 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9445 if (esignlen && fill == '0') {
9446 for (i = 0; i < (int)esignlen; i++)
9450 memset(p, fill, gap);
9453 if (esignlen && fill != '0') {
9454 for (i = 0; i < (int)esignlen; i++)
9458 for (i = zeros; i; i--)
9462 Copy(eptr, p, elen, char);
9466 memset(p, ' ', gap);
9471 Copy(dotstr, p, dotstrlen, char);
9475 vectorize = FALSE; /* done iterating over vecstr */
9482 SvCUR_set(sv, p - SvPVX_const(sv));
9490 /* =========================================================================
9492 =head1 Cloning an interpreter
9494 All the macros and functions in this section are for the private use of
9495 the main function, perl_clone().
9497 The foo_dup() functions make an exact copy of an existing foo thinngy.
9498 During the course of a cloning, a hash table is used to map old addresses
9499 to new addresses. The table is created and manipulated with the
9500 ptr_table_* functions.
9504 ============================================================================*/
9507 #if defined(USE_ITHREADS)
9509 #if defined(USE_5005THREADS)
9510 # include "error: USE_5005THREADS and USE_ITHREADS are incompatible"
9513 #ifndef GpREFCNT_inc
9514 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9518 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
9519 #define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
9520 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9521 #define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
9522 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9523 #define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
9524 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9525 #define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
9526 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9527 #define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
9528 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9529 #define SAVEPV(p) (p ? savepv(p) : Nullch)
9530 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
9533 /* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
9534 regcomp.c. AMS 20010712 */
9537 Perl_re_dup(pTHX_ REGEXP *r, CLONE_PARAMS *param)
9541 struct reg_substr_datum *s;
9544 return (REGEXP *)NULL;
9546 if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
9549 len = r->offsets[0];
9550 npar = r->nparens+1;
9552 Newc(0, ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
9553 Copy(r->program, ret->program, len+1, regnode);
9555 New(0, ret->startp, npar, I32);
9556 Copy(r->startp, ret->startp, npar, I32);
9557 New(0, ret->endp, npar, I32);
9558 Copy(r->startp, ret->startp, npar, I32);
9560 New(0, ret->substrs, 1, struct reg_substr_data);
9561 for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
9562 s->min_offset = r->substrs->data[i].min_offset;
9563 s->max_offset = r->substrs->data[i].max_offset;
9564 s->substr = sv_dup_inc(r->substrs->data[i].substr, param);
9565 s->utf8_substr = sv_dup_inc(r->substrs->data[i].utf8_substr, param);
9568 ret->regstclass = NULL;
9571 const int count = r->data->count;
9573 Newc(0, d, sizeof(struct reg_data) + count*sizeof(void *),
9574 char, struct reg_data);
9575 New(0, d->what, count, U8);
9578 for (i = 0; i < count; i++) {
9579 d->what[i] = r->data->what[i];
9580 switch (d->what[i]) {
9582 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
9585 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
9588 /* This is cheating. */
9589 New(0, d->data[i], 1, struct regnode_charclass_class);
9590 StructCopy(r->data->data[i], d->data[i],
9591 struct regnode_charclass_class);
9592 ret->regstclass = (regnode*)d->data[i];
9595 /* Compiled op trees are readonly, and can thus be
9596 shared without duplication. */
9598 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
9602 d->data[i] = r->data->data[i];
9612 New(0, ret->offsets, 2*len+1, U32);
9613 Copy(r->offsets, ret->offsets, 2*len+1, U32);
9615 ret->precomp = SAVEPVN(r->precomp, r->prelen);
9616 ret->refcnt = r->refcnt;
9617 ret->minlen = r->minlen;
9618 ret->prelen = r->prelen;
9619 ret->nparens = r->nparens;
9620 ret->lastparen = r->lastparen;
9621 ret->lastcloseparen = r->lastcloseparen;
9622 ret->reganch = r->reganch;
9624 ret->sublen = r->sublen;
9626 if (RX_MATCH_COPIED(ret))
9627 ret->subbeg = SAVEPVN(r->subbeg, r->sublen);
9629 ret->subbeg = Nullch;
9631 ptr_table_store(PL_ptr_table, r, ret);
9635 /* duplicate a file handle */
9638 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
9644 return (PerlIO*)NULL;
9646 /* look for it in the table first */
9647 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9651 /* create anew and remember what it is */
9652 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
9653 ptr_table_store(PL_ptr_table, fp, ret);
9657 /* duplicate a directory handle */
9660 Perl_dirp_dup(pTHX_ DIR *dp)
9668 /* duplicate a typeglob */
9671 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
9676 /* look for it in the table first */
9677 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9681 /* create anew and remember what it is */
9682 Newz(0, ret, 1, GP);
9683 ptr_table_store(PL_ptr_table, gp, ret);
9686 ret->gp_refcnt = 0; /* must be before any other dups! */
9687 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
9688 ret->gp_io = io_dup_inc(gp->gp_io, param);
9689 ret->gp_form = cv_dup_inc(gp->gp_form, param);
9690 ret->gp_av = av_dup_inc(gp->gp_av, param);
9691 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
9692 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9693 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
9694 ret->gp_cvgen = gp->gp_cvgen;
9695 ret->gp_flags = gp->gp_flags;
9696 ret->gp_line = gp->gp_line;
9697 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
9701 /* duplicate a chain of magic */
9704 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
9706 MAGIC *mgprev = (MAGIC*)NULL;
9709 return (MAGIC*)NULL;
9710 /* look for it in the table first */
9711 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9715 for (; mg; mg = mg->mg_moremagic) {
9717 Newz(0, nmg, 1, MAGIC);
9719 mgprev->mg_moremagic = nmg;
9722 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
9723 nmg->mg_private = mg->mg_private;
9724 nmg->mg_type = mg->mg_type;
9725 nmg->mg_flags = mg->mg_flags;
9726 if (mg->mg_type == PERL_MAGIC_qr) {
9727 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
9729 else if(mg->mg_type == PERL_MAGIC_backref) {
9730 const AV * const av = (AV*) mg->mg_obj;
9733 (void)SvREFCNT_inc(nmg->mg_obj = (SV*)newAV());
9735 for (i = AvFILLp(av); i >= 0; i--) {
9736 if (!svp[i]) continue;
9737 av_push((AV*)nmg->mg_obj,sv_dup(svp[i],param));
9741 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
9742 ? sv_dup_inc(mg->mg_obj, param)
9743 : sv_dup(mg->mg_obj, param);
9745 nmg->mg_len = mg->mg_len;
9746 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
9747 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
9748 if (mg->mg_len > 0) {
9749 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
9750 if (mg->mg_type == PERL_MAGIC_overload_table &&
9751 AMT_AMAGIC((AMT*)mg->mg_ptr))
9753 AMT *amtp = (AMT*)mg->mg_ptr;
9754 AMT *namtp = (AMT*)nmg->mg_ptr;
9756 for (i = 1; i < NofAMmeth; i++) {
9757 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
9761 else if (mg->mg_len == HEf_SVKEY)
9762 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
9764 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9765 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9772 /* create a new pointer-mapping table */
9775 Perl_ptr_table_new(pTHX)
9778 Newz(0, tbl, 1, PTR_TBL_t);
9781 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
9786 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 3)
9788 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 2)
9796 struct ptr_tbl_ent* pte;
9797 struct ptr_tbl_ent* pteend;
9799 New(54, ptr, PERL_ARENA_SIZE/sizeof(XPV), XPV);
9800 ptr->xpv_pv = (char*)PL_pte_arenaroot;
9801 PL_pte_arenaroot = ptr;
9803 pte = (struct ptr_tbl_ent*)ptr;
9804 pteend = &pte[PERL_ARENA_SIZE / sizeof(struct ptr_tbl_ent) - 1];
9805 PL_pte_root = ++pte;
9806 while (pte < pteend) {
9807 pte->next = pte + 1;
9813 STATIC struct ptr_tbl_ent*
9816 struct ptr_tbl_ent* pte;
9820 PL_pte_root = pte->next;
9825 S_del_pte(pTHX_ struct ptr_tbl_ent*p)
9827 p->next = PL_pte_root;
9831 /* map an existing pointer using a table */
9834 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
9836 PTR_TBL_ENT_t *tblent;
9837 const UV hash = PTR_TABLE_HASH(sv);
9839 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9840 for (; tblent; tblent = tblent->next) {
9841 if (tblent->oldval == sv)
9842 return tblent->newval;
9847 /* add a new entry to a pointer-mapping table */
9850 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
9852 PTR_TBL_ENT_t *tblent, **otblent;
9853 /* XXX this may be pessimal on platforms where pointers aren't good
9854 * hash values e.g. if they grow faster in the most significant
9856 const UV hash = PTR_TABLE_HASH(oldv);
9860 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
9861 for (tblent = *otblent; tblent; empty=0, tblent = tblent->next) {
9862 if (tblent->oldval == oldv) {
9863 tblent->newval = newv;
9867 tblent = S_new_pte(aTHX);
9868 tblent->oldval = oldv;
9869 tblent->newval = newv;
9870 tblent->next = *otblent;
9873 if (!empty && tbl->tbl_items > tbl->tbl_max)
9874 ptr_table_split(tbl);
9877 /* double the hash bucket size of an existing ptr table */
9880 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9882 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
9883 const UV oldsize = tbl->tbl_max + 1;
9884 UV newsize = oldsize * 2;
9887 Renew(ary, newsize, PTR_TBL_ENT_t*);
9888 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9889 tbl->tbl_max = --newsize;
9891 for (i=0; i < oldsize; i++, ary++) {
9892 PTR_TBL_ENT_t **curentp, **entp, *ent;
9895 curentp = ary + oldsize;
9896 for (entp = ary, ent = *ary; ent; ent = *entp) {
9897 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
9899 ent->next = *curentp;
9909 /* remove all the entries from a ptr table */
9912 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9914 register PTR_TBL_ENT_t **array;
9915 register PTR_TBL_ENT_t *entry;
9919 if (!tbl || !tbl->tbl_items) {
9923 array = tbl->tbl_ary;
9929 PTR_TBL_ENT_t *oentry = entry;
9930 entry = entry->next;
9931 S_del_pte(aTHX_ oentry);
9934 if (++riter > max) {
9937 entry = array[riter];
9944 /* clear and free a ptr table */
9947 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9952 ptr_table_clear(tbl);
9953 Safefree(tbl->tbl_ary);
9961 /* attempt to make everything in the typeglob readonly */
9964 S_gv_share(pTHX_ SV *sstr, CLONE_PARAMS *param)
9967 SV *sv = ¶m->proto_perl->Isv_no; /* just need SvREADONLY-ness */
9969 if (GvIO(gv) || GvFORM(gv)) {
9970 GvUNIQUE_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
9972 else if (!GvCV(gv)) {
9976 /* CvPADLISTs cannot be shared */
9977 if (!SvREADONLY(GvCV(gv)) && !CvXSUB(GvCV(gv))) {
9982 if (!GvUNIQUE(gv)) {
9984 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
9985 HvNAME_get(GvSTASH(gv)), GvNAME(gv));
9991 * write attempts will die with
9992 * "Modification of a read-only value attempted"
9998 SvREADONLY_on(GvSV(gv));
10002 GvAV(gv) = (AV*)sv;
10005 SvREADONLY_on(GvAV(gv));
10009 GvHV(gv) = (HV*)sv;
10012 SvREADONLY_on(GvHV(gv));
10015 return sstr; /* he_dup() will SvREFCNT_inc() */
10018 /* duplicate an SV of any type (including AV, HV etc) */
10021 Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param)
10024 SvRV_set(dstr, SvWEAKREF(sstr)
10025 ? sv_dup(SvRV(sstr), param)
10026 : sv_dup_inc(SvRV(sstr), param));
10029 else if (SvPVX_const(sstr)) {
10030 /* Has something there */
10032 /* Normal PV - clone whole allocated space */
10033 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
10036 /* Special case - not normally malloced for some reason */
10037 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10038 /* A "shared" PV - clone it as unshared string */
10039 if(SvPADTMP(sstr)) {
10040 /* However, some of them live in the pad
10041 and they should not have these flags
10044 SvPV_set(dstr, sharepvn(SvPVX_const(sstr), SvCUR(sstr),
10046 SvUV_set(dstr, SvUVX(sstr));
10049 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvCUR(sstr)));
10051 SvREADONLY_off(dstr);
10055 /* Some other special case - random pointer */
10056 SvPV_set(dstr, SvPVX(sstr));
10061 /* Copy the Null */
10062 if (SvTYPE(dstr) == SVt_RV)
10063 SvRV_set(dstr, NULL);
10070 Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param)
10074 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
10076 /* look for it in the table first */
10077 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
10081 if(param->flags & CLONEf_JOIN_IN) {
10082 /** We are joining here so we don't want do clone
10083 something that is bad **/
10084 const char *hvname;
10086 if(SvTYPE(sstr) == SVt_PVHV &&
10087 (hvname = HvNAME_get(sstr))) {
10088 /** don't clone stashes if they already exist **/
10089 HV* old_stash = gv_stashpv(hvname,0);
10090 return (SV*) old_stash;
10094 /* create anew and remember what it is */
10096 ptr_table_store(PL_ptr_table, sstr, dstr);
10099 SvFLAGS(dstr) = SvFLAGS(sstr);
10100 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
10101 SvREFCNT(dstr) = 0; /* must be before any other dups! */
10104 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
10105 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10106 PL_watch_pvx, SvPVX_const(sstr));
10109 /* don't clone objects whose class has asked us not to */
10110 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10111 SvFLAGS(dstr) &= ~SVTYPEMASK;
10112 SvOBJECT_off(dstr);
10116 switch (SvTYPE(sstr)) {
10118 SvANY(dstr) = NULL;
10121 SvANY(dstr) = new_XIV();
10122 SvIV_set(dstr, SvIVX(sstr));
10125 SvANY(dstr) = new_XNV();
10126 SvNV_set(dstr, SvNVX(sstr));
10129 SvANY(dstr) = new_XRV();
10130 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10133 SvANY(dstr) = new_XPV();
10134 SvCUR_set(dstr, SvCUR(sstr));
10135 SvLEN_set(dstr, SvLEN(sstr));
10136 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10139 SvANY(dstr) = new_XPVIV();
10140 SvCUR_set(dstr, SvCUR(sstr));
10141 SvLEN_set(dstr, SvLEN(sstr));
10142 SvIV_set(dstr, SvIVX(sstr));
10143 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10146 SvANY(dstr) = new_XPVNV();
10147 SvCUR_set(dstr, SvCUR(sstr));
10148 SvLEN_set(dstr, SvLEN(sstr));
10149 SvIV_set(dstr, SvIVX(sstr));
10150 SvNV_set(dstr, SvNVX(sstr));
10151 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10154 SvANY(dstr) = new_XPVMG();
10155 SvCUR_set(dstr, SvCUR(sstr));
10156 SvLEN_set(dstr, SvLEN(sstr));
10157 SvIV_set(dstr, SvIVX(sstr));
10158 SvNV_set(dstr, SvNVX(sstr));
10159 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10160 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10161 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10164 SvANY(dstr) = new_XPVBM();
10165 SvCUR_set(dstr, SvCUR(sstr));
10166 SvLEN_set(dstr, SvLEN(sstr));
10167 SvIV_set(dstr, SvIVX(sstr));
10168 SvNV_set(dstr, SvNVX(sstr));
10169 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10170 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10171 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10172 BmRARE(dstr) = BmRARE(sstr);
10173 BmUSEFUL(dstr) = BmUSEFUL(sstr);
10174 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
10177 SvANY(dstr) = new_XPVLV();
10178 SvCUR_set(dstr, SvCUR(sstr));
10179 SvLEN_set(dstr, SvLEN(sstr));
10180 SvIV_set(dstr, SvIVX(sstr));
10181 SvNV_set(dstr, SvNVX(sstr));
10182 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10183 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10184 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10185 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
10186 LvTARGLEN(dstr) = LvTARGLEN(sstr);
10187 if (LvTYPE(sstr) == 't') /* for tie: unrefcnted fake (SV**) */
10188 LvTARG(dstr) = dstr;
10189 else if (LvTYPE(sstr) == 'T') /* for tie: fake HE */
10190 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(sstr), 0, param);
10192 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr), param);
10193 LvTYPE(dstr) = LvTYPE(sstr);
10196 if (GvUNIQUE((GV*)sstr)) {
10198 if ((share = gv_share(sstr, param))) {
10201 ptr_table_store(PL_ptr_table, sstr, dstr);
10203 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
10204 HvNAME_get(GvSTASH(share)), GvNAME(share));
10209 SvANY(dstr) = new_XPVGV();
10210 SvCUR_set(dstr, SvCUR(sstr));
10211 SvLEN_set(dstr, SvLEN(sstr));
10212 SvIV_set(dstr, SvIVX(sstr));
10213 SvNV_set(dstr, SvNVX(sstr));
10214 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10215 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10216 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10217 GvNAMELEN(dstr) = GvNAMELEN(sstr);
10218 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
10219 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr), param);
10220 GvFLAGS(dstr) = GvFLAGS(sstr);
10221 GvGP(dstr) = gp_dup(GvGP(sstr), param);
10222 (void)GpREFCNT_inc(GvGP(dstr));
10225 SvANY(dstr) = new_XPVIO();
10226 SvCUR_set(dstr, SvCUR(sstr));
10227 SvLEN_set(dstr, SvLEN(sstr));
10228 SvIV_set(dstr, SvIVX(sstr));
10229 SvNV_set(dstr, SvNVX(sstr));
10230 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10231 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10232 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10233 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr), param);
10234 if (IoOFP(sstr) == IoIFP(sstr))
10235 IoOFP(dstr) = IoIFP(dstr);
10237 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr), param);
10238 /* PL_rsfp_filters entries have fake IoDIRP() */
10239 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
10240 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
10242 IoDIRP(dstr) = IoDIRP(sstr);
10243 IoLINES(dstr) = IoLINES(sstr);
10244 IoPAGE(dstr) = IoPAGE(sstr);
10245 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
10246 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
10247 if(IoFLAGS(sstr) & IOf_FAKE_DIRP) {
10248 /* I have no idea why fake dirp (rsfps)
10249 should be treaded differently but otherwise
10250 we end up with leaks -- sky*/
10251 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(sstr), param);
10252 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(sstr), param);
10253 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(sstr), param);
10255 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr), param);
10256 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr), param);
10257 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr), param);
10259 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
10260 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
10261 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
10262 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
10263 IoTYPE(dstr) = IoTYPE(sstr);
10264 IoFLAGS(dstr) = IoFLAGS(sstr);
10267 SvANY(dstr) = new_XPVAV();
10268 SvCUR_set(dstr, SvCUR(sstr));
10269 SvLEN_set(dstr, SvLEN(sstr));
10270 SvIV_set(dstr, SvIVX(sstr));
10271 SvNV_set(dstr, SvNVX(sstr));
10272 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10273 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10274 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param);
10275 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
10276 if (AvARRAY((AV*)sstr)) {
10277 SV **dst_ary, **src_ary;
10278 SSize_t items = AvFILLp((AV*)sstr) + 1;
10280 src_ary = AvARRAY((AV*)sstr);
10281 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
10282 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10283 SvPV_set(dstr, (char*)dst_ary);
10284 AvALLOC((AV*)dstr) = dst_ary;
10285 if (AvREAL((AV*)sstr)) {
10286 while (items-- > 0)
10287 *dst_ary++ = sv_dup_inc(*src_ary++, param);
10290 while (items-- > 0)
10291 *dst_ary++ = sv_dup(*src_ary++, param);
10293 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10294 while (items-- > 0) {
10295 *dst_ary++ = &PL_sv_undef;
10299 SvPV_set(dstr, Nullch);
10300 AvALLOC((AV*)dstr) = (SV**)NULL;
10304 SvANY(dstr) = new_XPVHV();
10305 SvCUR_set(dstr, SvCUR(sstr));
10306 SvLEN_set(dstr, SvLEN(sstr));
10307 HvTOTALKEYS(dstr) = HvTOTALKEYS(sstr);
10308 SvNV_set(dstr, SvNVX(sstr));
10309 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10310 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10311 HvRITER_set((HV*)dstr, HvRITER_get((HV*)sstr));
10312 if (HvARRAY((HV*)sstr)) {
10313 bool sharekeys = !!HvSHAREKEYS(sstr);
10315 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
10316 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
10317 New(0, dxhv->xhv_array,
10318 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
10319 while (i <= sxhv->xhv_max) {
10320 HE *source = HvARRAY(sstr)[i];
10322 = source ? he_dup(source, sharekeys, param) : 0;
10325 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter,
10326 (bool)!!HvSHAREKEYS(sstr), param);
10329 SvPV_set(dstr, Nullch);
10330 HvEITER_set((HV*)dstr, (HE*)NULL);
10332 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
10333 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
10334 /* Record stashes for possible cloning in Perl_clone(). */
10335 if(HvNAME((HV*)dstr))
10336 av_push(param->stashes, dstr);
10339 SvANY(dstr) = new_XPVFM();
10340 FmLINES(dstr) = FmLINES(sstr);
10344 SvANY(dstr) = new_XPVCV();
10346 SvCUR_set(dstr, SvCUR(sstr));
10347 SvLEN_set(dstr, SvLEN(sstr));
10348 SvIV_set(dstr, SvIVX(sstr));
10349 SvNV_set(dstr, SvNVX(sstr));
10350 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10351 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10352 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10353 CvSTASH(dstr) = hv_dup(CvSTASH(sstr), param); /* NOTE: not refcounted */
10354 CvSTART(dstr) = CvSTART(sstr);
10356 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
10358 CvXSUB(dstr) = CvXSUB(sstr);
10359 CvXSUBANY(dstr) = CvXSUBANY(sstr);
10360 if (CvCONST(sstr)) {
10361 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(sstr)) ?
10362 SvREFCNT_inc(CvXSUBANY(sstr).any_ptr) :
10363 sv_dup_inc(CvXSUBANY(sstr).any_ptr, param);
10365 /* don't dup if copying back - CvGV isn't refcounted, so the
10366 * duped GV may never be freed. A bit of a hack! DAPM */
10367 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
10368 Nullgv : gv_dup(CvGV(sstr), param) ;
10369 if (param->flags & CLONEf_COPY_STACKS) {
10370 CvDEPTH(dstr) = CvDEPTH(sstr);
10374 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10375 CvOUTSIDE_SEQ(dstr) = CvOUTSIDE_SEQ(sstr);
10377 CvWEAKOUTSIDE(sstr)
10378 ? cv_dup( CvOUTSIDE(sstr), param)
10379 : cv_dup_inc(CvOUTSIDE(sstr), param);
10380 CvFLAGS(dstr) = CvFLAGS(sstr);
10381 CvFILE(dstr) = CvXSUB(sstr) ? CvFILE(sstr) : SAVEPV(CvFILE(sstr));
10384 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
10388 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10394 /* duplicate a context */
10397 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10399 PERL_CONTEXT *ncxs;
10402 return (PERL_CONTEXT*)NULL;
10404 /* look for it in the table first */
10405 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10409 /* create anew and remember what it is */
10410 Newz(56, ncxs, max + 1, PERL_CONTEXT);
10411 ptr_table_store(PL_ptr_table, cxs, ncxs);
10414 PERL_CONTEXT *cx = &cxs[ix];
10415 PERL_CONTEXT *ncx = &ncxs[ix];
10416 ncx->cx_type = cx->cx_type;
10417 if (CxTYPE(cx) == CXt_SUBST) {
10418 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10421 ncx->blk_oldsp = cx->blk_oldsp;
10422 ncx->blk_oldcop = cx->blk_oldcop;
10423 ncx->blk_oldretsp = cx->blk_oldretsp;
10424 ncx->blk_oldmarksp = cx->blk_oldmarksp;
10425 ncx->blk_oldscopesp = cx->blk_oldscopesp;
10426 ncx->blk_oldpm = cx->blk_oldpm;
10427 ncx->blk_gimme = cx->blk_gimme;
10428 switch (CxTYPE(cx)) {
10430 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
10431 ? cv_dup_inc(cx->blk_sub.cv, param)
10432 : cv_dup(cx->blk_sub.cv,param));
10433 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
10434 ? av_dup_inc(cx->blk_sub.argarray, param)
10436 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
10437 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
10438 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10439 ncx->blk_sub.lval = cx->blk_sub.lval;
10442 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10443 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
10444 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
10445 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
10446 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
10449 ncx->blk_loop.label = cx->blk_loop.label;
10450 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
10451 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
10452 ncx->blk_loop.next_op = cx->blk_loop.next_op;
10453 ncx->blk_loop.last_op = cx->blk_loop.last_op;
10454 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
10455 ? cx->blk_loop.iterdata
10456 : gv_dup((GV*)cx->blk_loop.iterdata, param));
10457 ncx->blk_loop.oldcomppad
10458 = (PAD*)ptr_table_fetch(PL_ptr_table,
10459 cx->blk_loop.oldcomppad);
10460 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
10461 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
10462 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
10463 ncx->blk_loop.iterix = cx->blk_loop.iterix;
10464 ncx->blk_loop.itermax = cx->blk_loop.itermax;
10467 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
10468 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
10469 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
10470 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
10482 /* duplicate a stack info structure */
10485 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
10490 return (PERL_SI*)NULL;
10492 /* look for it in the table first */
10493 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10497 /* create anew and remember what it is */
10498 Newz(56, nsi, 1, PERL_SI);
10499 ptr_table_store(PL_ptr_table, si, nsi);
10501 nsi->si_stack = av_dup_inc(si->si_stack, param);
10502 nsi->si_cxix = si->si_cxix;
10503 nsi->si_cxmax = si->si_cxmax;
10504 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
10505 nsi->si_type = si->si_type;
10506 nsi->si_prev = si_dup(si->si_prev, param);
10507 nsi->si_next = si_dup(si->si_next, param);
10508 nsi->si_markoff = si->si_markoff;
10513 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
10514 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
10515 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
10516 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
10517 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
10518 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
10519 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
10520 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
10521 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
10522 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
10523 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
10524 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
10525 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10526 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10529 #define pv_dup_inc(p) SAVEPV(p)
10530 #define pv_dup(p) SAVEPV(p)
10531 #define svp_dup_inc(p,pp) any_dup(p,pp)
10533 /* map any object to the new equivent - either something in the
10534 * ptr table, or something in the interpreter structure
10538 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
10543 return (void*)NULL;
10545 /* look for it in the table first */
10546 ret = ptr_table_fetch(PL_ptr_table, v);
10550 /* see if it is part of the interpreter structure */
10551 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
10552 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
10560 /* duplicate the save stack */
10563 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
10565 ANY *ss = proto_perl->Tsavestack;
10566 I32 ix = proto_perl->Tsavestack_ix;
10567 I32 max = proto_perl->Tsavestack_max;
10579 void (*dptr) (void*);
10580 void (*dxptr) (pTHX_ void*);
10583 Newz(54, nss, max, ANY);
10586 I32 i = POPINT(ss,ix);
10587 TOPINT(nss,ix) = i;
10589 case SAVEt_ITEM: /* normal string */
10590 sv = (SV*)POPPTR(ss,ix);
10591 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10592 sv = (SV*)POPPTR(ss,ix);
10593 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10595 case SAVEt_SV: /* scalar reference */
10596 sv = (SV*)POPPTR(ss,ix);
10597 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10598 gv = (GV*)POPPTR(ss,ix);
10599 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10601 case SAVEt_GENERIC_PVREF: /* generic char* */
10602 c = (char*)POPPTR(ss,ix);
10603 TOPPTR(nss,ix) = pv_dup(c);
10604 ptr = POPPTR(ss,ix);
10605 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10607 case SAVEt_SHARED_PVREF: /* char* in shared space */
10608 c = (char*)POPPTR(ss,ix);
10609 TOPPTR(nss,ix) = savesharedpv(c);
10610 ptr = POPPTR(ss,ix);
10611 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10613 case SAVEt_GENERIC_SVREF: /* generic sv */
10614 case SAVEt_SVREF: /* scalar reference */
10615 sv = (SV*)POPPTR(ss,ix);
10616 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10617 ptr = POPPTR(ss,ix);
10618 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10620 case SAVEt_AV: /* array reference */
10621 av = (AV*)POPPTR(ss,ix);
10622 TOPPTR(nss,ix) = av_dup_inc(av, param);
10623 gv = (GV*)POPPTR(ss,ix);
10624 TOPPTR(nss,ix) = gv_dup(gv, param);
10626 case SAVEt_HV: /* hash reference */
10627 hv = (HV*)POPPTR(ss,ix);
10628 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10629 gv = (GV*)POPPTR(ss,ix);
10630 TOPPTR(nss,ix) = gv_dup(gv, param);
10632 case SAVEt_INT: /* int reference */
10633 ptr = POPPTR(ss,ix);
10634 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10635 intval = (int)POPINT(ss,ix);
10636 TOPINT(nss,ix) = intval;
10638 case SAVEt_LONG: /* long reference */
10639 ptr = POPPTR(ss,ix);
10640 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10641 longval = (long)POPLONG(ss,ix);
10642 TOPLONG(nss,ix) = longval;
10644 case SAVEt_I32: /* I32 reference */
10645 case SAVEt_I16: /* I16 reference */
10646 case SAVEt_I8: /* I8 reference */
10647 ptr = POPPTR(ss,ix);
10648 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10650 TOPINT(nss,ix) = i;
10652 case SAVEt_IV: /* IV reference */
10653 ptr = POPPTR(ss,ix);
10654 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10656 TOPIV(nss,ix) = iv;
10658 case SAVEt_SPTR: /* SV* reference */
10659 ptr = POPPTR(ss,ix);
10660 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10661 sv = (SV*)POPPTR(ss,ix);
10662 TOPPTR(nss,ix) = sv_dup(sv, param);
10664 case SAVEt_VPTR: /* random* reference */
10665 ptr = POPPTR(ss,ix);
10666 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10667 ptr = POPPTR(ss,ix);
10668 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10670 case SAVEt_PPTR: /* char* reference */
10671 ptr = POPPTR(ss,ix);
10672 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10673 c = (char*)POPPTR(ss,ix);
10674 TOPPTR(nss,ix) = pv_dup(c);
10676 case SAVEt_HPTR: /* HV* reference */
10677 ptr = POPPTR(ss,ix);
10678 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10679 hv = (HV*)POPPTR(ss,ix);
10680 TOPPTR(nss,ix) = hv_dup(hv, param);
10682 case SAVEt_APTR: /* AV* reference */
10683 ptr = POPPTR(ss,ix);
10684 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10685 av = (AV*)POPPTR(ss,ix);
10686 TOPPTR(nss,ix) = av_dup(av, param);
10689 gv = (GV*)POPPTR(ss,ix);
10690 TOPPTR(nss,ix) = gv_dup(gv, param);
10692 case SAVEt_GP: /* scalar reference */
10693 gp = (GP*)POPPTR(ss,ix);
10694 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
10695 (void)GpREFCNT_inc(gp);
10696 gv = (GV*)POPPTR(ss,ix);
10697 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10698 c = (char*)POPPTR(ss,ix);
10699 TOPPTR(nss,ix) = pv_dup(c);
10701 TOPIV(nss,ix) = iv;
10703 TOPIV(nss,ix) = iv;
10706 case SAVEt_MORTALIZESV:
10707 sv = (SV*)POPPTR(ss,ix);
10708 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10711 ptr = POPPTR(ss,ix);
10712 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10713 /* these are assumed to be refcounted properly */
10714 switch (((OP*)ptr)->op_type) {
10716 case OP_LEAVESUBLV:
10720 case OP_LEAVEWRITE:
10721 TOPPTR(nss,ix) = ptr;
10726 TOPPTR(nss,ix) = Nullop;
10731 TOPPTR(nss,ix) = Nullop;
10734 c = (char*)POPPTR(ss,ix);
10735 TOPPTR(nss,ix) = pv_dup_inc(c);
10737 case SAVEt_CLEARSV:
10738 longval = POPLONG(ss,ix);
10739 TOPLONG(nss,ix) = longval;
10742 hv = (HV*)POPPTR(ss,ix);
10743 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10744 c = (char*)POPPTR(ss,ix);
10745 TOPPTR(nss,ix) = pv_dup_inc(c);
10747 TOPINT(nss,ix) = i;
10749 case SAVEt_DESTRUCTOR:
10750 ptr = POPPTR(ss,ix);
10751 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10752 dptr = POPDPTR(ss,ix);
10753 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
10754 any_dup(FPTR2DPTR(void *, dptr),
10757 case SAVEt_DESTRUCTOR_X:
10758 ptr = POPPTR(ss,ix);
10759 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
10760 dxptr = POPDXPTR(ss,ix);
10761 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
10762 any_dup(FPTR2DPTR(void *, dxptr),
10765 case SAVEt_REGCONTEXT:
10768 TOPINT(nss,ix) = i;
10771 case SAVEt_STACK_POS: /* Position on Perl stack */
10773 TOPINT(nss,ix) = i;
10775 case SAVEt_AELEM: /* array element */
10776 sv = (SV*)POPPTR(ss,ix);
10777 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10779 TOPINT(nss,ix) = i;
10780 av = (AV*)POPPTR(ss,ix);
10781 TOPPTR(nss,ix) = av_dup_inc(av, param);
10783 case SAVEt_HELEM: /* hash element */
10784 sv = (SV*)POPPTR(ss,ix);
10785 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10786 sv = (SV*)POPPTR(ss,ix);
10787 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10788 hv = (HV*)POPPTR(ss,ix);
10789 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10792 ptr = POPPTR(ss,ix);
10793 TOPPTR(nss,ix) = ptr;
10797 TOPINT(nss,ix) = i;
10799 case SAVEt_COMPPAD:
10800 av = (AV*)POPPTR(ss,ix);
10801 TOPPTR(nss,ix) = av_dup(av, param);
10804 longval = (long)POPLONG(ss,ix);
10805 TOPLONG(nss,ix) = longval;
10806 ptr = POPPTR(ss,ix);
10807 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10808 sv = (SV*)POPPTR(ss,ix);
10809 TOPPTR(nss,ix) = sv_dup(sv, param);
10812 ptr = POPPTR(ss,ix);
10813 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10814 longval = (long)POPBOOL(ss,ix);
10815 TOPBOOL(nss,ix) = (bool)longval;
10818 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
10826 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
10827 * flag to the result. This is done for each stash before cloning starts,
10828 * so we know which stashes want their objects cloned */
10831 do_mark_cloneable_stash(pTHX_ SV *sv)
10833 const char *hvname = HvNAME_get((HV*)sv);
10835 GV* cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
10836 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
10837 if (cloner && GvCV(cloner)) {
10844 XPUSHs(sv_2mortal(newSVpv(hvname, 0)));
10846 call_sv((SV*)GvCV(cloner), G_SCALAR);
10853 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
10861 =for apidoc perl_clone
10863 Create and return a new interpreter by cloning the current one.
10865 perl_clone takes these flags as parameters:
10867 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10868 without it we only clone the data and zero the stacks,
10869 with it we copy the stacks and the new perl interpreter is
10870 ready to run at the exact same point as the previous one.
10871 The pseudo-fork code uses COPY_STACKS while the
10872 threads->new doesn't.
10874 CLONEf_KEEP_PTR_TABLE
10875 perl_clone keeps a ptr_table with the pointer of the old
10876 variable as a key and the new variable as a value,
10877 this allows it to check if something has been cloned and not
10878 clone it again but rather just use the value and increase the
10879 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10880 the ptr_table using the function
10881 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10882 reason to keep it around is if you want to dup some of your own
10883 variable who are outside the graph perl scans, example of this
10884 code is in threads.xs create
10887 This is a win32 thing, it is ignored on unix, it tells perls
10888 win32host code (which is c++) to clone itself, this is needed on
10889 win32 if you want to run two threads at the same time,
10890 if you just want to do some stuff in a separate perl interpreter
10891 and then throw it away and return to the original one,
10892 you don't need to do anything.
10897 /* XXX the above needs expanding by someone who actually understands it ! */
10898 EXTERN_C PerlInterpreter *
10899 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10902 perl_clone(PerlInterpreter *proto_perl, UV flags)
10904 #ifdef PERL_IMPLICIT_SYS
10906 /* perlhost.h so we need to call into it
10907 to clone the host, CPerlHost should have a c interface, sky */
10909 if (flags & CLONEf_CLONE_HOST) {
10910 return perl_clone_host(proto_perl,flags);
10912 return perl_clone_using(proto_perl, flags,
10914 proto_perl->IMemShared,
10915 proto_perl->IMemParse,
10917 proto_perl->IStdIO,
10921 proto_perl->IProc);
10925 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10926 struct IPerlMem* ipM, struct IPerlMem* ipMS,
10927 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10928 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10929 struct IPerlDir* ipD, struct IPerlSock* ipS,
10930 struct IPerlProc* ipP)
10932 /* XXX many of the string copies here can be optimized if they're
10933 * constants; they need to be allocated as common memory and just
10934 * their pointers copied. */
10937 CLONE_PARAMS clone_params;
10938 CLONE_PARAMS* param = &clone_params;
10940 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
10941 /* for each stash, determine whether its objects should be cloned */
10942 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10943 PERL_SET_THX(my_perl);
10946 Poison(my_perl, 1, PerlInterpreter);
10948 PL_curcop = (COP *)Nullop;
10952 PL_savestack_ix = 0;
10953 PL_savestack_max = -1;
10955 PL_sig_pending = 0;
10956 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10957 # else /* !DEBUGGING */
10958 Zero(my_perl, 1, PerlInterpreter);
10959 # endif /* DEBUGGING */
10961 /* host pointers */
10963 PL_MemShared = ipMS;
10964 PL_MemParse = ipMP;
10971 #else /* !PERL_IMPLICIT_SYS */
10973 CLONE_PARAMS clone_params;
10974 CLONE_PARAMS* param = &clone_params;
10975 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
10976 /* for each stash, determine whether its objects should be cloned */
10977 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10978 PERL_SET_THX(my_perl);
10981 Poison(my_perl, 1, PerlInterpreter);
10983 PL_curcop = (COP *)Nullop;
10987 PL_savestack_ix = 0;
10988 PL_savestack_max = -1;
10990 PL_sig_pending = 0;
10991 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10992 # else /* !DEBUGGING */
10993 Zero(my_perl, 1, PerlInterpreter);
10994 # endif /* DEBUGGING */
10995 #endif /* PERL_IMPLICIT_SYS */
10996 param->flags = flags;
10997 param->proto_perl = proto_perl;
11000 PL_xiv_arenaroot = NULL;
11001 PL_xiv_root = NULL;
11002 PL_xnv_arenaroot = NULL;
11003 PL_xnv_root = NULL;
11004 PL_xrv_arenaroot = NULL;
11005 PL_xrv_root = NULL;
11006 PL_xpv_arenaroot = NULL;
11007 PL_xpv_root = NULL;
11008 PL_xpviv_arenaroot = NULL;
11009 PL_xpviv_root = NULL;
11010 PL_xpvnv_arenaroot = NULL;
11011 PL_xpvnv_root = NULL;
11012 PL_xpvcv_arenaroot = NULL;
11013 PL_xpvcv_root = NULL;
11014 PL_xpvav_arenaroot = NULL;
11015 PL_xpvav_root = NULL;
11016 PL_xpvhv_arenaroot = NULL;
11017 PL_xpvhv_root = NULL;
11018 PL_xpvmg_arenaroot = NULL;
11019 PL_xpvmg_root = NULL;
11020 PL_xpvgv_arenaroot = NULL;
11021 PL_xpvgv_root = NULL;
11022 PL_xpvlv_arenaroot = NULL;
11023 PL_xpvlv_root = NULL;
11024 PL_xpvbm_arenaroot = NULL;
11025 PL_xpvbm_root = NULL;
11026 PL_he_arenaroot = NULL;
11028 #if defined(USE_ITHREADS)
11029 PL_pte_arenaroot = NULL;
11030 PL_pte_root = NULL;
11032 PL_nice_chunk = NULL;
11033 PL_nice_chunk_size = 0;
11035 PL_sv_objcount = 0;
11036 PL_sv_root = Nullsv;
11037 PL_sv_arenaroot = Nullsv;
11039 PL_debug = proto_perl->Idebug;
11041 PL_hash_seed = proto_perl->Ihash_seed;
11042 PL_rehash_seed = proto_perl->Irehash_seed;
11044 #ifdef USE_REENTRANT_API
11045 /* XXX: things like -Dm will segfault here in perlio, but doing
11046 * PERL_SET_CONTEXT(proto_perl);
11047 * breaks too many other things
11049 Perl_reentrant_init(aTHX);
11052 /* create SV map for pointer relocation */
11053 PL_ptr_table = ptr_table_new();
11055 /* initialize these special pointers as early as possible */
11056 SvANY(&PL_sv_undef) = NULL;
11057 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
11058 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
11059 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11061 SvANY(&PL_sv_no) = new_XPVNV();
11062 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
11063 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11064 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11065 SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
11066 SvCUR_set(&PL_sv_no, 0);
11067 SvLEN_set(&PL_sv_no, 1);
11068 SvIV_set(&PL_sv_no, 0);
11069 SvNV_set(&PL_sv_no, 0);
11070 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
11072 SvANY(&PL_sv_yes) = new_XPVNV();
11073 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
11074 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11075 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11076 SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
11077 SvCUR_set(&PL_sv_yes, 1);
11078 SvLEN_set(&PL_sv_yes, 2);
11079 SvIV_set(&PL_sv_yes, 1);
11080 SvNV_set(&PL_sv_yes, 1);
11081 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11083 /* create (a non-shared!) shared string table */
11084 PL_strtab = newHV();
11085 HvSHAREKEYS_off(PL_strtab);
11086 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11087 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11089 PL_compiling = proto_perl->Icompiling;
11091 /* These two PVs will be free'd special way so must set them same way op.c does */
11092 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11093 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11095 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
11096 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11098 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11099 if (!specialWARN(PL_compiling.cop_warnings))
11100 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
11101 if (!specialCopIO(PL_compiling.cop_io))
11102 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
11103 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
11105 /* pseudo environmental stuff */
11106 PL_origargc = proto_perl->Iorigargc;
11107 PL_origargv = proto_perl->Iorigargv;
11109 param->stashes = newAV(); /* Setup array of objects to call clone on */
11111 #ifdef PERLIO_LAYERS
11112 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11113 PerlIO_clone(aTHX_ proto_perl, param);
11116 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
11117 PL_incgv = gv_dup(proto_perl->Iincgv, param);
11118 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
11119 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
11120 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
11121 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
11124 PL_minus_c = proto_perl->Iminus_c;
11125 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
11126 PL_localpatches = proto_perl->Ilocalpatches;
11127 PL_splitstr = proto_perl->Isplitstr;
11128 PL_preprocess = proto_perl->Ipreprocess;
11129 PL_minus_n = proto_perl->Iminus_n;
11130 PL_minus_p = proto_perl->Iminus_p;
11131 PL_minus_l = proto_perl->Iminus_l;
11132 PL_minus_a = proto_perl->Iminus_a;
11133 PL_minus_F = proto_perl->Iminus_F;
11134 PL_doswitches = proto_perl->Idoswitches;
11135 PL_dowarn = proto_perl->Idowarn;
11136 PL_doextract = proto_perl->Idoextract;
11137 PL_sawampersand = proto_perl->Isawampersand;
11138 PL_unsafe = proto_perl->Iunsafe;
11139 PL_inplace = SAVEPV(proto_perl->Iinplace);
11140 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
11141 PL_perldb = proto_perl->Iperldb;
11142 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11143 PL_exit_flags = proto_perl->Iexit_flags;
11145 /* magical thingies */
11146 /* XXX time(&PL_basetime) when asked for? */
11147 PL_basetime = proto_perl->Ibasetime;
11148 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
11150 PL_maxsysfd = proto_perl->Imaxsysfd;
11151 PL_multiline = proto_perl->Imultiline;
11152 PL_statusvalue = proto_perl->Istatusvalue;
11154 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
11156 PL_encoding = sv_dup(proto_perl->Iencoding, param);
11158 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
11159 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
11160 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
11162 /* Clone the regex array */
11163 PL_regex_padav = newAV();
11165 const I32 len = av_len((AV*)proto_perl->Iregex_padav);
11166 SV** regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
11168 av_push(PL_regex_padav,
11169 sv_dup_inc(regexen[0],param));
11170 for(i = 1; i <= len; i++) {
11171 if(SvREPADTMP(regexen[i])) {
11172 av_push(PL_regex_padav, sv_dup_inc(regexen[i], param));
11174 av_push(PL_regex_padav,
11176 newSViv(PTR2IV(re_dup(INT2PTR(REGEXP *,
11177 SvIVX(regexen[i])), param)))
11182 PL_regex_pad = AvARRAY(PL_regex_padav);
11184 /* shortcuts to various I/O objects */
11185 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11186 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11187 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11188 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11189 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11190 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
11192 /* shortcuts to regexp stuff */
11193 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
11195 /* shortcuts to misc objects */
11196 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
11198 /* shortcuts to debugging objects */
11199 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
11200 PL_DBline = gv_dup(proto_perl->IDBline, param);
11201 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
11202 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
11203 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
11204 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
11205 PL_lineary = av_dup(proto_perl->Ilineary, param);
11206 PL_dbargs = av_dup(proto_perl->Idbargs, param);
11208 /* symbol tables */
11209 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
11210 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
11211 PL_nullstash = hv_dup(proto_perl->Inullstash, param);
11212 PL_debstash = hv_dup(proto_perl->Idebstash, param);
11213 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
11214 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
11216 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
11217 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
11218 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
11219 PL_endav = av_dup_inc(proto_perl->Iendav, param);
11220 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
11221 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
11223 PL_sub_generation = proto_perl->Isub_generation;
11225 /* funky return mechanisms */
11226 PL_forkprocess = proto_perl->Iforkprocess;
11228 /* subprocess state */
11229 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
11231 /* internal state */
11232 PL_tainting = proto_perl->Itainting;
11233 PL_taint_warn = proto_perl->Itaint_warn;
11234 PL_maxo = proto_perl->Imaxo;
11235 if (proto_perl->Iop_mask)
11236 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11238 PL_op_mask = Nullch;
11240 /* current interpreter roots */
11241 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
11242 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
11243 PL_main_start = proto_perl->Imain_start;
11244 PL_eval_root = proto_perl->Ieval_root;
11245 PL_eval_start = proto_perl->Ieval_start;
11247 /* runtime control stuff */
11248 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11249 PL_copline = proto_perl->Icopline;
11251 PL_filemode = proto_perl->Ifilemode;
11252 PL_lastfd = proto_perl->Ilastfd;
11253 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11256 PL_gensym = proto_perl->Igensym;
11257 PL_preambled = proto_perl->Ipreambled;
11258 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11259 PL_laststatval = proto_perl->Ilaststatval;
11260 PL_laststype = proto_perl->Ilaststype;
11261 PL_mess_sv = Nullsv;
11263 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11264 PL_ofmt = SAVEPV(proto_perl->Iofmt);
11266 /* interpreter atexit processing */
11267 PL_exitlistlen = proto_perl->Iexitlistlen;
11268 if (PL_exitlistlen) {
11269 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11270 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11273 PL_exitlist = (PerlExitListEntry*)NULL;
11274 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
11275 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
11276 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11278 PL_profiledata = NULL;
11279 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
11280 /* PL_rsfp_filters entries have fake IoDIRP() */
11281 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
11283 PL_compcv = cv_dup(proto_perl->Icompcv, param);
11285 PAD_CLONE_VARS(proto_perl, param);
11287 #ifdef HAVE_INTERP_INTERN
11288 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11291 /* more statics moved here */
11292 PL_generation = proto_perl->Igeneration;
11293 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
11295 PL_in_clean_objs = proto_perl->Iin_clean_objs;
11296 PL_in_clean_all = proto_perl->Iin_clean_all;
11298 PL_uid = proto_perl->Iuid;
11299 PL_euid = proto_perl->Ieuid;
11300 PL_gid = proto_perl->Igid;
11301 PL_egid = proto_perl->Iegid;
11302 PL_nomemok = proto_perl->Inomemok;
11303 PL_an = proto_perl->Ian;
11304 PL_op_seqmax = proto_perl->Iop_seqmax;
11305 PL_evalseq = proto_perl->Ievalseq;
11306 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
11307 PL_origalen = proto_perl->Iorigalen;
11308 PL_pidstatus = newHV(); /* XXX flag for cloning? */
11309 PL_osname = SAVEPV(proto_perl->Iosname);
11310 PL_sh_path_compat = proto_perl->Ish_path_compat; /* XXX never deallocated */
11311 PL_sighandlerp = proto_perl->Isighandlerp;
11314 PL_runops = proto_perl->Irunops;
11316 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
11319 PL_cshlen = proto_perl->Icshlen;
11320 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
11323 PL_lex_state = proto_perl->Ilex_state;
11324 PL_lex_defer = proto_perl->Ilex_defer;
11325 PL_lex_expect = proto_perl->Ilex_expect;
11326 PL_lex_formbrack = proto_perl->Ilex_formbrack;
11327 PL_lex_dojoin = proto_perl->Ilex_dojoin;
11328 PL_lex_starts = proto_perl->Ilex_starts;
11329 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff, param);
11330 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl, param);
11331 PL_lex_op = proto_perl->Ilex_op;
11332 PL_lex_inpat = proto_perl->Ilex_inpat;
11333 PL_lex_inwhat = proto_perl->Ilex_inwhat;
11334 PL_lex_brackets = proto_perl->Ilex_brackets;
11335 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
11336 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
11337 PL_lex_casemods = proto_perl->Ilex_casemods;
11338 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
11339 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
11341 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
11342 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
11343 PL_nexttoke = proto_perl->Inexttoke;
11345 /* XXX This is probably masking the deeper issue of why
11346 * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
11347 * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
11348 * (A little debugging with a watchpoint on it may help.)
11350 if (SvANY(proto_perl->Ilinestr)) {
11351 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
11352 i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr);
11353 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11354 i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr);
11355 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11356 i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr);
11357 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11358 i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr);
11359 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11362 PL_linestr = NEWSV(65,79);
11363 sv_upgrade(PL_linestr,SVt_PVIV);
11364 sv_setpvn(PL_linestr,"",0);
11365 PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
11367 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
11368 PL_pending_ident = proto_perl->Ipending_ident;
11369 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
11371 PL_expect = proto_perl->Iexpect;
11373 PL_multi_start = proto_perl->Imulti_start;
11374 PL_multi_end = proto_perl->Imulti_end;
11375 PL_multi_open = proto_perl->Imulti_open;
11376 PL_multi_close = proto_perl->Imulti_close;
11378 PL_error_count = proto_perl->Ierror_count;
11379 PL_subline = proto_perl->Isubline;
11380 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
11382 /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
11383 if (SvANY(proto_perl->Ilinestr)) {
11384 i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr);
11385 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11386 i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr);
11387 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11388 PL_last_lop_op = proto_perl->Ilast_lop_op;
11391 PL_last_uni = SvPVX(PL_linestr);
11392 PL_last_lop = SvPVX(PL_linestr);
11393 PL_last_lop_op = 0;
11395 PL_in_my = proto_perl->Iin_my;
11396 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
11398 PL_cryptseen = proto_perl->Icryptseen;
11401 PL_hints = proto_perl->Ihints;
11403 PL_amagic_generation = proto_perl->Iamagic_generation;
11405 #ifdef USE_LOCALE_COLLATE
11406 PL_collation_ix = proto_perl->Icollation_ix;
11407 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
11408 PL_collation_standard = proto_perl->Icollation_standard;
11409 PL_collxfrm_base = proto_perl->Icollxfrm_base;
11410 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
11411 #endif /* USE_LOCALE_COLLATE */
11413 #ifdef USE_LOCALE_NUMERIC
11414 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
11415 PL_numeric_standard = proto_perl->Inumeric_standard;
11416 PL_numeric_local = proto_perl->Inumeric_local;
11417 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11418 #endif /* !USE_LOCALE_NUMERIC */
11420 /* utf8 character classes */
11421 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11422 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11423 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11424 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11425 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
11426 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11427 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
11428 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
11429 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
11430 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
11431 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
11432 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
11433 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11434 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
11435 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11436 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11437 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11438 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11439 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11440 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11442 /* Did the locale setup indicate UTF-8? */
11443 PL_utf8locale = proto_perl->Iutf8locale;
11444 /* Unicode features (see perlrun/-C) */
11445 PL_unicode = proto_perl->Iunicode;
11447 /* Pre-5.8 signals control */
11448 PL_signals = proto_perl->Isignals;
11450 /* times() ticks per second */
11451 PL_clocktick = proto_perl->Iclocktick;
11453 /* Recursion stopper for PerlIO_find_layer */
11454 PL_in_load_module = proto_perl->Iin_load_module;
11456 /* sort() routine */
11457 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
11459 /* Not really needed/useful since the reenrant_retint is "volatile",
11460 * but do it for consistency's sake. */
11461 PL_reentrant_retint = proto_perl->Ireentrant_retint;
11463 /* Hooks to shared SVs and locks. */
11464 PL_sharehook = proto_perl->Isharehook;
11465 PL_lockhook = proto_perl->Ilockhook;
11466 PL_unlockhook = proto_perl->Iunlockhook;
11467 PL_threadhook = proto_perl->Ithreadhook;
11469 PL_runops_std = proto_perl->Irunops_std;
11470 PL_runops_dbg = proto_perl->Irunops_dbg;
11472 #ifdef THREADS_HAVE_PIDS
11473 PL_ppid = proto_perl->Ippid;
11477 PL_last_swash_hv = Nullhv; /* reinits on demand */
11478 PL_last_swash_klen = 0;
11479 PL_last_swash_key[0]= '\0';
11480 PL_last_swash_tmps = (U8*)NULL;
11481 PL_last_swash_slen = 0;
11483 /* perly.c globals */
11484 PL_yydebug = proto_perl->Iyydebug;
11485 PL_yynerrs = proto_perl->Iyynerrs;
11486 PL_yyerrflag = proto_perl->Iyyerrflag;
11487 PL_yychar = proto_perl->Iyychar;
11488 PL_yyval = proto_perl->Iyyval;
11489 PL_yylval = proto_perl->Iyylval;
11491 PL_glob_index = proto_perl->Iglob_index;
11492 PL_srand_called = proto_perl->Isrand_called;
11493 PL_uudmap['M'] = 0; /* reinits on demand */
11494 PL_bitcount = Nullch; /* reinits on demand */
11496 if (proto_perl->Ipsig_pend) {
11497 Newz(0, PL_psig_pend, SIG_SIZE, int);
11500 PL_psig_pend = (int*)NULL;
11503 if (proto_perl->Ipsig_ptr) {
11504 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
11505 Newz(0, PL_psig_name, SIG_SIZE, SV*);
11506 for (i = 1; i < SIG_SIZE; i++) {
11507 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11508 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11512 PL_psig_ptr = (SV**)NULL;
11513 PL_psig_name = (SV**)NULL;
11516 /* thrdvar.h stuff */
11518 if (flags & CLONEf_COPY_STACKS) {
11519 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11520 PL_tmps_ix = proto_perl->Ttmps_ix;
11521 PL_tmps_max = proto_perl->Ttmps_max;
11522 PL_tmps_floor = proto_perl->Ttmps_floor;
11523 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
11525 while (i <= PL_tmps_ix) {
11526 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
11530 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11531 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
11532 Newz(54, PL_markstack, i, I32);
11533 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
11534 - proto_perl->Tmarkstack);
11535 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
11536 - proto_perl->Tmarkstack);
11537 Copy(proto_perl->Tmarkstack, PL_markstack,
11538 PL_markstack_ptr - PL_markstack + 1, I32);
11540 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11541 * NOTE: unlike the others! */
11542 PL_scopestack_ix = proto_perl->Tscopestack_ix;
11543 PL_scopestack_max = proto_perl->Tscopestack_max;
11544 Newz(54, PL_scopestack, PL_scopestack_max, I32);
11545 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
11547 /* next push_return() sets PL_retstack[PL_retstack_ix]
11548 * NOTE: unlike the others! */
11549 PL_retstack_ix = proto_perl->Tretstack_ix;
11550 PL_retstack_max = proto_perl->Tretstack_max;
11551 Newz(54, PL_retstack, PL_retstack_max, OP*);
11552 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, OP*);
11554 /* NOTE: si_dup() looks at PL_markstack */
11555 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
11557 /* PL_curstack = PL_curstackinfo->si_stack; */
11558 PL_curstack = av_dup(proto_perl->Tcurstack, param);
11559 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
11561 /* next PUSHs() etc. set *(PL_stack_sp+1) */
11562 PL_stack_base = AvARRAY(PL_curstack);
11563 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
11564 - proto_perl->Tstack_base);
11565 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
11567 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11568 * NOTE: unlike the others! */
11569 PL_savestack_ix = proto_perl->Tsavestack_ix;
11570 PL_savestack_max = proto_perl->Tsavestack_max;
11571 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
11572 PL_savestack = ss_dup(proto_perl, param);
11576 ENTER; /* perl_destruct() wants to LEAVE; */
11579 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
11580 PL_top_env = &PL_start_env;
11582 PL_op = proto_perl->Top;
11585 PL_Xpv = (XPV*)NULL;
11586 PL_na = proto_perl->Tna;
11588 PL_statbuf = proto_perl->Tstatbuf;
11589 PL_statcache = proto_perl->Tstatcache;
11590 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
11591 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
11593 PL_timesbuf = proto_perl->Ttimesbuf;
11596 PL_tainted = proto_perl->Ttainted;
11597 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
11598 PL_rs = sv_dup_inc(proto_perl->Trs, param);
11599 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
11600 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
11601 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
11602 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
11603 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
11604 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
11605 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
11607 PL_restartop = proto_perl->Trestartop;
11608 PL_in_eval = proto_perl->Tin_eval;
11609 PL_delaymagic = proto_perl->Tdelaymagic;
11610 PL_dirty = proto_perl->Tdirty;
11611 PL_localizing = proto_perl->Tlocalizing;
11613 #ifdef PERL_FLEXIBLE_EXCEPTIONS
11614 PL_protect = proto_perl->Tprotect;
11616 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
11617 PL_hv_fetch_ent_mh = Nullhe;
11618 PL_modcount = proto_perl->Tmodcount;
11619 PL_lastgotoprobe = Nullop;
11620 PL_dumpindent = proto_perl->Tdumpindent;
11622 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
11623 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
11624 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
11625 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
11626 PL_sortcxix = proto_perl->Tsortcxix;
11627 PL_efloatbuf = Nullch; /* reinits on demand */
11628 PL_efloatsize = 0; /* reinits on demand */
11632 PL_screamfirst = NULL;
11633 PL_screamnext = NULL;
11634 PL_maxscream = -1; /* reinits on demand */
11635 PL_lastscream = Nullsv;
11637 PL_watchaddr = NULL;
11638 PL_watchok = Nullch;
11640 PL_regdummy = proto_perl->Tregdummy;
11641 PL_regcomp_parse = Nullch;
11642 PL_regxend = Nullch;
11643 PL_regcode = (regnode*)NULL;
11646 PL_regprecomp = Nullch;
11651 PL_seen_zerolen = 0;
11653 PL_regcomp_rx = (regexp*)NULL;
11655 PL_colorset = 0; /* reinits PL_colors[] */
11656 /*PL_colors[6] = {0,0,0,0,0,0};*/
11657 PL_reg_whilem_seen = 0;
11658 PL_reginput = Nullch;
11659 PL_regbol = Nullch;
11660 PL_regeol = Nullch;
11661 PL_regstartp = (I32*)NULL;
11662 PL_regendp = (I32*)NULL;
11663 PL_reglastparen = (U32*)NULL;
11664 PL_reglastcloseparen = (U32*)NULL;
11665 PL_regtill = Nullch;
11666 PL_reg_start_tmp = (char**)NULL;
11667 PL_reg_start_tmpl = 0;
11668 PL_regdata = (struct reg_data*)NULL;
11671 PL_reg_eval_set = 0;
11673 PL_regprogram = (regnode*)NULL;
11675 PL_regcc = (CURCUR*)NULL;
11676 PL_reg_call_cc = (struct re_cc_state*)NULL;
11677 PL_reg_re = (regexp*)NULL;
11678 PL_reg_ganch = Nullch;
11679 PL_reg_sv = Nullsv;
11680 PL_reg_match_utf8 = FALSE;
11681 PL_reg_magic = (MAGIC*)NULL;
11683 PL_reg_oldcurpm = (PMOP*)NULL;
11684 PL_reg_curpm = (PMOP*)NULL;
11685 PL_reg_oldsaved = Nullch;
11686 PL_reg_oldsavedlen = 0;
11687 PL_reg_maxiter = 0;
11688 PL_reg_leftiter = 0;
11689 PL_reg_poscache = Nullch;
11690 PL_reg_poscache_size= 0;
11692 /* RE engine - function pointers */
11693 PL_regcompp = proto_perl->Tregcompp;
11694 PL_regexecp = proto_perl->Tregexecp;
11695 PL_regint_start = proto_perl->Tregint_start;
11696 PL_regint_string = proto_perl->Tregint_string;
11697 PL_regfree = proto_perl->Tregfree;
11699 PL_reginterp_cnt = 0;
11700 PL_reg_starttry = 0;
11702 /* Pluggable optimizer */
11703 PL_peepp = proto_perl->Tpeepp;
11705 PL_stashcache = newHV();
11707 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11708 ptr_table_free(PL_ptr_table);
11709 PL_ptr_table = NULL;
11712 /* Call the ->CLONE method, if it exists, for each of the stashes
11713 identified by sv_dup() above.
11715 while(av_len(param->stashes) != -1) {
11716 HV* stash = (HV*) av_shift(param->stashes);
11717 GV* cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11718 if (cloner && GvCV(cloner)) {
11723 XPUSHs(sv_2mortal(newSVpv(HvNAME_get(stash), 0)));
11725 call_sv((SV*)GvCV(cloner), G_DISCARD);
11731 SvREFCNT_dec(param->stashes);
11733 /* orphaned? eg threads->new inside BEGIN or use */
11734 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
11735 (void)SvREFCNT_inc(PL_compcv);
11736 SAVEFREESV(PL_compcv);
11742 #endif /* USE_ITHREADS */
11745 =head1 Unicode Support
11747 =for apidoc sv_recode_to_utf8
11749 The encoding is assumed to be an Encode object, on entry the PV
11750 of the sv is assumed to be octets in that encoding, and the sv
11751 will be converted into Unicode (and UTF-8).
11753 If the sv already is UTF-8 (or if it is not POK), or if the encoding
11754 is not a reference, nothing is done to the sv. If the encoding is not
11755 an C<Encode::XS> Encoding object, bad things will happen.
11756 (See F<lib/encoding.pm> and L<Encode>).
11758 The PV of the sv is returned.
11763 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11765 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11779 Passing sv_yes is wrong - it needs to be or'ed set of constants
11780 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11781 remove converted chars from source.
11783 Both will default the value - let them.
11785 XPUSHs(&PL_sv_yes);
11788 call_method("decode", G_SCALAR);
11792 s = SvPV(uni, len);
11793 if (s != SvPVX_const(sv)) {
11794 SvGROW(sv, len + 1);
11795 Move(s, SvPVX_const(sv), len, char);
11796 SvCUR_set(sv, len);
11797 SvPVX(sv)[len] = 0;
11804 return SvPOKp(sv) ? SvPVX(sv) : NULL;
11808 =for apidoc sv_cat_decode
11810 The encoding is assumed to be an Encode object, the PV of the ssv is
11811 assumed to be octets in that encoding and decoding the input starts
11812 from the position which (PV + *offset) pointed to. The dsv will be
11813 concatenated the decoded UTF-8 string from ssv. Decoding will terminate
11814 when the string tstr appears in decoding output or the input ends on
11815 the PV of the ssv. The value which the offset points will be modified
11816 to the last input position on the ssv.
11818 Returns TRUE if the terminator was found, else returns FALSE.
11823 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11824 SV *ssv, int *offset, char *tstr, int tlen)
11827 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11838 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11839 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11841 call_method("cat_decode", G_SCALAR);
11843 ret = SvTRUE(TOPs);
11844 *offset = SvIV(offsv);
11850 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
11856 * c-indentation-style: bsd
11857 * c-basic-offset: 4
11858 * indent-tabs-mode: t
11861 * ex: set ts=8 sts=4 sw=4 noet: