3 * Copyright (c) 1991-2001, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
8 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
11 * This file contains the code that creates, manipulates and destroys
12 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
13 * structure of an SV, so their creation and destruction is handled
14 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
15 * level functions (eg. substr, split, join) for each of the types are
25 #define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal(sv)
28 /* ============================================================================
30 =head1 Allocation and deallocation of SVs.
32 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct sv,
33 av, hv...) contains type and reference count information, as well as a
34 pointer to the body (struct xrv, xpv, xpviv...), which contains fields
35 specific to each type.
37 Normally, this allocation is done using arenas, which are approximately
38 1K chunks of memory parcelled up into N heads or bodies. The first slot
39 in each arena is reserved, and is used to hold a link to the next arena.
40 In the case of heads, the unused first slot also contains some flags and
41 a note of the number of slots. Snaked through each arena chain is a
42 linked list of free items; when this becomes empty, an extra arena is
43 allocated and divided up into N items which are threaded into the free
46 The following global variables are associated with arenas:
48 PL_sv_arenaroot pointer to list of SV arenas
49 PL_sv_root pointer to list of free SV structures
51 PL_foo_arenaroot pointer to list of foo arenas,
52 PL_foo_root pointer to list of free foo bodies
53 ... for foo in xiv, xnv, xrv, xpv etc.
55 Note that some of the larger and more rarely used body types (eg xpvio)
56 are not allocated using arenas, but are instead just malloc()/free()ed as
57 required. Also, if PURIFY is defined, arenas are abandoned altogether,
58 with all items individually malloc()ed. In addition, a few SV heads are
59 not allocated from an arena, but are instead directly created as static
60 or auto variables, eg PL_sv_undef.
62 The SV arena serves the secondary purpose of allowing still-live SVs
63 to be located and destroyed during final cleanup.
65 At the lowest level, the macros new_SV() and del_SV() grab and free
66 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
67 to return the SV to the free list with error checking.) new_SV() calls
68 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
69 SVs in the free list have their SvTYPE field set to all ones.
71 Similarly, there are macros new_XIV()/del_XIV(), new_XNV()/del_XNV() etc
72 that allocate and return individual body types. Normally these are mapped
73 to the arena-manipulating functions new_xiv()/del_xiv() etc, but may be
74 instead mapped directly to malloc()/free() if PURIFY is defined. The
75 new/del functions remove from, or add to, the appropriate PL_foo_root
76 list, and call more_xiv() etc to add a new arena if the list is empty.
78 At the time of very final cleanup, sv_free_arenas() is called from
79 perl_destruct() to physically free all the arenas allocated since the
80 start of the interpreter. Note that this also clears PL_he_arenaroot,
81 which is otherwise dealt with in hv.c.
83 Manipulation of any of the PL_*root pointers is protected by enclosing
84 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
85 if threads are enabled.
87 The function visit() scans the SV arenas list, and calls a specified
88 function for each SV it finds which is still live - ie which has an SvTYPE
89 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
90 following functions (specified as [function that calls visit()] / [function
91 called by visit() for each SV]):
93 sv_report_used() / do_report_used()
94 dump all remaining SVs (debugging aid)
96 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
97 Attempt to free all objects pointed to by RVs,
98 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
99 try to do the same for all objects indirectly
100 referenced by typeglobs too. Called once from
101 perl_destruct(), prior to calling sv_clean_all()
104 sv_clean_all() / do_clean_all()
105 SvREFCNT_dec(sv) each remaining SV, possibly
106 triggering an sv_free(). It also sets the
107 SVf_BREAK flag on the SV to indicate that the
108 refcnt has been artificially lowered, and thus
109 stopping sv_free() from giving spurious warnings
110 about SVs which unexpectedly have a refcnt
111 of zero. called repeatedly from perl_destruct()
112 until there are no SVs left.
116 Private API to rest of sv.c
120 new_XIV(), del_XIV(),
121 new_XNV(), del_XNV(),
126 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
131 ============================================================================ */
136 * "A time to plant, and a time to uproot what was planted..."
139 #define plant_SV(p) \
141 SvANY(p) = (void *)PL_sv_root; \
142 SvFLAGS(p) = SVTYPEMASK; \
147 /* sv_mutex must be held while calling uproot_SV() */
148 #define uproot_SV(p) \
151 PL_sv_root = (SV*)SvANY(p); \
156 /* new_SV(): return a new, empty SV head */
172 /* del_SV(): return an empty SV head to the free list */
187 S_del_sv(pTHX_ SV *p)
194 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
196 svend = &sva[SvREFCNT(sva)];
197 if (p >= sv && p < svend)
201 if (ckWARN_d(WARN_INTERNAL))
202 Perl_warner(aTHX_ WARN_INTERNAL,
203 "Attempt to free non-arena SV: 0x%"UVxf,
211 #else /* ! DEBUGGING */
213 #define del_SV(p) plant_SV(p)
215 #endif /* DEBUGGING */
219 =for apidoc sv_add_arena
221 Given a chunk of memory, link it to the head of the list of arenas,
222 and split it into a list of free SVs.
228 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
233 Zero(ptr, size, char);
235 /* The first SV in an arena isn't an SV. */
236 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
237 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
238 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
240 PL_sv_arenaroot = sva;
241 PL_sv_root = sva + 1;
243 svend = &sva[SvREFCNT(sva) - 1];
246 SvANY(sv) = (void *)(SV*)(sv + 1);
247 SvFLAGS(sv) = SVTYPEMASK;
251 SvFLAGS(sv) = SVTYPEMASK;
254 /* make some more SVs by adding another arena */
256 /* sv_mutex must be held while calling more_sv() */
263 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
264 PL_nice_chunk = Nullch;
265 PL_nice_chunk_size = 0;
268 char *chunk; /* must use New here to match call to */
269 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
270 sv_add_arena(chunk, 1008, 0);
276 /* visit(): call the named function for each non-free SV in the arenas. */
279 S_visit(pTHX_ SVFUNC_t f)
286 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
287 svend = &sva[SvREFCNT(sva)];
288 for (sv = sva + 1; sv < svend; ++sv) {
289 if (SvTYPE(sv) != SVTYPEMASK && SvREFCNT(sv)) {
298 /* called by sv_report_used() for each live SV */
301 do_report_used(pTHX_ SV *sv)
303 if (SvTYPE(sv) != SVTYPEMASK) {
304 PerlIO_printf(Perl_debug_log, "****\n");
310 =for apidoc sv_report_used
312 Dump the contents of all SVs not yet freed. (Debugging aid).
318 Perl_sv_report_used(pTHX)
320 visit(do_report_used);
323 /* called by sv_clean_objs() for each live SV */
326 do_clean_objs(pTHX_ SV *sv)
330 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
331 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
343 /* XXX Might want to check arrays, etc. */
346 /* called by sv_clean_objs() for each live SV */
348 #ifndef DISABLE_DESTRUCTOR_KLUDGE
350 do_clean_named_objs(pTHX_ SV *sv)
352 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
353 if ( SvOBJECT(GvSV(sv)) ||
354 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
355 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
356 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
357 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
359 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
367 =for apidoc sv_clean_objs
369 Attempt to destroy all objects not yet freed
375 Perl_sv_clean_objs(pTHX)
377 PL_in_clean_objs = TRUE;
378 visit(do_clean_objs);
379 #ifndef DISABLE_DESTRUCTOR_KLUDGE
380 /* some barnacles may yet remain, clinging to typeglobs */
381 visit(do_clean_named_objs);
383 PL_in_clean_objs = FALSE;
386 /* called by sv_clean_all() for each live SV */
389 do_clean_all(pTHX_ SV *sv)
391 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
392 SvFLAGS(sv) |= SVf_BREAK;
397 =for apidoc sv_clean_all
399 Decrement the refcnt of each remaining SV, possibly triggering a
400 cleanup. This function may have to be called multiple times to free
401 SVs which are in complex self-referential hierarchies.
407 Perl_sv_clean_all(pTHX)
410 PL_in_clean_all = TRUE;
411 cleaned = visit(do_clean_all);
412 PL_in_clean_all = FALSE;
417 =for apidoc sv_free_arenas
419 Deallocate the memory used by all arenas. Note that all the individual SV
420 heads and bodies within the arenas must already have been freed.
426 Perl_sv_free_arenas(pTHX)
430 XPV *arena, *arenanext;
432 /* Free arenas here, but be careful about fake ones. (We assume
433 contiguity of the fake ones with the corresponding real ones.) */
435 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
436 svanext = (SV*) SvANY(sva);
437 while (svanext && SvFAKE(svanext))
438 svanext = (SV*) SvANY(svanext);
441 Safefree((void *)sva);
444 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
445 arenanext = (XPV*)arena->xpv_pv;
448 PL_xiv_arenaroot = 0;
450 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
451 arenanext = (XPV*)arena->xpv_pv;
454 PL_xnv_arenaroot = 0;
456 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
457 arenanext = (XPV*)arena->xpv_pv;
460 PL_xrv_arenaroot = 0;
462 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
463 arenanext = (XPV*)arena->xpv_pv;
466 PL_xpv_arenaroot = 0;
468 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
469 arenanext = (XPV*)arena->xpv_pv;
472 PL_xpviv_arenaroot = 0;
474 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
475 arenanext = (XPV*)arena->xpv_pv;
478 PL_xpvnv_arenaroot = 0;
480 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
481 arenanext = (XPV*)arena->xpv_pv;
484 PL_xpvcv_arenaroot = 0;
486 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
487 arenanext = (XPV*)arena->xpv_pv;
490 PL_xpvav_arenaroot = 0;
492 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
493 arenanext = (XPV*)arena->xpv_pv;
496 PL_xpvhv_arenaroot = 0;
498 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
499 arenanext = (XPV*)arena->xpv_pv;
502 PL_xpvmg_arenaroot = 0;
504 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
505 arenanext = (XPV*)arena->xpv_pv;
508 PL_xpvlv_arenaroot = 0;
510 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
511 arenanext = (XPV*)arena->xpv_pv;
514 PL_xpvbm_arenaroot = 0;
516 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
517 arenanext = (XPV*)arena->xpv_pv;
523 Safefree(PL_nice_chunk);
524 PL_nice_chunk = Nullch;
525 PL_nice_chunk_size = 0;
531 =for apidoc report_uninit
533 Print appropriate "Use of uninitialized variable" warning
539 Perl_report_uninit(pTHX)
542 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
543 " in ", OP_DESC(PL_op));
545 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
548 /* grab a new IV body from the free list, allocating more if necessary */
559 * See comment in more_xiv() -- RAM.
561 PL_xiv_root = *(IV**)xiv;
563 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
566 /* return an IV body to the free list */
569 S_del_xiv(pTHX_ XPVIV *p)
571 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
573 *(IV**)xiv = PL_xiv_root;
578 /* allocate another arena's worth of IV bodies */
586 New(705, ptr, 1008/sizeof(XPV), XPV);
587 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
588 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
591 xivend = &xiv[1008 / sizeof(IV) - 1];
592 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
594 while (xiv < xivend) {
595 *(IV**)xiv = (IV *)(xiv + 1);
601 /* grab a new NV body from the free list, allocating more if necessary */
611 PL_xnv_root = *(NV**)xnv;
613 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
616 /* return an NV body to the free list */
619 S_del_xnv(pTHX_ XPVNV *p)
621 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
623 *(NV**)xnv = PL_xnv_root;
628 /* allocate another arena's worth of NV bodies */
636 New(711, ptr, 1008/sizeof(XPV), XPV);
637 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
638 PL_xnv_arenaroot = ptr;
641 xnvend = &xnv[1008 / sizeof(NV) - 1];
642 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
644 while (xnv < xnvend) {
645 *(NV**)xnv = (NV*)(xnv + 1);
651 /* grab a new struct xrv from the free list, allocating more if necessary */
661 PL_xrv_root = (XRV*)xrv->xrv_rv;
666 /* return a struct xrv to the free list */
669 S_del_xrv(pTHX_ XRV *p)
672 p->xrv_rv = (SV*)PL_xrv_root;
677 /* allocate another arena's worth of struct xrv */
683 register XRV* xrvend;
685 New(712, ptr, 1008/sizeof(XPV), XPV);
686 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
687 PL_xrv_arenaroot = ptr;
690 xrvend = &xrv[1008 / sizeof(XRV) - 1];
691 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
693 while (xrv < xrvend) {
694 xrv->xrv_rv = (SV*)(xrv + 1);
700 /* grab a new struct xpv from the free list, allocating more if necessary */
710 PL_xpv_root = (XPV*)xpv->xpv_pv;
715 /* return a struct xpv to the free list */
718 S_del_xpv(pTHX_ XPV *p)
721 p->xpv_pv = (char*)PL_xpv_root;
726 /* allocate another arena's worth of struct xpv */
732 register XPV* xpvend;
733 New(713, xpv, 1008/sizeof(XPV), XPV);
734 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
735 PL_xpv_arenaroot = xpv;
737 xpvend = &xpv[1008 / sizeof(XPV) - 1];
739 while (xpv < xpvend) {
740 xpv->xpv_pv = (char*)(xpv + 1);
746 /* grab a new struct xpviv from the free list, allocating more if necessary */
755 xpviv = PL_xpviv_root;
756 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
761 /* return a struct xpviv to the free list */
764 S_del_xpviv(pTHX_ XPVIV *p)
767 p->xpv_pv = (char*)PL_xpviv_root;
772 /* allocate another arena's worth of struct xpviv */
777 register XPVIV* xpviv;
778 register XPVIV* xpvivend;
779 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
780 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
781 PL_xpviv_arenaroot = xpviv;
783 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
784 PL_xpviv_root = ++xpviv;
785 while (xpviv < xpvivend) {
786 xpviv->xpv_pv = (char*)(xpviv + 1);
792 /* grab a new struct xpvnv from the free list, allocating more if necessary */
801 xpvnv = PL_xpvnv_root;
802 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
807 /* return a struct xpvnv to the free list */
810 S_del_xpvnv(pTHX_ XPVNV *p)
813 p->xpv_pv = (char*)PL_xpvnv_root;
818 /* allocate another arena's worth of struct xpvnv */
823 register XPVNV* xpvnv;
824 register XPVNV* xpvnvend;
825 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
826 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
827 PL_xpvnv_arenaroot = xpvnv;
829 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
830 PL_xpvnv_root = ++xpvnv;
831 while (xpvnv < xpvnvend) {
832 xpvnv->xpv_pv = (char*)(xpvnv + 1);
838 /* grab a new struct xpvcv from the free list, allocating more if necessary */
847 xpvcv = PL_xpvcv_root;
848 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
853 /* return a struct xpvcv to the free list */
856 S_del_xpvcv(pTHX_ XPVCV *p)
859 p->xpv_pv = (char*)PL_xpvcv_root;
864 /* allocate another arena's worth of struct xpvcv */
869 register XPVCV* xpvcv;
870 register XPVCV* xpvcvend;
871 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
872 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
873 PL_xpvcv_arenaroot = xpvcv;
875 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
876 PL_xpvcv_root = ++xpvcv;
877 while (xpvcv < xpvcvend) {
878 xpvcv->xpv_pv = (char*)(xpvcv + 1);
884 /* grab a new struct xpvav from the free list, allocating more if necessary */
893 xpvav = PL_xpvav_root;
894 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
899 /* return a struct xpvav to the free list */
902 S_del_xpvav(pTHX_ XPVAV *p)
905 p->xav_array = (char*)PL_xpvav_root;
910 /* allocate another arena's worth of struct xpvav */
915 register XPVAV* xpvav;
916 register XPVAV* xpvavend;
917 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
918 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
919 PL_xpvav_arenaroot = xpvav;
921 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
922 PL_xpvav_root = ++xpvav;
923 while (xpvav < xpvavend) {
924 xpvav->xav_array = (char*)(xpvav + 1);
927 xpvav->xav_array = 0;
930 /* grab a new struct xpvhv from the free list, allocating more if necessary */
939 xpvhv = PL_xpvhv_root;
940 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
945 /* return a struct xpvhv to the free list */
948 S_del_xpvhv(pTHX_ XPVHV *p)
951 p->xhv_array = (char*)PL_xpvhv_root;
956 /* allocate another arena's worth of struct xpvhv */
961 register XPVHV* xpvhv;
962 register XPVHV* xpvhvend;
963 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
964 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
965 PL_xpvhv_arenaroot = xpvhv;
967 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
968 PL_xpvhv_root = ++xpvhv;
969 while (xpvhv < xpvhvend) {
970 xpvhv->xhv_array = (char*)(xpvhv + 1);
973 xpvhv->xhv_array = 0;
976 /* grab a new struct xpvmg from the free list, allocating more if necessary */
985 xpvmg = PL_xpvmg_root;
986 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
991 /* return a struct xpvmg to the free list */
994 S_del_xpvmg(pTHX_ XPVMG *p)
997 p->xpv_pv = (char*)PL_xpvmg_root;
1002 /* allocate another arena's worth of struct xpvmg */
1007 register XPVMG* xpvmg;
1008 register XPVMG* xpvmgend;
1009 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
1010 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
1011 PL_xpvmg_arenaroot = xpvmg;
1013 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
1014 PL_xpvmg_root = ++xpvmg;
1015 while (xpvmg < xpvmgend) {
1016 xpvmg->xpv_pv = (char*)(xpvmg + 1);
1022 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1031 xpvlv = PL_xpvlv_root;
1032 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
1037 /* return a struct xpvlv to the free list */
1040 S_del_xpvlv(pTHX_ XPVLV *p)
1043 p->xpv_pv = (char*)PL_xpvlv_root;
1048 /* allocate another arena's worth of struct xpvlv */
1053 register XPVLV* xpvlv;
1054 register XPVLV* xpvlvend;
1055 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
1056 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
1057 PL_xpvlv_arenaroot = xpvlv;
1059 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
1060 PL_xpvlv_root = ++xpvlv;
1061 while (xpvlv < xpvlvend) {
1062 xpvlv->xpv_pv = (char*)(xpvlv + 1);
1068 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1077 xpvbm = PL_xpvbm_root;
1078 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
1083 /* return a struct xpvbm to the free list */
1086 S_del_xpvbm(pTHX_ XPVBM *p)
1089 p->xpv_pv = (char*)PL_xpvbm_root;
1094 /* allocate another arena's worth of struct xpvbm */
1099 register XPVBM* xpvbm;
1100 register XPVBM* xpvbmend;
1101 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
1102 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
1103 PL_xpvbm_arenaroot = xpvbm;
1105 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
1106 PL_xpvbm_root = ++xpvbm;
1107 while (xpvbm < xpvbmend) {
1108 xpvbm->xpv_pv = (char*)(xpvbm + 1);
1115 # define my_safemalloc(s) (void*)safexmalloc(717,s)
1116 # define my_safefree(p) safexfree((char*)p)
1118 # define my_safemalloc(s) (void*)safemalloc(s)
1119 # define my_safefree(p) safefree((char*)p)
1124 #define new_XIV() my_safemalloc(sizeof(XPVIV))
1125 #define del_XIV(p) my_safefree(p)
1127 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1128 #define del_XNV(p) my_safefree(p)
1130 #define new_XRV() my_safemalloc(sizeof(XRV))
1131 #define del_XRV(p) my_safefree(p)
1133 #define new_XPV() my_safemalloc(sizeof(XPV))
1134 #define del_XPV(p) my_safefree(p)
1136 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1137 #define del_XPVIV(p) my_safefree(p)
1139 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1140 #define del_XPVNV(p) my_safefree(p)
1142 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1143 #define del_XPVCV(p) my_safefree(p)
1145 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1146 #define del_XPVAV(p) my_safefree(p)
1148 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1149 #define del_XPVHV(p) my_safefree(p)
1151 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1152 #define del_XPVMG(p) my_safefree(p)
1154 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1155 #define del_XPVLV(p) my_safefree(p)
1157 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1158 #define del_XPVBM(p) my_safefree(p)
1162 #define new_XIV() (void*)new_xiv()
1163 #define del_XIV(p) del_xiv((XPVIV*) p)
1165 #define new_XNV() (void*)new_xnv()
1166 #define del_XNV(p) del_xnv((XPVNV*) p)
1168 #define new_XRV() (void*)new_xrv()
1169 #define del_XRV(p) del_xrv((XRV*) p)
1171 #define new_XPV() (void*)new_xpv()
1172 #define del_XPV(p) del_xpv((XPV *)p)
1174 #define new_XPVIV() (void*)new_xpviv()
1175 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
1177 #define new_XPVNV() (void*)new_xpvnv()
1178 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
1180 #define new_XPVCV() (void*)new_xpvcv()
1181 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
1183 #define new_XPVAV() (void*)new_xpvav()
1184 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
1186 #define new_XPVHV() (void*)new_xpvhv()
1187 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
1189 #define new_XPVMG() (void*)new_xpvmg()
1190 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
1192 #define new_XPVLV() (void*)new_xpvlv()
1193 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
1195 #define new_XPVBM() (void*)new_xpvbm()
1196 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
1200 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1201 #define del_XPVGV(p) my_safefree(p)
1203 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1204 #define del_XPVFM(p) my_safefree(p)
1206 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1207 #define del_XPVIO(p) my_safefree(p)
1210 =for apidoc sv_upgrade
1212 Upgrade an SV to a more complex form. Generally adds a new body type to the
1213 SV, then copies across as much information as possible from the old body.
1214 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1220 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1230 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
1231 sv_force_normal(sv);
1234 if (SvTYPE(sv) == mt)
1238 (void)SvOOK_off(sv);
1240 switch (SvTYPE(sv)) {
1261 else if (mt < SVt_PVIV)
1278 pv = (char*)SvRV(sv);
1298 else if (mt == SVt_NV)
1309 del_XPVIV(SvANY(sv));
1319 del_XPVNV(SvANY(sv));
1327 magic = SvMAGIC(sv);
1328 stash = SvSTASH(sv);
1329 del_XPVMG(SvANY(sv));
1332 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1337 Perl_croak(aTHX_ "Can't upgrade to undef");
1339 SvANY(sv) = new_XIV();
1343 SvANY(sv) = new_XNV();
1347 SvANY(sv) = new_XRV();
1351 SvANY(sv) = new_XPV();
1357 SvANY(sv) = new_XPVIV();
1367 SvANY(sv) = new_XPVNV();
1375 SvANY(sv) = new_XPVMG();
1381 SvMAGIC(sv) = magic;
1382 SvSTASH(sv) = stash;
1385 SvANY(sv) = new_XPVLV();
1391 SvMAGIC(sv) = magic;
1392 SvSTASH(sv) = stash;
1399 SvANY(sv) = new_XPVAV();
1407 SvMAGIC(sv) = magic;
1408 SvSTASH(sv) = stash;
1414 SvANY(sv) = new_XPVHV();
1422 SvMAGIC(sv) = magic;
1423 SvSTASH(sv) = stash;
1430 SvANY(sv) = new_XPVCV();
1431 Zero(SvANY(sv), 1, XPVCV);
1437 SvMAGIC(sv) = magic;
1438 SvSTASH(sv) = stash;
1441 SvANY(sv) = new_XPVGV();
1447 SvMAGIC(sv) = magic;
1448 SvSTASH(sv) = stash;
1456 SvANY(sv) = new_XPVBM();
1462 SvMAGIC(sv) = magic;
1463 SvSTASH(sv) = stash;
1469 SvANY(sv) = new_XPVFM();
1470 Zero(SvANY(sv), 1, XPVFM);
1476 SvMAGIC(sv) = magic;
1477 SvSTASH(sv) = stash;
1480 SvANY(sv) = new_XPVIO();
1481 Zero(SvANY(sv), 1, XPVIO);
1487 SvMAGIC(sv) = magic;
1488 SvSTASH(sv) = stash;
1489 IoPAGE_LEN(sv) = 60;
1492 SvFLAGS(sv) &= ~SVTYPEMASK;
1498 =for apidoc sv_backoff
1500 Remove any string offset. You should normally use the C<SvOOK_off> macro
1507 Perl_sv_backoff(pTHX_ register SV *sv)
1511 char *s = SvPVX(sv);
1512 SvLEN(sv) += SvIVX(sv);
1513 SvPVX(sv) -= SvIVX(sv);
1515 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1517 SvFLAGS(sv) &= ~SVf_OOK;
1524 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1525 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1526 Use the C<SvGROW> wrapper instead.
1532 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1536 #ifdef HAS_64K_LIMIT
1537 if (newlen >= 0x10000) {
1538 PerlIO_printf(Perl_debug_log,
1539 "Allocation too large: %"UVxf"\n", (UV)newlen);
1542 #endif /* HAS_64K_LIMIT */
1545 if (SvTYPE(sv) < SVt_PV) {
1546 sv_upgrade(sv, SVt_PV);
1549 else if (SvOOK(sv)) { /* pv is offset? */
1552 if (newlen > SvLEN(sv))
1553 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1554 #ifdef HAS_64K_LIMIT
1555 if (newlen >= 0x10000)
1561 if (newlen > SvLEN(sv)) { /* need more room? */
1562 if (SvLEN(sv) && s) {
1563 #if defined(MYMALLOC) && !defined(LEAKTEST)
1564 STRLEN l = malloced_size((void*)SvPVX(sv));
1570 Renew(s,newlen,char);
1573 /* sv_force_normal_flags() must not try to unshare the new
1574 PVX we allocate below. AMS 20010713 */
1575 if (SvREADONLY(sv) && SvFAKE(sv)) {
1579 New(703, s, newlen, char);
1582 SvLEN_set(sv, newlen);
1588 =for apidoc sv_setiv
1590 Copies an integer into the given SV, upgrading first if necessary.
1591 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1597 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1599 SV_CHECK_THINKFIRST(sv);
1600 switch (SvTYPE(sv)) {
1602 sv_upgrade(sv, SVt_IV);
1605 sv_upgrade(sv, SVt_PVNV);
1609 sv_upgrade(sv, SVt_PVIV);
1618 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1621 (void)SvIOK_only(sv); /* validate number */
1627 =for apidoc sv_setiv_mg
1629 Like C<sv_setiv>, but also handles 'set' magic.
1635 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1642 =for apidoc sv_setuv
1644 Copies an unsigned integer into the given SV, upgrading first if necessary.
1645 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1651 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1653 /* With these two if statements:
1654 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1657 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1659 If you wish to remove them, please benchmark to see what the effect is
1661 if (u <= (UV)IV_MAX) {
1662 sv_setiv(sv, (IV)u);
1671 =for apidoc sv_setuv_mg
1673 Like C<sv_setuv>, but also handles 'set' magic.
1679 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1681 /* With these two if statements:
1682 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1685 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1687 If you wish to remove them, please benchmark to see what the effect is
1689 if (u <= (UV)IV_MAX) {
1690 sv_setiv(sv, (IV)u);
1700 =for apidoc sv_setnv
1702 Copies a double into the given SV, upgrading first if necessary.
1703 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1709 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1711 SV_CHECK_THINKFIRST(sv);
1712 switch (SvTYPE(sv)) {
1715 sv_upgrade(sv, SVt_NV);
1720 sv_upgrade(sv, SVt_PVNV);
1729 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1733 (void)SvNOK_only(sv); /* validate number */
1738 =for apidoc sv_setnv_mg
1740 Like C<sv_setnv>, but also handles 'set' magic.
1746 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1752 /* Print an "isn't numeric" warning, using a cleaned-up,
1753 * printable version of the offending string
1757 S_not_a_number(pTHX_ SV *sv)
1764 dsv = sv_2mortal(newSVpv("", 0));
1765 pv = sv_uni_display(dsv, sv, 10, 0);
1768 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1769 /* each *s can expand to 4 chars + "...\0",
1770 i.e. need room for 8 chars */
1773 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
1775 if (ch & 128 && !isPRINT_LC(ch)) {
1784 else if (ch == '\r') {
1788 else if (ch == '\f') {
1792 else if (ch == '\\') {
1796 else if (ch == '\0') {
1800 else if (isPRINT_LC(ch))
1817 Perl_warner(aTHX_ WARN_NUMERIC,
1818 "Argument \"%s\" isn't numeric in %s", pv,
1821 Perl_warner(aTHX_ WARN_NUMERIC,
1822 "Argument \"%s\" isn't numeric", pv);
1826 =for apidoc looks_like_number
1828 Test if the content of an SV looks like a number (or is a number).
1829 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1830 non-numeric warning), even if your atof() doesn't grok them.
1836 Perl_looks_like_number(pTHX_ SV *sv)
1838 register char *sbegin;
1845 else if (SvPOKp(sv))
1846 sbegin = SvPV(sv, len);
1848 return 1; /* Historic. Wrong? */
1849 return grok_number(sbegin, len, NULL);
1852 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1853 until proven guilty, assume that things are not that bad... */
1858 As 64 bit platforms often have an NV that doesn't preserve all bits of
1859 an IV (an assumption perl has been based on to date) it becomes necessary
1860 to remove the assumption that the NV always carries enough precision to
1861 recreate the IV whenever needed, and that the NV is the canonical form.
1862 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1863 precision as a side effect of conversion (which would lead to insanity
1864 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1865 1) to distinguish between IV/UV/NV slots that have cached a valid
1866 conversion where precision was lost and IV/UV/NV slots that have a
1867 valid conversion which has lost no precision
1868 2) to ensure that if a numeric conversion to one form is requested that
1869 would lose precision, the precise conversion (or differently
1870 imprecise conversion) is also performed and cached, to prevent
1871 requests for different numeric formats on the same SV causing
1872 lossy conversion chains. (lossless conversion chains are perfectly
1877 SvIOKp is true if the IV slot contains a valid value
1878 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1879 SvNOKp is true if the NV slot contains a valid value
1880 SvNOK is true only if the NV value is accurate
1883 while converting from PV to NV, check to see if converting that NV to an
1884 IV(or UV) would lose accuracy over a direct conversion from PV to
1885 IV(or UV). If it would, cache both conversions, return NV, but mark
1886 SV as IOK NOKp (ie not NOK).
1888 While converting from PV to IV, check to see if converting that IV to an
1889 NV would lose accuracy over a direct conversion from PV to NV. If it
1890 would, cache both conversions, flag similarly.
1892 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1893 correctly because if IV & NV were set NV *always* overruled.
1894 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1895 changes - now IV and NV together means that the two are interchangeable:
1896 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1898 The benefit of this is that operations such as pp_add know that if
1899 SvIOK is true for both left and right operands, then integer addition
1900 can be used instead of floating point (for cases where the result won't
1901 overflow). Before, floating point was always used, which could lead to
1902 loss of precision compared with integer addition.
1904 * making IV and NV equal status should make maths accurate on 64 bit
1906 * may speed up maths somewhat if pp_add and friends start to use
1907 integers when possible instead of fp. (Hopefully the overhead in
1908 looking for SvIOK and checking for overflow will not outweigh the
1909 fp to integer speedup)
1910 * will slow down integer operations (callers of SvIV) on "inaccurate"
1911 values, as the change from SvIOK to SvIOKp will cause a call into
1912 sv_2iv each time rather than a macro access direct to the IV slot
1913 * should speed up number->string conversion on integers as IV is
1914 favoured when IV and NV are equally accurate
1916 ####################################################################
1917 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1918 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1919 On the other hand, SvUOK is true iff UV.
1920 ####################################################################
1922 Your mileage will vary depending your CPU's relative fp to integer
1926 #ifndef NV_PRESERVES_UV
1927 # define IS_NUMBER_UNDERFLOW_IV 1
1928 # define IS_NUMBER_UNDERFLOW_UV 2
1929 # define IS_NUMBER_IV_AND_UV 2
1930 # define IS_NUMBER_OVERFLOW_IV 4
1931 # define IS_NUMBER_OVERFLOW_UV 5
1933 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1935 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1937 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
1939 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1940 if (SvNVX(sv) < (NV)IV_MIN) {
1941 (void)SvIOKp_on(sv);
1944 return IS_NUMBER_UNDERFLOW_IV;
1946 if (SvNVX(sv) > (NV)UV_MAX) {
1947 (void)SvIOKp_on(sv);
1951 return IS_NUMBER_OVERFLOW_UV;
1953 (void)SvIOKp_on(sv);
1955 /* Can't use strtol etc to convert this string. (See truth table in
1957 if (SvNVX(sv) <= (UV)IV_MAX) {
1958 SvIVX(sv) = I_V(SvNVX(sv));
1959 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1960 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1962 /* Integer is imprecise. NOK, IOKp */
1964 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1967 SvUVX(sv) = U_V(SvNVX(sv));
1968 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1969 if (SvUVX(sv) == UV_MAX) {
1970 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1971 possibly be preserved by NV. Hence, it must be overflow.
1973 return IS_NUMBER_OVERFLOW_UV;
1975 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1977 /* Integer is imprecise. NOK, IOKp */
1979 return IS_NUMBER_OVERFLOW_IV;
1981 #endif /* !NV_PRESERVES_UV*/
1986 Return the integer value of an SV, doing any necessary string conversion,
1987 magic etc. Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
1993 Perl_sv_2iv(pTHX_ register SV *sv)
1997 if (SvGMAGICAL(sv)) {
2002 return I_V(SvNVX(sv));
2004 if (SvPOKp(sv) && SvLEN(sv))
2007 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2008 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2014 if (SvTHINKFIRST(sv)) {
2017 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2018 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2019 return SvIV(tmpstr);
2020 return PTR2IV(SvRV(sv));
2022 if (SvREADONLY(sv) && SvFAKE(sv)) {
2023 sv_force_normal(sv);
2025 if (SvREADONLY(sv) && !SvOK(sv)) {
2026 if (ckWARN(WARN_UNINITIALIZED))
2033 return (IV)(SvUVX(sv));
2040 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2041 * without also getting a cached IV/UV from it at the same time
2042 * (ie PV->NV conversion should detect loss of accuracy and cache
2043 * IV or UV at same time to avoid this. NWC */
2045 if (SvTYPE(sv) == SVt_NV)
2046 sv_upgrade(sv, SVt_PVNV);
2048 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2049 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2050 certainly cast into the IV range at IV_MAX, whereas the correct
2051 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2053 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2054 SvIVX(sv) = I_V(SvNVX(sv));
2055 if (SvNVX(sv) == (NV) SvIVX(sv)
2056 #ifndef NV_PRESERVES_UV
2057 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2058 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2059 /* Don't flag it as "accurately an integer" if the number
2060 came from a (by definition imprecise) NV operation, and
2061 we're outside the range of NV integer precision */
2064 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2065 DEBUG_c(PerlIO_printf(Perl_debug_log,
2066 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2072 /* IV not precise. No need to convert from PV, as NV
2073 conversion would already have cached IV if it detected
2074 that PV->IV would be better than PV->NV->IV
2075 flags already correct - don't set public IOK. */
2076 DEBUG_c(PerlIO_printf(Perl_debug_log,
2077 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2082 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2083 but the cast (NV)IV_MIN rounds to a the value less (more
2084 negative) than IV_MIN which happens to be equal to SvNVX ??
2085 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2086 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2087 (NV)UVX == NVX are both true, but the values differ. :-(
2088 Hopefully for 2s complement IV_MIN is something like
2089 0x8000000000000000 which will be exact. NWC */
2092 SvUVX(sv) = U_V(SvNVX(sv));
2094 (SvNVX(sv) == (NV) SvUVX(sv))
2095 #ifndef NV_PRESERVES_UV
2096 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2097 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2098 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2099 /* Don't flag it as "accurately an integer" if the number
2100 came from a (by definition imprecise) NV operation, and
2101 we're outside the range of NV integer precision */
2107 DEBUG_c(PerlIO_printf(Perl_debug_log,
2108 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2112 return (IV)SvUVX(sv);
2115 else if (SvPOKp(sv) && SvLEN(sv)) {
2117 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2118 /* We want to avoid a possible problem when we cache an IV which
2119 may be later translated to an NV, and the resulting NV is not
2120 the same as the direct translation of the initial string
2121 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2122 be careful to ensure that the value with the .456 is around if the
2123 NV value is requested in the future).
2125 This means that if we cache such an IV, we need to cache the
2126 NV as well. Moreover, we trade speed for space, and do not
2127 cache the NV if we are sure it's not needed.
2130 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2131 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2132 == IS_NUMBER_IN_UV) {
2133 /* It's definitely an integer, only upgrade to PVIV */
2134 if (SvTYPE(sv) < SVt_PVIV)
2135 sv_upgrade(sv, SVt_PVIV);
2137 } else if (SvTYPE(sv) < SVt_PVNV)
2138 sv_upgrade(sv, SVt_PVNV);
2140 /* If NV preserves UV then we only use the UV value if we know that
2141 we aren't going to call atof() below. If NVs don't preserve UVs
2142 then the value returned may have more precision than atof() will
2143 return, even though value isn't perfectly accurate. */
2144 if ((numtype & (IS_NUMBER_IN_UV
2145 #ifdef NV_PRESERVES_UV
2148 )) == IS_NUMBER_IN_UV) {
2149 /* This won't turn off the public IOK flag if it was set above */
2150 (void)SvIOKp_on(sv);
2152 if (!(numtype & IS_NUMBER_NEG)) {
2154 if (value <= (UV)IV_MAX) {
2155 SvIVX(sv) = (IV)value;
2161 /* 2s complement assumption */
2162 if (value <= (UV)IV_MIN) {
2163 SvIVX(sv) = -(IV)value;
2165 /* Too negative for an IV. This is a double upgrade, but
2166 I'm assuming it will be rare. */
2167 if (SvTYPE(sv) < SVt_PVNV)
2168 sv_upgrade(sv, SVt_PVNV);
2172 SvNVX(sv) = -(NV)value;
2177 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2178 will be in the previous block to set the IV slot, and the next
2179 block to set the NV slot. So no else here. */
2181 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2182 != IS_NUMBER_IN_UV) {
2183 /* It wasn't an (integer that doesn't overflow the UV). */
2184 SvNVX(sv) = Atof(SvPVX(sv));
2186 if (! numtype && ckWARN(WARN_NUMERIC))
2189 #if defined(USE_LONG_DOUBLE)
2190 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2191 PTR2UV(sv), SvNVX(sv)));
2193 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
2194 PTR2UV(sv), SvNVX(sv)));
2198 #ifdef NV_PRESERVES_UV
2199 (void)SvIOKp_on(sv);
2201 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2202 SvIVX(sv) = I_V(SvNVX(sv));
2203 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2206 /* Integer is imprecise. NOK, IOKp */
2208 /* UV will not work better than IV */
2210 if (SvNVX(sv) > (NV)UV_MAX) {
2212 /* Integer is inaccurate. NOK, IOKp, is UV */
2216 SvUVX(sv) = U_V(SvNVX(sv));
2217 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2218 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2222 /* Integer is imprecise. NOK, IOKp, is UV */
2228 #else /* NV_PRESERVES_UV */
2229 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2230 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2231 /* The IV slot will have been set from value returned by
2232 grok_number above. The NV slot has just been set using
2235 assert (SvIOKp(sv));
2237 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2238 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2239 /* Small enough to preserve all bits. */
2240 (void)SvIOKp_on(sv);
2242 SvIVX(sv) = I_V(SvNVX(sv));
2243 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2245 /* Assumption: first non-preserved integer is < IV_MAX,
2246 this NV is in the preserved range, therefore: */
2247 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2249 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2253 0 0 already failed to read UV.
2254 0 1 already failed to read UV.
2255 1 0 you won't get here in this case. IV/UV
2256 slot set, public IOK, Atof() unneeded.
2257 1 1 already read UV.
2258 so there's no point in sv_2iuv_non_preserve() attempting
2259 to use atol, strtol, strtoul etc. */
2260 if (sv_2iuv_non_preserve (sv, numtype)
2261 >= IS_NUMBER_OVERFLOW_IV)
2265 #endif /* NV_PRESERVES_UV */
2268 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2270 if (SvTYPE(sv) < SVt_IV)
2271 /* Typically the caller expects that sv_any is not NULL now. */
2272 sv_upgrade(sv, SVt_IV);
2275 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2276 PTR2UV(sv),SvIVX(sv)));
2277 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2283 Return the unsigned integer value of an SV, doing any necessary string
2284 conversion, magic etc. Normally used via the C<SvUV(sv)> and C<SvUVx(sv)>
2291 Perl_sv_2uv(pTHX_ register SV *sv)
2295 if (SvGMAGICAL(sv)) {
2300 return U_V(SvNVX(sv));
2301 if (SvPOKp(sv) && SvLEN(sv))
2304 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2305 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2311 if (SvTHINKFIRST(sv)) {
2314 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2315 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2316 return SvUV(tmpstr);
2317 return PTR2UV(SvRV(sv));
2319 if (SvREADONLY(sv) && SvFAKE(sv)) {
2320 sv_force_normal(sv);
2322 if (SvREADONLY(sv) && !SvOK(sv)) {
2323 if (ckWARN(WARN_UNINITIALIZED))
2333 return (UV)SvIVX(sv);
2337 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2338 * without also getting a cached IV/UV from it at the same time
2339 * (ie PV->NV conversion should detect loss of accuracy and cache
2340 * IV or UV at same time to avoid this. */
2341 /* IV-over-UV optimisation - choose to cache IV if possible */
2343 if (SvTYPE(sv) == SVt_NV)
2344 sv_upgrade(sv, SVt_PVNV);
2346 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2347 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2348 SvIVX(sv) = I_V(SvNVX(sv));
2349 if (SvNVX(sv) == (NV) SvIVX(sv)
2350 #ifndef NV_PRESERVES_UV
2351 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2352 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2353 /* Don't flag it as "accurately an integer" if the number
2354 came from a (by definition imprecise) NV operation, and
2355 we're outside the range of NV integer precision */
2358 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2359 DEBUG_c(PerlIO_printf(Perl_debug_log,
2360 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2366 /* IV not precise. No need to convert from PV, as NV
2367 conversion would already have cached IV if it detected
2368 that PV->IV would be better than PV->NV->IV
2369 flags already correct - don't set public IOK. */
2370 DEBUG_c(PerlIO_printf(Perl_debug_log,
2371 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2376 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2377 but the cast (NV)IV_MIN rounds to a the value less (more
2378 negative) than IV_MIN which happens to be equal to SvNVX ??
2379 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2380 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2381 (NV)UVX == NVX are both true, but the values differ. :-(
2382 Hopefully for 2s complement IV_MIN is something like
2383 0x8000000000000000 which will be exact. NWC */
2386 SvUVX(sv) = U_V(SvNVX(sv));
2388 (SvNVX(sv) == (NV) SvUVX(sv))
2389 #ifndef NV_PRESERVES_UV
2390 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2391 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2392 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2393 /* Don't flag it as "accurately an integer" if the number
2394 came from a (by definition imprecise) NV operation, and
2395 we're outside the range of NV integer precision */
2400 DEBUG_c(PerlIO_printf(Perl_debug_log,
2401 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2407 else if (SvPOKp(sv) && SvLEN(sv)) {
2409 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2411 /* We want to avoid a possible problem when we cache a UV which
2412 may be later translated to an NV, and the resulting NV is not
2413 the translation of the initial data.
2415 This means that if we cache such a UV, we need to cache the
2416 NV as well. Moreover, we trade speed for space, and do not
2417 cache the NV if not needed.
2420 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2421 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2422 == IS_NUMBER_IN_UV) {
2423 /* It's definitely an integer, only upgrade to PVIV */
2424 if (SvTYPE(sv) < SVt_PVIV)
2425 sv_upgrade(sv, SVt_PVIV);
2427 } else if (SvTYPE(sv) < SVt_PVNV)
2428 sv_upgrade(sv, SVt_PVNV);
2430 /* If NV preserves UV then we only use the UV value if we know that
2431 we aren't going to call atof() below. If NVs don't preserve UVs
2432 then the value returned may have more precision than atof() will
2433 return, even though it isn't accurate. */
2434 if ((numtype & (IS_NUMBER_IN_UV
2435 #ifdef NV_PRESERVES_UV
2438 )) == IS_NUMBER_IN_UV) {
2439 /* This won't turn off the public IOK flag if it was set above */
2440 (void)SvIOKp_on(sv);
2442 if (!(numtype & IS_NUMBER_NEG)) {
2444 if (value <= (UV)IV_MAX) {
2445 SvIVX(sv) = (IV)value;
2447 /* it didn't overflow, and it was positive. */
2452 /* 2s complement assumption */
2453 if (value <= (UV)IV_MIN) {
2454 SvIVX(sv) = -(IV)value;
2456 /* Too negative for an IV. This is a double upgrade, but
2457 I'm assuming it will be rare. */
2458 if (SvTYPE(sv) < SVt_PVNV)
2459 sv_upgrade(sv, SVt_PVNV);
2463 SvNVX(sv) = -(NV)value;
2469 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2470 != IS_NUMBER_IN_UV) {
2471 /* It wasn't an integer, or it overflowed the UV. */
2472 SvNVX(sv) = Atof(SvPVX(sv));
2474 if (! numtype && ckWARN(WARN_NUMERIC))
2477 #if defined(USE_LONG_DOUBLE)
2478 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2479 PTR2UV(sv), SvNVX(sv)));
2481 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2482 PTR2UV(sv), SvNVX(sv)));
2485 #ifdef NV_PRESERVES_UV
2486 (void)SvIOKp_on(sv);
2488 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2489 SvIVX(sv) = I_V(SvNVX(sv));
2490 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2493 /* Integer is imprecise. NOK, IOKp */
2495 /* UV will not work better than IV */
2497 if (SvNVX(sv) > (NV)UV_MAX) {
2499 /* Integer is inaccurate. NOK, IOKp, is UV */
2503 SvUVX(sv) = U_V(SvNVX(sv));
2504 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2505 NV preservse UV so can do correct comparison. */
2506 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2510 /* Integer is imprecise. NOK, IOKp, is UV */
2515 #else /* NV_PRESERVES_UV */
2516 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2517 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2518 /* The UV slot will have been set from value returned by
2519 grok_number above. The NV slot has just been set using
2522 assert (SvIOKp(sv));
2524 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2525 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2526 /* Small enough to preserve all bits. */
2527 (void)SvIOKp_on(sv);
2529 SvIVX(sv) = I_V(SvNVX(sv));
2530 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2532 /* Assumption: first non-preserved integer is < IV_MAX,
2533 this NV is in the preserved range, therefore: */
2534 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2536 Perl_croak(aTHX_ "sv_2uv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2539 sv_2iuv_non_preserve (sv, numtype);
2541 #endif /* NV_PRESERVES_UV */
2545 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2546 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2549 if (SvTYPE(sv) < SVt_IV)
2550 /* Typically the caller expects that sv_any is not NULL now. */
2551 sv_upgrade(sv, SVt_IV);
2555 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2556 PTR2UV(sv),SvUVX(sv)));
2557 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2563 Return the num value of an SV, doing any necessary string or integer
2564 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2571 Perl_sv_2nv(pTHX_ register SV *sv)
2575 if (SvGMAGICAL(sv)) {
2579 if (SvPOKp(sv) && SvLEN(sv)) {
2580 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
2581 !grok_number(SvPVX(sv), SvCUR(sv), NULL))
2583 return Atof(SvPVX(sv));
2587 return (NV)SvUVX(sv);
2589 return (NV)SvIVX(sv);
2592 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2593 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2599 if (SvTHINKFIRST(sv)) {
2602 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2603 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2604 return SvNV(tmpstr);
2605 return PTR2NV(SvRV(sv));
2607 if (SvREADONLY(sv) && SvFAKE(sv)) {
2608 sv_force_normal(sv);
2610 if (SvREADONLY(sv) && !SvOK(sv)) {
2611 if (ckWARN(WARN_UNINITIALIZED))
2616 if (SvTYPE(sv) < SVt_NV) {
2617 if (SvTYPE(sv) == SVt_IV)
2618 sv_upgrade(sv, SVt_PVNV);
2620 sv_upgrade(sv, SVt_NV);
2621 #ifdef USE_LONG_DOUBLE
2623 STORE_NUMERIC_LOCAL_SET_STANDARD();
2624 PerlIO_printf(Perl_debug_log,
2625 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2626 PTR2UV(sv), SvNVX(sv));
2627 RESTORE_NUMERIC_LOCAL();
2631 STORE_NUMERIC_LOCAL_SET_STANDARD();
2632 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2633 PTR2UV(sv), SvNVX(sv));
2634 RESTORE_NUMERIC_LOCAL();
2638 else if (SvTYPE(sv) < SVt_PVNV)
2639 sv_upgrade(sv, SVt_PVNV);
2644 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2645 #ifdef NV_PRESERVES_UV
2648 /* Only set the public NV OK flag if this NV preserves the IV */
2649 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2650 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2651 : (SvIVX(sv) == I_V(SvNVX(sv))))
2657 else if (SvPOKp(sv) && SvLEN(sv)) {
2659 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2660 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
2662 #ifdef NV_PRESERVES_UV
2663 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2664 == IS_NUMBER_IN_UV) {
2665 /* It's definitely an integer */
2666 SvNVX(sv) = (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value;
2668 SvNVX(sv) = Atof(SvPVX(sv));
2671 SvNVX(sv) = Atof(SvPVX(sv));
2672 /* Only set the public NV OK flag if this NV preserves the value in
2673 the PV at least as well as an IV/UV would.
2674 Not sure how to do this 100% reliably. */
2675 /* if that shift count is out of range then Configure's test is
2676 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2678 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2679 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2680 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2681 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2682 /* Can't use strtol etc to convert this string, so don't try.
2683 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2686 /* value has been set. It may not be precise. */
2687 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2688 /* 2s complement assumption for (UV)IV_MIN */
2689 SvNOK_on(sv); /* Integer is too negative. */
2694 if (numtype & IS_NUMBER_NEG) {
2695 SvIVX(sv) = -(IV)value;
2696 } else if (value <= (UV)IV_MAX) {
2697 SvIVX(sv) = (IV)value;
2703 if (numtype & IS_NUMBER_NOT_INT) {
2704 /* I believe that even if the original PV had decimals,
2705 they are lost beyond the limit of the FP precision.
2706 However, neither is canonical, so both only get p
2707 flags. NWC, 2000/11/25 */
2708 /* Both already have p flags, so do nothing */
2711 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2712 if (SvIVX(sv) == I_V(nv)) {
2717 /* It had no "." so it must be integer. */
2720 /* between IV_MAX and NV(UV_MAX).
2721 Could be slightly > UV_MAX */
2723 if (numtype & IS_NUMBER_NOT_INT) {
2724 /* UV and NV both imprecise. */
2726 UV nv_as_uv = U_V(nv);
2728 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2739 #endif /* NV_PRESERVES_UV */
2742 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2744 if (SvTYPE(sv) < SVt_NV)
2745 /* Typically the caller expects that sv_any is not NULL now. */
2746 /* XXX Ilya implies that this is a bug in callers that assume this
2747 and ideally should be fixed. */
2748 sv_upgrade(sv, SVt_NV);
2751 #if defined(USE_LONG_DOUBLE)
2753 STORE_NUMERIC_LOCAL_SET_STANDARD();
2754 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2755 PTR2UV(sv), SvNVX(sv));
2756 RESTORE_NUMERIC_LOCAL();
2760 STORE_NUMERIC_LOCAL_SET_STANDARD();
2761 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2762 PTR2UV(sv), SvNVX(sv));
2763 RESTORE_NUMERIC_LOCAL();
2769 /* asIV(): extract an integer from the string value of an SV.
2770 * Caller must validate PVX */
2773 S_asIV(pTHX_ SV *sv)
2776 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2778 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2779 == IS_NUMBER_IN_UV) {
2780 /* It's definitely an integer */
2781 if (numtype & IS_NUMBER_NEG) {
2782 if (value < (UV)IV_MIN)
2785 if (value < (UV)IV_MAX)
2790 if (ckWARN(WARN_NUMERIC))
2793 return I_V(Atof(SvPVX(sv)));
2796 /* asUV(): extract an unsigned integer from the string value of an SV
2797 * Caller must validate PVX */
2800 S_asUV(pTHX_ SV *sv)
2803 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2805 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2806 == IS_NUMBER_IN_UV) {
2807 /* It's definitely an integer */
2808 if (!(numtype & IS_NUMBER_NEG))
2812 if (ckWARN(WARN_NUMERIC))
2815 return U_V(Atof(SvPVX(sv)));
2819 =for apidoc sv_2pv_nolen
2821 Like C<sv_2pv()>, but doesn't return the length too. You should usually
2822 use the macro wrapper C<SvPV_nolen(sv)> instead.
2827 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2830 return sv_2pv(sv, &n_a);
2833 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2834 * UV as a string towards the end of buf, and return pointers to start and
2837 * We assume that buf is at least TYPE_CHARS(UV) long.
2841 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2843 char *ptr = buf + TYPE_CHARS(UV);
2857 *--ptr = '0' + (uv % 10);
2865 /* For backwards-compatibility only. sv_2pv() is normally #def'ed to
2866 * C<sv_2pv_macro()>. See also C<sv_2pv_flags()>.
2870 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2872 return sv_2pv_flags(sv, lp, SV_GMAGIC);
2876 =for apidoc sv_2pv_flags
2878 Returns a pointer to the string value of an SV, and sets *lp to its length.
2879 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2881 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2882 usually end up here too.
2888 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2893 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2894 char *tmpbuf = tbuf;
2900 if (SvGMAGICAL(sv)) {
2901 if (flags & SV_GMAGIC)
2909 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2911 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2916 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2921 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2922 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2929 if (SvTHINKFIRST(sv)) {
2932 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2933 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2934 return SvPV(tmpstr,*lp);
2941 switch (SvTYPE(sv)) {
2943 if ( ((SvFLAGS(sv) &
2944 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2945 == (SVs_OBJECT|SVs_RMG))
2946 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2947 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
2948 regexp *re = (regexp *)mg->mg_obj;
2951 char *fptr = "msix";
2956 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2958 while((ch = *fptr++)) {
2960 reflags[left++] = ch;
2963 reflags[right--] = ch;
2968 reflags[left] = '-';
2972 mg->mg_len = re->prelen + 4 + left;
2973 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2974 Copy("(?", mg->mg_ptr, 2, char);
2975 Copy(reflags, mg->mg_ptr+2, left, char);
2976 Copy(":", mg->mg_ptr+left+2, 1, char);
2977 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2978 mg->mg_ptr[mg->mg_len - 1] = ')';
2979 mg->mg_ptr[mg->mg_len] = 0;
2981 PL_reginterp_cnt += re->program[0].next_off;
2993 case SVt_PVBM: if (SvROK(sv))
2996 s = "SCALAR"; break;
2997 case SVt_PVLV: s = "LVALUE"; break;
2998 case SVt_PVAV: s = "ARRAY"; break;
2999 case SVt_PVHV: s = "HASH"; break;
3000 case SVt_PVCV: s = "CODE"; break;
3001 case SVt_PVGV: s = "GLOB"; break;
3002 case SVt_PVFM: s = "FORMAT"; break;
3003 case SVt_PVIO: s = "IO"; break;
3004 default: s = "UNKNOWN"; break;
3008 HV *svs = SvSTASH(sv);
3011 /* [20011101.072] This bandaid for C<package;>
3012 should eventually be removed. AMS 20011103 */
3013 (svs ? HvNAME(svs) : "<none>"), s
3018 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
3024 if (SvREADONLY(sv) && !SvOK(sv)) {
3025 if (ckWARN(WARN_UNINITIALIZED))
3031 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3032 /* I'm assuming that if both IV and NV are equally valid then
3033 converting the IV is going to be more efficient */
3034 U32 isIOK = SvIOK(sv);
3035 U32 isUIOK = SvIsUV(sv);
3036 char buf[TYPE_CHARS(UV)];
3039 if (SvTYPE(sv) < SVt_PVIV)
3040 sv_upgrade(sv, SVt_PVIV);
3042 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3044 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3045 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
3046 Move(ptr,SvPVX(sv),ebuf - ptr,char);
3047 SvCUR_set(sv, ebuf - ptr);
3057 else if (SvNOKp(sv)) {
3058 if (SvTYPE(sv) < SVt_PVNV)
3059 sv_upgrade(sv, SVt_PVNV);
3060 /* The +20 is pure guesswork. Configure test needed. --jhi */
3061 SvGROW(sv, NV_DIG + 20);
3063 olderrno = errno; /* some Xenix systems wipe out errno here */
3065 if (SvNVX(sv) == 0.0)
3066 (void)strcpy(s,"0");
3070 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3073 #ifdef FIXNEGATIVEZERO
3074 if (*s == '-' && s[1] == '0' && !s[2])
3084 if (ckWARN(WARN_UNINITIALIZED)
3085 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3088 if (SvTYPE(sv) < SVt_PV)
3089 /* Typically the caller expects that sv_any is not NULL now. */
3090 sv_upgrade(sv, SVt_PV);
3093 *lp = s - SvPVX(sv);
3096 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3097 PTR2UV(sv),SvPVX(sv)));
3101 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3102 /* Sneaky stuff here */
3106 tsv = newSVpv(tmpbuf, 0);
3122 len = strlen(tmpbuf);
3124 #ifdef FIXNEGATIVEZERO
3125 if (len == 2 && t[0] == '-' && t[1] == '0') {
3130 (void)SvUPGRADE(sv, SVt_PV);
3132 s = SvGROW(sv, len + 1);
3141 =for apidoc sv_2pvbyte_nolen
3143 Return a pointer to the byte-encoded representation of the SV.
3144 May cause the SV to be downgraded from UTF8 as a side-effect.
3146 Usually accessed via the C<SvPVbyte_nolen> macro.
3152 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3155 return sv_2pvbyte(sv, &n_a);
3159 =for apidoc sv_2pvbyte
3161 Return a pointer to the byte-encoded representation of the SV, and set *lp
3162 to its length. May cause the SV to be downgraded from UTF8 as a
3165 Usually accessed via the C<SvPVbyte> macro.
3171 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3173 sv_utf8_downgrade(sv,0);
3174 return SvPV(sv,*lp);
3178 =for apidoc sv_2pvutf8_nolen
3180 Return a pointer to the UTF8-encoded representation of the SV.
3181 May cause the SV to be upgraded to UTF8 as a side-effect.
3183 Usually accessed via the C<SvPVutf8_nolen> macro.
3189 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3192 return sv_2pvutf8(sv, &n_a);
3196 =for apidoc sv_2pvutf8
3198 Return a pointer to the UTF8-encoded representation of the SV, and set *lp
3199 to its length. May cause the SV to be upgraded to UTF8 as a side-effect.
3201 Usually accessed via the C<SvPVutf8> macro.
3207 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3209 sv_utf8_upgrade(sv);
3210 return SvPV(sv,*lp);
3214 =for apidoc sv_2bool
3216 This function is only called on magical items, and is only used by
3217 sv_true() or its macro equivalent.
3223 Perl_sv_2bool(pTHX_ register SV *sv)
3232 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3233 (SvTYPE(tmpsv) != SVt_RV || (SvRV(tmpsv) != SvRV(sv))))
3234 return SvTRUE(tmpsv);
3235 return SvRV(sv) != 0;
3238 register XPV* Xpvtmp;
3239 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3240 (*Xpvtmp->xpv_pv > '0' ||
3241 Xpvtmp->xpv_cur > 1 ||
3242 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
3249 return SvIVX(sv) != 0;
3252 return SvNVX(sv) != 0.0;
3260 =for apidoc sv_utf8_upgrade
3262 Convert the PV of an SV to its UTF8-encoded form.
3263 Forces the SV to string form if it is not already.
3264 Always sets the SvUTF8 flag to avoid future validity checks even
3265 if all the bytes have hibit clear.
3271 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3273 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3277 =for apidoc sv_utf8_upgrade_flags
3279 Convert the PV of an SV to its UTF8-encoded form.
3280 Forces the SV to string form if it is not already.
3281 Always sets the SvUTF8 flag to avoid future validity checks even
3282 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3283 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3284 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3290 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3300 (void) sv_2pv_flags(sv,&len, flags);
3308 if (SvREADONLY(sv) && SvFAKE(sv)) {
3309 sv_force_normal(sv);
3313 Perl_sv_recode_to_utf8(aTHX_ sv, PL_encoding);
3314 else { /* Assume Latin-1/EBCDIC */
3315 /* This function could be much more efficient if we
3316 * had a FLAG in SVs to signal if there are any hibit
3317 * chars in the PV. Given that there isn't such a flag
3318 * make the loop as fast as possible. */
3319 s = (U8 *) SvPVX(sv);
3320 e = (U8 *) SvEND(sv);
3324 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3330 len = SvCUR(sv) + 1; /* Plus the \0 */
3331 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
3332 SvCUR(sv) = len - 1;
3334 Safefree(s); /* No longer using what was there before. */
3335 SvLEN(sv) = len; /* No longer know the real size. */
3337 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3344 =for apidoc sv_utf8_downgrade
3346 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
3347 This may not be possible if the PV contains non-byte encoding characters;
3348 if this is the case, either returns false or, if C<fail_ok> is not
3355 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3357 if (SvPOK(sv) && SvUTF8(sv)) {
3362 if (SvREADONLY(sv) && SvFAKE(sv))
3363 sv_force_normal(sv);
3364 s = (U8 *) SvPV(sv, len);
3365 if (!utf8_to_bytes(s, &len)) {
3368 #ifdef USE_BYTES_DOWNGRADES
3369 else if (IN_BYTES) {
3371 U8 *e = (U8 *) SvEND(sv);
3374 UV ch = utf8n_to_uvchr(s,(e-s),&len,0);
3375 if (first && ch > 255) {
3377 Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte %s",
3380 Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte");
3387 len = (d - (U8 *) SvPVX(sv));
3392 Perl_croak(aTHX_ "Wide character in %s",
3395 Perl_croak(aTHX_ "Wide character");
3406 =for apidoc sv_utf8_encode
3408 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3409 flag so that it looks like octets again. Used as a building block
3410 for encode_utf8 in Encode.xs
3416 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3418 (void) sv_utf8_upgrade(sv);
3423 =for apidoc sv_utf8_decode
3425 Convert the octets in the PV from UTF-8 to chars. Scan for validity and then
3426 turn off SvUTF8 if needed so that we see characters. Used as a building block
3427 for decode_utf8 in Encode.xs
3433 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3439 /* The octets may have got themselves encoded - get them back as
3442 if (!sv_utf8_downgrade(sv, TRUE))
3445 /* it is actually just a matter of turning the utf8 flag on, but
3446 * we want to make sure everything inside is valid utf8 first.
3448 c = (U8 *) SvPVX(sv);
3449 if (!is_utf8_string(c, SvCUR(sv)+1))
3451 e = (U8 *) SvEND(sv);
3454 if (!UTF8_IS_INVARIANT(ch)) {
3464 =for apidoc sv_setsv
3466 Copies the contents of the source SV C<ssv> into the destination SV
3467 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3468 function if the source SV needs to be reused. Does not handle 'set' magic.
3469 Loosely speaking, it performs a copy-by-value, obliterating any previous
3470 content of the destination.
3472 You probably want to use one of the assortment of wrappers, such as
3473 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3474 C<SvSetMagicSV_nosteal>.
3480 /* sv_setsv() is aliased to Perl_sv_setsv_macro; this function provided
3481 for binary compatibility only
3484 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3486 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
3490 =for apidoc sv_setsv_flags
3492 Copies the contents of the source SV C<ssv> into the destination SV
3493 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3494 function if the source SV needs to be reused. Does not handle 'set' magic.
3495 Loosely speaking, it performs a copy-by-value, obliterating any previous
3496 content of the destination.
3497 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3498 C<ssv> if appropriate, else not. C<sv_setsv> and C<sv_setsv_nomg> are
3499 implemented in terms of this function.
3501 You probably want to use one of the assortment of wrappers, such as
3502 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3503 C<SvSetMagicSV_nosteal>.
3505 This is the primary function for copying scalars, and most other
3506 copy-ish functions and macros use this underneath.
3512 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3514 register U32 sflags;
3520 SV_CHECK_THINKFIRST(dstr);
3522 sstr = &PL_sv_undef;
3523 stype = SvTYPE(sstr);
3524 dtype = SvTYPE(dstr);
3528 /* There's a lot of redundancy below but we're going for speed here */
3533 if (dtype != SVt_PVGV) {
3534 (void)SvOK_off(dstr);
3542 sv_upgrade(dstr, SVt_IV);
3545 sv_upgrade(dstr, SVt_PVNV);
3549 sv_upgrade(dstr, SVt_PVIV);
3552 (void)SvIOK_only(dstr);
3553 SvIVX(dstr) = SvIVX(sstr);
3556 if (SvTAINTED(sstr))
3567 sv_upgrade(dstr, SVt_NV);
3572 sv_upgrade(dstr, SVt_PVNV);
3575 SvNVX(dstr) = SvNVX(sstr);
3576 (void)SvNOK_only(dstr);
3577 if (SvTAINTED(sstr))
3585 sv_upgrade(dstr, SVt_RV);
3586 else if (dtype == SVt_PVGV &&
3587 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3590 if (GvIMPORTED(dstr) != GVf_IMPORTED
3591 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3593 GvIMPORTED_on(dstr);
3604 sv_upgrade(dstr, SVt_PV);
3607 if (dtype < SVt_PVIV)
3608 sv_upgrade(dstr, SVt_PVIV);
3611 if (dtype < SVt_PVNV)
3612 sv_upgrade(dstr, SVt_PVNV);
3619 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3622 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3626 if (dtype <= SVt_PVGV) {
3628 if (dtype != SVt_PVGV) {
3629 char *name = GvNAME(sstr);
3630 STRLEN len = GvNAMELEN(sstr);
3631 sv_upgrade(dstr, SVt_PVGV);
3632 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
3633 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3634 GvNAME(dstr) = savepvn(name, len);
3635 GvNAMELEN(dstr) = len;
3636 SvFAKE_on(dstr); /* can coerce to non-glob */
3638 /* ahem, death to those who redefine active sort subs */
3639 else if (PL_curstackinfo->si_type == PERLSI_SORT
3640 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3641 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3644 #ifdef GV_UNIQUE_CHECK
3645 if (GvUNIQUE((GV*)dstr)) {
3646 Perl_croak(aTHX_ PL_no_modify);
3650 (void)SvOK_off(dstr);
3651 GvINTRO_off(dstr); /* one-shot flag */
3653 GvGP(dstr) = gp_ref(GvGP(sstr));
3654 if (SvTAINTED(sstr))
3656 if (GvIMPORTED(dstr) != GVf_IMPORTED
3657 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3659 GvIMPORTED_on(dstr);
3667 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3669 if (SvTYPE(sstr) != stype) {
3670 stype = SvTYPE(sstr);
3671 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3675 if (stype == SVt_PVLV)
3676 (void)SvUPGRADE(dstr, SVt_PVNV);
3678 (void)SvUPGRADE(dstr, stype);
3681 sflags = SvFLAGS(sstr);
3683 if (sflags & SVf_ROK) {
3684 if (dtype >= SVt_PV) {
3685 if (dtype == SVt_PVGV) {
3686 SV *sref = SvREFCNT_inc(SvRV(sstr));
3688 int intro = GvINTRO(dstr);
3690 #ifdef GV_UNIQUE_CHECK
3691 if (GvUNIQUE((GV*)dstr)) {
3692 Perl_croak(aTHX_ PL_no_modify);
3697 GvINTRO_off(dstr); /* one-shot flag */
3698 GvLINE(dstr) = CopLINE(PL_curcop);
3699 GvEGV(dstr) = (GV*)dstr;
3702 switch (SvTYPE(sref)) {
3705 SAVESPTR(GvAV(dstr));
3707 dref = (SV*)GvAV(dstr);
3708 GvAV(dstr) = (AV*)sref;
3709 if (!GvIMPORTED_AV(dstr)
3710 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3712 GvIMPORTED_AV_on(dstr);
3717 SAVESPTR(GvHV(dstr));
3719 dref = (SV*)GvHV(dstr);
3720 GvHV(dstr) = (HV*)sref;
3721 if (!GvIMPORTED_HV(dstr)
3722 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3724 GvIMPORTED_HV_on(dstr);
3729 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3730 SvREFCNT_dec(GvCV(dstr));
3731 GvCV(dstr) = Nullcv;
3732 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3733 PL_sub_generation++;
3735 SAVESPTR(GvCV(dstr));
3738 dref = (SV*)GvCV(dstr);
3739 if (GvCV(dstr) != (CV*)sref) {
3740 CV* cv = GvCV(dstr);
3742 if (!GvCVGEN((GV*)dstr) &&
3743 (CvROOT(cv) || CvXSUB(cv)))
3745 /* ahem, death to those who redefine
3746 * active sort subs */
3747 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3748 PL_sortcop == CvSTART(cv))
3750 "Can't redefine active sort subroutine %s",
3751 GvENAME((GV*)dstr));
3752 /* Redefining a sub - warning is mandatory if
3753 it was a const and its value changed. */
3754 if (ckWARN(WARN_REDEFINE)
3756 && (!CvCONST((CV*)sref)
3757 || sv_cmp(cv_const_sv(cv),
3758 cv_const_sv((CV*)sref)))))
3760 Perl_warner(aTHX_ WARN_REDEFINE,
3762 ? "Constant subroutine %s redefined"
3763 : "Subroutine %s redefined",
3764 GvENAME((GV*)dstr));
3767 cv_ckproto(cv, (GV*)dstr,
3768 SvPOK(sref) ? SvPVX(sref) : Nullch);
3770 GvCV(dstr) = (CV*)sref;
3771 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3772 GvASSUMECV_on(dstr);
3773 PL_sub_generation++;
3775 if (!GvIMPORTED_CV(dstr)
3776 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3778 GvIMPORTED_CV_on(dstr);
3783 SAVESPTR(GvIOp(dstr));
3785 dref = (SV*)GvIOp(dstr);
3786 GvIOp(dstr) = (IO*)sref;
3790 SAVESPTR(GvFORM(dstr));
3792 dref = (SV*)GvFORM(dstr);
3793 GvFORM(dstr) = (CV*)sref;
3797 SAVESPTR(GvSV(dstr));
3799 dref = (SV*)GvSV(dstr);
3801 if (!GvIMPORTED_SV(dstr)
3802 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3804 GvIMPORTED_SV_on(dstr);
3812 if (SvTAINTED(sstr))
3817 (void)SvOOK_off(dstr); /* backoff */
3819 Safefree(SvPVX(dstr));
3820 SvLEN(dstr)=SvCUR(dstr)=0;
3823 (void)SvOK_off(dstr);
3824 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3826 if (sflags & SVp_NOK) {
3828 /* Only set the public OK flag if the source has public OK. */
3829 if (sflags & SVf_NOK)
3830 SvFLAGS(dstr) |= SVf_NOK;
3831 SvNVX(dstr) = SvNVX(sstr);
3833 if (sflags & SVp_IOK) {
3834 (void)SvIOKp_on(dstr);
3835 if (sflags & SVf_IOK)
3836 SvFLAGS(dstr) |= SVf_IOK;
3837 if (sflags & SVf_IVisUV)
3839 SvIVX(dstr) = SvIVX(sstr);
3841 if (SvAMAGIC(sstr)) {
3845 else if (sflags & SVp_POK) {
3848 * Check to see if we can just swipe the string. If so, it's a
3849 * possible small lose on short strings, but a big win on long ones.
3850 * It might even be a win on short strings if SvPVX(dstr)
3851 * has to be allocated and SvPVX(sstr) has to be freed.
3854 if (SvTEMP(sstr) && /* slated for free anyway? */
3855 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3856 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3857 SvLEN(sstr) && /* and really is a string */
3858 /* and won't be needed again, potentially */
3859 !(PL_op && PL_op->op_type == OP_AASSIGN))
3861 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3863 SvFLAGS(dstr) &= ~SVf_OOK;
3864 Safefree(SvPVX(dstr) - SvIVX(dstr));
3866 else if (SvLEN(dstr))
3867 Safefree(SvPVX(dstr));
3869 (void)SvPOK_only(dstr);
3870 SvPV_set(dstr, SvPVX(sstr));
3871 SvLEN_set(dstr, SvLEN(sstr));
3872 SvCUR_set(dstr, SvCUR(sstr));
3875 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3876 SvPV_set(sstr, Nullch);
3881 else { /* have to copy actual string */
3882 STRLEN len = SvCUR(sstr);
3884 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3885 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3886 SvCUR_set(dstr, len);
3887 *SvEND(dstr) = '\0';
3888 (void)SvPOK_only(dstr);
3890 if (sflags & SVf_UTF8)
3893 if (sflags & SVp_NOK) {
3895 if (sflags & SVf_NOK)
3896 SvFLAGS(dstr) |= SVf_NOK;
3897 SvNVX(dstr) = SvNVX(sstr);
3899 if (sflags & SVp_IOK) {
3900 (void)SvIOKp_on(dstr);
3901 if (sflags & SVf_IOK)
3902 SvFLAGS(dstr) |= SVf_IOK;
3903 if (sflags & SVf_IVisUV)
3905 SvIVX(dstr) = SvIVX(sstr);
3908 else if (sflags & SVp_IOK) {
3909 if (sflags & SVf_IOK)
3910 (void)SvIOK_only(dstr);
3912 (void)SvOK_off(dstr);
3913 (void)SvIOKp_on(dstr);
3915 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3916 if (sflags & SVf_IVisUV)
3918 SvIVX(dstr) = SvIVX(sstr);
3919 if (sflags & SVp_NOK) {
3920 if (sflags & SVf_NOK)
3921 (void)SvNOK_on(dstr);
3923 (void)SvNOKp_on(dstr);
3924 SvNVX(dstr) = SvNVX(sstr);
3927 else if (sflags & SVp_NOK) {
3928 if (sflags & SVf_NOK)
3929 (void)SvNOK_only(dstr);
3931 (void)SvOK_off(dstr);
3934 SvNVX(dstr) = SvNVX(sstr);
3937 if (dtype == SVt_PVGV) {
3938 if (ckWARN(WARN_MISC))
3939 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3942 (void)SvOK_off(dstr);
3944 if (SvTAINTED(sstr))
3949 =for apidoc sv_setsv_mg
3951 Like C<sv_setsv>, but also handles 'set' magic.
3957 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3959 sv_setsv(dstr,sstr);
3964 =for apidoc sv_setpvn
3966 Copies a string into an SV. The C<len> parameter indicates the number of
3967 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3973 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3975 register char *dptr;
3977 SV_CHECK_THINKFIRST(sv);
3983 /* len is STRLEN which is unsigned, need to copy to signed */
3986 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
3988 (void)SvUPGRADE(sv, SVt_PV);
3990 SvGROW(sv, len + 1);
3992 Move(ptr,dptr,len,char);
3995 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4000 =for apidoc sv_setpvn_mg
4002 Like C<sv_setpvn>, but also handles 'set' magic.
4008 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4010 sv_setpvn(sv,ptr,len);
4015 =for apidoc sv_setpv
4017 Copies a string into an SV. The string must be null-terminated. Does not
4018 handle 'set' magic. See C<sv_setpv_mg>.
4024 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4026 register STRLEN len;
4028 SV_CHECK_THINKFIRST(sv);
4034 (void)SvUPGRADE(sv, SVt_PV);
4036 SvGROW(sv, len + 1);
4037 Move(ptr,SvPVX(sv),len+1,char);
4039 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4044 =for apidoc sv_setpv_mg
4046 Like C<sv_setpv>, but also handles 'set' magic.
4052 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4059 =for apidoc sv_usepvn
4061 Tells an SV to use C<ptr> to find its string value. Normally the string is
4062 stored inside the SV but sv_usepvn allows the SV to use an outside string.
4063 The C<ptr> should point to memory that was allocated by C<malloc>. The
4064 string length, C<len>, must be supplied. This function will realloc the
4065 memory pointed to by C<ptr>, so that pointer should not be freed or used by
4066 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
4067 See C<sv_usepvn_mg>.
4073 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4075 SV_CHECK_THINKFIRST(sv);
4076 (void)SvUPGRADE(sv, SVt_PV);
4081 (void)SvOOK_off(sv);
4082 if (SvPVX(sv) && SvLEN(sv))
4083 Safefree(SvPVX(sv));
4084 Renew(ptr, len+1, char);
4087 SvLEN_set(sv, len+1);
4089 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4094 =for apidoc sv_usepvn_mg
4096 Like C<sv_usepvn>, but also handles 'set' magic.
4102 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4104 sv_usepvn(sv,ptr,len);
4109 =for apidoc sv_force_normal_flags
4111 Undo various types of fakery on an SV: if the PV is a shared string, make
4112 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4113 an xpvmg. The C<flags> parameter gets passed to C<sv_unref_flags()>
4114 when unrefing. C<sv_force_normal> calls this function with flags set to 0.
4120 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4122 if (SvREADONLY(sv)) {
4124 char *pvx = SvPVX(sv);
4125 STRLEN len = SvCUR(sv);
4126 U32 hash = SvUVX(sv);
4127 SvGROW(sv, len + 1);
4128 Move(pvx,SvPVX(sv),len,char);
4132 unsharepvn(pvx, SvUTF8(sv) ? -(I32)len : len, hash);
4134 else if (PL_curcop != &PL_compiling)
4135 Perl_croak(aTHX_ PL_no_modify);
4138 sv_unref_flags(sv, flags);
4139 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4144 =for apidoc sv_force_normal
4146 Undo various types of fakery on an SV: if the PV is a shared string, make
4147 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4148 an xpvmg. See also C<sv_force_normal_flags>.
4154 Perl_sv_force_normal(pTHX_ register SV *sv)
4156 sv_force_normal_flags(sv, 0);
4162 Efficient removal of characters from the beginning of the string buffer.
4163 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4164 the string buffer. The C<ptr> becomes the first character of the adjusted
4165 string. Uses the "OOK hack".
4171 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr)
4173 register STRLEN delta;
4175 if (!ptr || !SvPOKp(sv))
4177 SV_CHECK_THINKFIRST(sv);
4178 if (SvTYPE(sv) < SVt_PVIV)
4179 sv_upgrade(sv,SVt_PVIV);
4182 if (!SvLEN(sv)) { /* make copy of shared string */
4183 char *pvx = SvPVX(sv);
4184 STRLEN len = SvCUR(sv);
4185 SvGROW(sv, len + 1);
4186 Move(pvx,SvPVX(sv),len,char);
4190 SvFLAGS(sv) |= SVf_OOK;
4192 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
4193 delta = ptr - SvPVX(sv);
4201 =for apidoc sv_catpvn
4203 Concatenates the string onto the end of the string which is in the SV. The
4204 C<len> indicates number of bytes to copy. If the SV has the UTF8
4205 status set, then the bytes appended should be valid UTF8.
4206 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4211 /* sv_catpvn() is aliased to Perl_sv_catpvn_macro; this function provided
4212 for binary compatibility only
4215 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
4217 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
4221 =for apidoc sv_catpvn_flags
4223 Concatenates the string onto the end of the string which is in the SV. The
4224 C<len> indicates number of bytes to copy. If the SV has the UTF8
4225 status set, then the bytes appended should be valid UTF8.
4226 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4227 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4228 in terms of this function.
4234 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4239 dstr = SvPV_force_flags(dsv, dlen, flags);
4240 SvGROW(dsv, dlen + slen + 1);
4243 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4246 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4251 =for apidoc sv_catpvn_mg
4253 Like C<sv_catpvn>, but also handles 'set' magic.
4259 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4261 sv_catpvn(sv,ptr,len);
4266 =for apidoc sv_catsv
4268 Concatenates the string from SV C<ssv> onto the end of the string in
4269 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4270 not 'set' magic. See C<sv_catsv_mg>.
4274 /* sv_catsv() is aliased to Perl_sv_catsv_macro; this function provided
4275 for binary compatibility only
4278 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
4280 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
4284 =for apidoc sv_catsv_flags
4286 Concatenates the string from SV C<ssv> onto the end of the string in
4287 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4288 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4289 and C<sv_catsv_nomg> are implemented in terms of this function.
4294 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4300 if ((spv = SvPV(ssv, slen))) {
4301 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4302 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4303 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4304 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4305 dsv->sv_flags doesn't have that bit set.
4306 Andy Dougherty 12 Oct 2001
4308 I32 sutf8 = DO_UTF8(ssv);
4311 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4313 dutf8 = DO_UTF8(dsv);
4315 if (dutf8 != sutf8) {
4317 /* Not modifying source SV, so taking a temporary copy. */
4318 SV* csv = sv_2mortal(newSVpvn(spv, slen));
4320 sv_utf8_upgrade(csv);
4321 spv = SvPV(csv, slen);
4324 sv_utf8_upgrade_nomg(dsv);
4326 sv_catpvn_nomg(dsv, spv, slen);
4331 =for apidoc sv_catsv_mg
4333 Like C<sv_catsv>, but also handles 'set' magic.
4339 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
4346 =for apidoc sv_catpv
4348 Concatenates the string onto the end of the string which is in the SV.
4349 If the SV has the UTF8 status set, then the bytes appended should be
4350 valid UTF8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4355 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4357 register STRLEN len;
4363 junk = SvPV_force(sv, tlen);
4365 SvGROW(sv, tlen + len + 1);
4368 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4370 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4375 =for apidoc sv_catpv_mg
4377 Like C<sv_catpv>, but also handles 'set' magic.
4383 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4392 Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
4393 with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
4400 Perl_newSV(pTHX_ STRLEN len)
4406 sv_upgrade(sv, SVt_PV);
4407 SvGROW(sv, len + 1);
4413 =for apidoc sv_magic
4415 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4416 then adds a new magic item of type C<how> to the head of the magic list.
4418 C<name> is assumed to contain an C<SV*> if C<(name && namelen == HEf_SVKEY)>
4424 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4428 if (SvREADONLY(sv)) {
4429 if (PL_curcop != &PL_compiling
4430 && how != PERL_MAGIC_regex_global
4431 && how != PERL_MAGIC_bm
4432 && how != PERL_MAGIC_fm
4433 && how != PERL_MAGIC_sv
4436 Perl_croak(aTHX_ PL_no_modify);
4439 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4440 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4441 if (how == PERL_MAGIC_taint)
4447 (void)SvUPGRADE(sv, SVt_PVMG);
4449 Newz(702,mg, 1, MAGIC);
4450 mg->mg_moremagic = SvMAGIC(sv);
4453 /* Some magic contains a reference loop, where the sv and object refer to
4454 each other. To avoid a reference loop that would prevent such objects
4455 being freed, we look for such loops and if we find one we avoid
4456 incrementing the object refcount. */
4457 if (!obj || obj == sv ||
4458 how == PERL_MAGIC_arylen ||
4459 how == PERL_MAGIC_qr ||
4460 (SvTYPE(obj) == SVt_PVGV &&
4461 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4462 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4463 GvFORM(obj) == (CV*)sv)))
4468 mg->mg_obj = SvREFCNT_inc(obj);
4469 mg->mg_flags |= MGf_REFCOUNTED;
4472 mg->mg_len = namlen;
4475 mg->mg_ptr = savepvn(name, namlen);
4476 else if (namlen == HEf_SVKEY)
4477 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4482 mg->mg_virtual = &PL_vtbl_sv;
4484 case PERL_MAGIC_overload:
4485 mg->mg_virtual = &PL_vtbl_amagic;
4487 case PERL_MAGIC_overload_elem:
4488 mg->mg_virtual = &PL_vtbl_amagicelem;
4490 case PERL_MAGIC_overload_table:
4491 mg->mg_virtual = &PL_vtbl_ovrld;
4494 mg->mg_virtual = &PL_vtbl_bm;
4496 case PERL_MAGIC_regdata:
4497 mg->mg_virtual = &PL_vtbl_regdata;
4499 case PERL_MAGIC_regdatum:
4500 mg->mg_virtual = &PL_vtbl_regdatum;
4502 case PERL_MAGIC_env:
4503 mg->mg_virtual = &PL_vtbl_env;
4506 mg->mg_virtual = &PL_vtbl_fm;
4508 case PERL_MAGIC_envelem:
4509 mg->mg_virtual = &PL_vtbl_envelem;
4511 case PERL_MAGIC_regex_global:
4512 mg->mg_virtual = &PL_vtbl_mglob;
4514 case PERL_MAGIC_isa:
4515 mg->mg_virtual = &PL_vtbl_isa;
4517 case PERL_MAGIC_isaelem:
4518 mg->mg_virtual = &PL_vtbl_isaelem;
4520 case PERL_MAGIC_nkeys:
4521 mg->mg_virtual = &PL_vtbl_nkeys;
4523 case PERL_MAGIC_dbfile:
4527 case PERL_MAGIC_dbline:
4528 mg->mg_virtual = &PL_vtbl_dbline;
4530 #ifdef USE_5005THREADS
4531 case PERL_MAGIC_mutex:
4532 mg->mg_virtual = &PL_vtbl_mutex;
4534 #endif /* USE_5005THREADS */
4535 #ifdef USE_LOCALE_COLLATE
4536 case PERL_MAGIC_collxfrm:
4537 mg->mg_virtual = &PL_vtbl_collxfrm;
4539 #endif /* USE_LOCALE_COLLATE */
4540 case PERL_MAGIC_tied:
4541 mg->mg_virtual = &PL_vtbl_pack;
4543 case PERL_MAGIC_tiedelem:
4544 case PERL_MAGIC_tiedscalar:
4545 mg->mg_virtual = &PL_vtbl_packelem;
4548 mg->mg_virtual = &PL_vtbl_regexp;
4550 case PERL_MAGIC_sig:
4551 mg->mg_virtual = &PL_vtbl_sig;
4553 case PERL_MAGIC_sigelem:
4554 mg->mg_virtual = &PL_vtbl_sigelem;
4556 case PERL_MAGIC_taint:
4557 mg->mg_virtual = &PL_vtbl_taint;
4560 case PERL_MAGIC_uvar:
4561 mg->mg_virtual = &PL_vtbl_uvar;
4563 case PERL_MAGIC_vec:
4564 mg->mg_virtual = &PL_vtbl_vec;
4566 case PERL_MAGIC_substr:
4567 mg->mg_virtual = &PL_vtbl_substr;
4569 case PERL_MAGIC_defelem:
4570 mg->mg_virtual = &PL_vtbl_defelem;
4572 case PERL_MAGIC_glob:
4573 mg->mg_virtual = &PL_vtbl_glob;
4575 case PERL_MAGIC_arylen:
4576 mg->mg_virtual = &PL_vtbl_arylen;
4578 case PERL_MAGIC_pos:
4579 mg->mg_virtual = &PL_vtbl_pos;
4581 case PERL_MAGIC_backref:
4582 mg->mg_virtual = &PL_vtbl_backref;
4584 case PERL_MAGIC_ext:
4585 /* Reserved for use by extensions not perl internals. */
4586 /* Useful for attaching extension internal data to perl vars. */
4587 /* Note that multiple extensions may clash if magical scalars */
4588 /* etc holding private data from one are passed to another. */
4592 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4596 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4600 =for apidoc sv_unmagic
4602 Removes all magic of type C<type> from an SV.
4608 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4612 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4615 for (mg = *mgp; mg; mg = *mgp) {
4616 if (mg->mg_type == type) {
4617 MGVTBL* vtbl = mg->mg_virtual;
4618 *mgp = mg->mg_moremagic;
4619 if (vtbl && vtbl->svt_free)
4620 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4621 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4622 if (mg->mg_len >= 0)
4623 Safefree(mg->mg_ptr);
4624 else if (mg->mg_len == HEf_SVKEY)
4625 SvREFCNT_dec((SV*)mg->mg_ptr);
4627 if (mg->mg_flags & MGf_REFCOUNTED)
4628 SvREFCNT_dec(mg->mg_obj);
4632 mgp = &mg->mg_moremagic;
4636 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4643 =for apidoc sv_rvweaken
4645 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4646 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4647 push a back-reference to this RV onto the array of backreferences
4648 associated with that magic.
4654 Perl_sv_rvweaken(pTHX_ SV *sv)
4657 if (!SvOK(sv)) /* let undefs pass */
4660 Perl_croak(aTHX_ "Can't weaken a nonreference");
4661 else if (SvWEAKREF(sv)) {
4662 if (ckWARN(WARN_MISC))
4663 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4667 sv_add_backref(tsv, sv);
4673 /* Give tsv backref magic if it hasn't already got it, then push a
4674 * back-reference to sv onto the array associated with the backref magic.
4678 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4682 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
4683 av = (AV*)mg->mg_obj;
4686 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4687 SvREFCNT_dec(av); /* for sv_magic */
4692 /* delete a back-reference to ourselves from the backref magic associated
4693 * with the SV we point to.
4697 S_sv_del_backref(pTHX_ SV *sv)
4704 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
4705 Perl_croak(aTHX_ "panic: del_backref");
4706 av = (AV *)mg->mg_obj;
4711 svp[i] = &PL_sv_undef; /* XXX */
4718 =for apidoc sv_insert
4720 Inserts a string at the specified offset/length within the SV. Similar to
4721 the Perl substr() function.
4727 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4731 register char *midend;
4732 register char *bigend;
4738 Perl_croak(aTHX_ "Can't modify non-existent substring");
4739 SvPV_force(bigstr, curlen);
4740 (void)SvPOK_only_UTF8(bigstr);
4741 if (offset + len > curlen) {
4742 SvGROW(bigstr, offset+len+1);
4743 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4744 SvCUR_set(bigstr, offset+len);
4748 i = littlelen - len;
4749 if (i > 0) { /* string might grow */
4750 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4751 mid = big + offset + len;
4752 midend = bigend = big + SvCUR(bigstr);
4755 while (midend > mid) /* shove everything down */
4756 *--bigend = *--midend;
4757 Move(little,big+offset,littlelen,char);
4763 Move(little,SvPVX(bigstr)+offset,len,char);
4768 big = SvPVX(bigstr);
4771 bigend = big + SvCUR(bigstr);
4773 if (midend > bigend)
4774 Perl_croak(aTHX_ "panic: sv_insert");
4776 if (mid - big > bigend - midend) { /* faster to shorten from end */
4778 Move(little, mid, littlelen,char);
4781 i = bigend - midend;
4783 Move(midend, mid, i,char);
4787 SvCUR_set(bigstr, mid - big);
4790 else if ((i = mid - big)) { /* faster from front */
4791 midend -= littlelen;
4793 sv_chop(bigstr,midend-i);
4798 Move(little, mid, littlelen,char);
4800 else if (littlelen) {
4801 midend -= littlelen;
4802 sv_chop(bigstr,midend);
4803 Move(little,midend,littlelen,char);
4806 sv_chop(bigstr,midend);
4812 =for apidoc sv_replace
4814 Make the first argument a copy of the second, then delete the original.
4815 The target SV physically takes over ownership of the body of the source SV
4816 and inherits its flags; however, the target keeps any magic it owns,
4817 and any magic in the source is discarded.
4818 Note that this is a rather specialist SV copying operation; most of the
4819 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
4825 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4827 U32 refcnt = SvREFCNT(sv);
4828 SV_CHECK_THINKFIRST(sv);
4829 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4830 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4831 if (SvMAGICAL(sv)) {
4835 sv_upgrade(nsv, SVt_PVMG);
4836 SvMAGIC(nsv) = SvMAGIC(sv);
4837 SvFLAGS(nsv) |= SvMAGICAL(sv);
4843 assert(!SvREFCNT(sv));
4844 StructCopy(nsv,sv,SV);
4845 SvREFCNT(sv) = refcnt;
4846 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4851 =for apidoc sv_clear
4853 Clear an SV: call any destructors, free up any memory used by the body,
4854 and free the body itself. The SV's head is I<not> freed, although
4855 its type is set to all 1's so that it won't inadvertently be assumed
4856 to be live during global destruction etc.
4857 This function should only be called when REFCNT is zero. Most of the time
4858 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
4865 Perl_sv_clear(pTHX_ register SV *sv)
4869 assert(SvREFCNT(sv) == 0);
4872 if (PL_defstash) { /* Still have a symbol table? */
4877 Zero(&tmpref, 1, SV);
4878 sv_upgrade(&tmpref, SVt_RV);
4880 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4881 SvREFCNT(&tmpref) = 1;
4884 stash = SvSTASH(sv);
4885 destructor = StashHANDLER(stash,DESTROY);
4888 PUSHSTACKi(PERLSI_DESTROY);
4889 SvRV(&tmpref) = SvREFCNT_inc(sv);
4894 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4900 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4902 del_XRV(SvANY(&tmpref));
4905 if (PL_in_clean_objs)
4906 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4908 /* DESTROY gave object new lease on life */
4914 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4915 SvOBJECT_off(sv); /* Curse the object. */
4916 if (SvTYPE(sv) != SVt_PVIO)
4917 --PL_sv_objcount; /* XXX Might want something more general */
4920 if (SvTYPE(sv) >= SVt_PVMG) {
4923 if (SvFLAGS(sv) & SVpad_TYPED)
4924 SvREFCNT_dec(SvSTASH(sv));
4927 switch (SvTYPE(sv)) {
4930 IoIFP(sv) != PerlIO_stdin() &&
4931 IoIFP(sv) != PerlIO_stdout() &&
4932 IoIFP(sv) != PerlIO_stderr())
4934 io_close((IO*)sv, FALSE);
4936 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4937 PerlDir_close(IoDIRP(sv));
4938 IoDIRP(sv) = (DIR*)NULL;
4939 Safefree(IoTOP_NAME(sv));
4940 Safefree(IoFMT_NAME(sv));
4941 Safefree(IoBOTTOM_NAME(sv));
4956 SvREFCNT_dec(LvTARG(sv));
4960 Safefree(GvNAME(sv));
4961 /* cannot decrease stash refcount yet, as we might recursively delete
4962 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4963 of stash until current sv is completely gone.
4964 -- JohnPC, 27 Mar 1998 */
4965 stash = GvSTASH(sv);
4971 (void)SvOOK_off(sv);
4979 SvREFCNT_dec(SvRV(sv));
4981 else if (SvPVX(sv) && SvLEN(sv))
4982 Safefree(SvPVX(sv));
4983 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4984 unsharepvn(SvPVX(sv),
4985 SvUTF8(sv) ? -(I32)SvCUR(sv) : SvCUR(sv),
4998 switch (SvTYPE(sv)) {
5014 del_XPVIV(SvANY(sv));
5017 del_XPVNV(SvANY(sv));
5020 del_XPVMG(SvANY(sv));
5023 del_XPVLV(SvANY(sv));
5026 del_XPVAV(SvANY(sv));
5029 del_XPVHV(SvANY(sv));
5032 del_XPVCV(SvANY(sv));
5035 del_XPVGV(SvANY(sv));
5036 /* code duplication for increased performance. */
5037 SvFLAGS(sv) &= SVf_BREAK;
5038 SvFLAGS(sv) |= SVTYPEMASK;
5039 /* decrease refcount of the stash that owns this GV, if any */
5041 SvREFCNT_dec(stash);
5042 return; /* not break, SvFLAGS reset already happened */
5044 del_XPVBM(SvANY(sv));
5047 del_XPVFM(SvANY(sv));
5050 del_XPVIO(SvANY(sv));
5053 SvFLAGS(sv) &= SVf_BREAK;
5054 SvFLAGS(sv) |= SVTYPEMASK;
5058 =for apidoc sv_newref
5060 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5067 Perl_sv_newref(pTHX_ SV *sv)
5070 ATOMIC_INC(SvREFCNT(sv));
5077 Decrement an SV's reference count, and if it drops to zero, call
5078 C<sv_clear> to invoke destructors and free up any memory used by
5079 the body; finally, deallocate the SV's head itself.
5080 Normally called via a wrapper macro C<SvREFCNT_dec>.
5086 Perl_sv_free(pTHX_ SV *sv)
5088 int refcount_is_zero;
5092 if (SvREFCNT(sv) == 0) {
5093 if (SvFLAGS(sv) & SVf_BREAK)
5094 /* this SV's refcnt has been artificially decremented to
5095 * trigger cleanup */
5097 if (PL_in_clean_all) /* All is fair */
5099 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5100 /* make sure SvREFCNT(sv)==0 happens very seldom */
5101 SvREFCNT(sv) = (~(U32)0)/2;
5104 if (ckWARN_d(WARN_INTERNAL))
5105 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
5108 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
5109 if (!refcount_is_zero)
5113 if (ckWARN_d(WARN_DEBUGGING))
5114 Perl_warner(aTHX_ WARN_DEBUGGING,
5115 "Attempt to free temp prematurely: SV 0x%"UVxf,
5120 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5121 /* make sure SvREFCNT(sv)==0 happens very seldom */
5122 SvREFCNT(sv) = (~(U32)0)/2;
5133 Returns the length of the string in the SV. Handles magic and type
5134 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5140 Perl_sv_len(pTHX_ register SV *sv)
5148 len = mg_length(sv);
5150 (void)SvPV(sv, len);
5155 =for apidoc sv_len_utf8
5157 Returns the number of characters in the string in an SV, counting wide
5158 UTF8 bytes as a single character. Handles magic and type coercion.
5164 Perl_sv_len_utf8(pTHX_ register SV *sv)
5170 return mg_length(sv);
5174 U8 *s = (U8*)SvPV(sv, len);
5176 return Perl_utf8_length(aTHX_ s, s + len);
5181 =for apidoc sv_pos_u2b
5183 Converts the value pointed to by offsetp from a count of UTF8 chars from
5184 the start of the string, to a count of the equivalent number of bytes; if
5185 lenp is non-zero, it does the same to lenp, but this time starting from
5186 the offset, rather than from the start of the string. Handles magic and
5193 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
5198 I32 uoffset = *offsetp;
5204 start = s = (U8*)SvPV(sv, len);
5206 while (s < send && uoffset--)
5210 *offsetp = s - start;
5214 while (s < send && ulen--)
5224 =for apidoc sv_pos_b2u
5226 Converts the value pointed to by offsetp from a count of bytes from the
5227 start of the string, to a count of the equivalent number of UTF8 chars.
5228 Handles magic and type coercion.
5234 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
5243 s = (U8*)SvPV(sv, len);
5245 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
5246 send = s + *offsetp;
5250 /* Call utf8n_to_uvchr() to validate the sequence */
5251 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
5266 Returns a boolean indicating whether the strings in the two SVs are
5267 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5268 coerce its args to strings if necessary.
5274 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
5288 pv1 = SvPV(sv1, cur1);
5295 pv2 = SvPV(sv2, cur2);
5297 /* do not utf8ize the comparands as a side-effect */
5298 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5299 bool is_utf8 = TRUE;
5300 /* UTF-8ness differs */
5303 /* sv1 is the UTF-8 one , If is equal it must be downgrade-able */
5304 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
5309 /* sv2 is the UTF-8 one , If is equal it must be downgrade-able */
5310 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
5315 /* Downgrade not possible - cannot be eq */
5321 eq = memEQ(pv1, pv2, cur1);
5332 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
5333 string in C<sv1> is less than, equal to, or greater than the string in
5334 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5335 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
5341 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
5346 bool pv1tmp = FALSE;
5347 bool pv2tmp = FALSE;
5354 pv1 = SvPV(sv1, cur1);
5361 pv2 = SvPV(sv2, cur2);
5363 /* do not utf8ize the comparands as a side-effect */
5364 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5366 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
5370 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
5376 cmp = cur2 ? -1 : 0;
5380 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
5383 cmp = retval < 0 ? -1 : 1;
5384 } else if (cur1 == cur2) {
5387 cmp = cur1 < cur2 ? -1 : 1;
5400 =for apidoc sv_cmp_locale
5402 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
5403 'use bytes' aware, handles get magic, and will coerce its args to strings
5404 if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
5410 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
5412 #ifdef USE_LOCALE_COLLATE
5418 if (PL_collation_standard)
5422 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
5424 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
5426 if (!pv1 || !len1) {
5437 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
5440 return retval < 0 ? -1 : 1;
5443 * When the result of collation is equality, that doesn't mean
5444 * that there are no differences -- some locales exclude some
5445 * characters from consideration. So to avoid false equalities,
5446 * we use the raw string as a tiebreaker.
5452 #endif /* USE_LOCALE_COLLATE */
5454 return sv_cmp(sv1, sv2);
5458 #ifdef USE_LOCALE_COLLATE
5461 =for apidoc sv_collxfrm
5463 Add Collate Transform magic to an SV if it doesn't already have it.
5465 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
5466 scalar data of the variable, but transformed to such a format that a normal
5467 memory comparison can be used to compare the data according to the locale
5474 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
5478 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
5479 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
5484 Safefree(mg->mg_ptr);
5486 if ((xf = mem_collxfrm(s, len, &xlen))) {
5487 if (SvREADONLY(sv)) {
5490 return xf + sizeof(PL_collation_ix);
5493 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
5494 mg = mg_find(sv, PERL_MAGIC_collxfrm);
5507 if (mg && mg->mg_ptr) {
5509 return mg->mg_ptr + sizeof(PL_collation_ix);
5517 #endif /* USE_LOCALE_COLLATE */
5522 Get a line from the filehandle and store it into the SV, optionally
5523 appending to the currently-stored string.
5529 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
5533 register STDCHAR rslast;
5534 register STDCHAR *bp;
5539 SV_CHECK_THINKFIRST(sv);
5540 (void)SvUPGRADE(sv, SVt_PV);
5544 if (PL_curcop == &PL_compiling) {
5545 /* we always read code in line mode */
5549 else if (RsSNARF(PL_rs)) {
5553 else if (RsRECORD(PL_rs)) {
5554 I32 recsize, bytesread;
5557 /* Grab the size of the record we're getting */
5558 recsize = SvIV(SvRV(PL_rs));
5559 (void)SvPOK_only(sv); /* Validate pointer */
5560 buffer = SvGROW(sv, recsize + 1);
5563 /* VMS wants read instead of fread, because fread doesn't respect */
5564 /* RMS record boundaries. This is not necessarily a good thing to be */
5565 /* doing, but we've got no other real choice */
5566 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
5568 bytesread = PerlIO_read(fp, buffer, recsize);
5570 SvCUR_set(sv, bytesread);
5571 buffer[bytesread] = '\0';
5572 if (PerlIO_isutf8(fp))
5576 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
5578 else if (RsPARA(PL_rs)) {
5584 /* Get $/ i.e. PL_rs into same encoding as stream wants */
5585 if (PerlIO_isutf8(fp)) {
5586 rsptr = SvPVutf8(PL_rs, rslen);
5589 if (SvUTF8(PL_rs)) {
5590 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
5591 Perl_croak(aTHX_ "Wide character in $/");
5594 rsptr = SvPV(PL_rs, rslen);
5598 rslast = rslen ? rsptr[rslen - 1] : '\0';
5600 if (rspara) { /* have to do this both before and after */
5601 do { /* to make sure file boundaries work right */
5604 i = PerlIO_getc(fp);
5608 PerlIO_ungetc(fp,i);
5614 /* See if we know enough about I/O mechanism to cheat it ! */
5616 /* This used to be #ifdef test - it is made run-time test for ease
5617 of abstracting out stdio interface. One call should be cheap
5618 enough here - and may even be a macro allowing compile
5622 if (PerlIO_fast_gets(fp)) {
5625 * We're going to steal some values from the stdio struct
5626 * and put EVERYTHING in the innermost loop into registers.
5628 register STDCHAR *ptr;
5632 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5633 /* An ungetc()d char is handled separately from the regular
5634 * buffer, so we getc() it back out and stuff it in the buffer.
5636 i = PerlIO_getc(fp);
5637 if (i == EOF) return 0;
5638 *(--((*fp)->_ptr)) = (unsigned char) i;
5642 /* Here is some breathtakingly efficient cheating */
5644 cnt = PerlIO_get_cnt(fp); /* get count into register */
5645 (void)SvPOK_only(sv); /* validate pointer */
5646 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5647 if (cnt > 80 && SvLEN(sv) > append) {
5648 shortbuffered = cnt - SvLEN(sv) + append + 1;
5649 cnt -= shortbuffered;
5653 /* remember that cnt can be negative */
5654 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5659 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5660 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5661 DEBUG_P(PerlIO_printf(Perl_debug_log,
5662 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5663 DEBUG_P(PerlIO_printf(Perl_debug_log,
5664 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5665 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5666 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
5671 while (cnt > 0) { /* this | eat */
5673 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5674 goto thats_all_folks; /* screams | sed :-) */
5678 Copy(ptr, bp, cnt, char); /* this | eat */
5679 bp += cnt; /* screams | dust */
5680 ptr += cnt; /* louder | sed :-) */
5685 if (shortbuffered) { /* oh well, must extend */
5686 cnt = shortbuffered;
5688 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5690 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5691 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5695 DEBUG_P(PerlIO_printf(Perl_debug_log,
5696 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5697 PTR2UV(ptr),(long)cnt));
5698 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5699 DEBUG_P(PerlIO_printf(Perl_debug_log,
5700 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5701 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5702 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5703 /* This used to call 'filbuf' in stdio form, but as that behaves like
5704 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5705 another abstraction. */
5706 i = PerlIO_getc(fp); /* get more characters */
5707 DEBUG_P(PerlIO_printf(Perl_debug_log,
5708 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5709 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5710 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5711 cnt = PerlIO_get_cnt(fp);
5712 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5713 DEBUG_P(PerlIO_printf(Perl_debug_log,
5714 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5716 if (i == EOF) /* all done for ever? */
5717 goto thats_really_all_folks;
5719 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5721 SvGROW(sv, bpx + cnt + 2);
5722 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5724 *bp++ = i; /* store character from PerlIO_getc */
5726 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5727 goto thats_all_folks;
5731 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5732 memNE((char*)bp - rslen, rsptr, rslen))
5733 goto screamer; /* go back to the fray */
5734 thats_really_all_folks:
5736 cnt += shortbuffered;
5737 DEBUG_P(PerlIO_printf(Perl_debug_log,
5738 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5739 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5740 DEBUG_P(PerlIO_printf(Perl_debug_log,
5741 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5742 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5743 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5745 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5746 DEBUG_P(PerlIO_printf(Perl_debug_log,
5747 "Screamer: done, len=%ld, string=|%.*s|\n",
5748 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5753 /*The big, slow, and stupid way */
5756 /* Need to work around EPOC SDK features */
5757 /* On WINS: MS VC5 generates calls to _chkstk, */
5758 /* if a `large' stack frame is allocated */
5759 /* gcc on MARM does not generate calls like these */
5765 register STDCHAR *bpe = buf + sizeof(buf);
5767 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5768 ; /* keep reading */
5772 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5773 /* Accomodate broken VAXC compiler, which applies U8 cast to
5774 * both args of ?: operator, causing EOF to change into 255
5776 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5780 sv_catpvn(sv, (char *) buf, cnt);
5782 sv_setpvn(sv, (char *) buf, cnt);
5784 if (i != EOF && /* joy */
5786 SvCUR(sv) < rslen ||
5787 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5791 * If we're reading from a TTY and we get a short read,
5792 * indicating that the user hit his EOF character, we need
5793 * to notice it now, because if we try to read from the TTY
5794 * again, the EOF condition will disappear.
5796 * The comparison of cnt to sizeof(buf) is an optimization
5797 * that prevents unnecessary calls to feof().
5801 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5806 if (rspara) { /* have to do this both before and after */
5807 while (i != EOF) { /* to make sure file boundaries work right */
5808 i = PerlIO_getc(fp);
5810 PerlIO_ungetc(fp,i);
5816 if (PerlIO_isutf8(fp))
5821 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5827 Auto-increment of the value in the SV, doing string to numeric conversion
5828 if necessary. Handles 'get' magic.
5834 Perl_sv_inc(pTHX_ register SV *sv)
5843 if (SvTHINKFIRST(sv)) {
5844 if (SvREADONLY(sv)) {
5845 if (PL_curcop != &PL_compiling)
5846 Perl_croak(aTHX_ PL_no_modify);
5850 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5852 i = PTR2IV(SvRV(sv));
5857 flags = SvFLAGS(sv);
5858 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5859 /* It's (privately or publicly) a float, but not tested as an
5860 integer, so test it to see. */
5862 flags = SvFLAGS(sv);
5864 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5865 /* It's publicly an integer, or privately an integer-not-float */
5866 #ifdef PERL_PRESERVE_IVUV
5870 if (SvUVX(sv) == UV_MAX)
5871 sv_setnv(sv, UV_MAX_P1);
5873 (void)SvIOK_only_UV(sv);
5876 if (SvIVX(sv) == IV_MAX)
5877 sv_setuv(sv, (UV)IV_MAX + 1);
5879 (void)SvIOK_only(sv);
5885 if (flags & SVp_NOK) {
5886 (void)SvNOK_only(sv);
5891 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5892 if ((flags & SVTYPEMASK) < SVt_PVIV)
5893 sv_upgrade(sv, SVt_IV);
5894 (void)SvIOK_only(sv);
5899 while (isALPHA(*d)) d++;
5900 while (isDIGIT(*d)) d++;
5902 #ifdef PERL_PRESERVE_IVUV
5903 /* Got to punt this as an integer if needs be, but we don't issue
5904 warnings. Probably ought to make the sv_iv_please() that does
5905 the conversion if possible, and silently. */
5906 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
5907 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5908 /* Need to try really hard to see if it's an integer.
5909 9.22337203685478e+18 is an integer.
5910 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5911 so $a="9.22337203685478e+18"; $a+0; $a++
5912 needs to be the same as $a="9.22337203685478e+18"; $a++
5919 /* sv_2iv *should* have made this an NV */
5920 if (flags & SVp_NOK) {
5921 (void)SvNOK_only(sv);
5925 /* I don't think we can get here. Maybe I should assert this
5926 And if we do get here I suspect that sv_setnv will croak. NWC
5928 #if defined(USE_LONG_DOUBLE)
5929 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",
5930 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5932 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5933 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5936 #endif /* PERL_PRESERVE_IVUV */
5937 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5941 while (d >= SvPVX(sv)) {
5949 /* MKS: The original code here died if letters weren't consecutive.
5950 * at least it didn't have to worry about non-C locales. The
5951 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5952 * arranged in order (although not consecutively) and that only
5953 * [A-Za-z] are accepted by isALPHA in the C locale.
5955 if (*d != 'z' && *d != 'Z') {
5956 do { ++*d; } while (!isALPHA(*d));
5959 *(d--) -= 'z' - 'a';
5964 *(d--) -= 'z' - 'a' + 1;
5968 /* oh,oh, the number grew */
5969 SvGROW(sv, SvCUR(sv) + 2);
5971 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5982 Auto-decrement of the value in the SV, doing string to numeric conversion
5983 if necessary. Handles 'get' magic.
5989 Perl_sv_dec(pTHX_ register SV *sv)
5997 if (SvTHINKFIRST(sv)) {
5998 if (SvREADONLY(sv)) {
5999 if (PL_curcop != &PL_compiling)
6000 Perl_croak(aTHX_ PL_no_modify);
6004 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6006 i = PTR2IV(SvRV(sv));
6011 /* Unlike sv_inc we don't have to worry about string-never-numbers
6012 and keeping them magic. But we mustn't warn on punting */
6013 flags = SvFLAGS(sv);
6014 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6015 /* It's publicly an integer, or privately an integer-not-float */
6016 #ifdef PERL_PRESERVE_IVUV
6020 if (SvUVX(sv) == 0) {
6021 (void)SvIOK_only(sv);
6025 (void)SvIOK_only_UV(sv);
6029 if (SvIVX(sv) == IV_MIN)
6030 sv_setnv(sv, (NV)IV_MIN - 1.0);
6032 (void)SvIOK_only(sv);
6038 if (flags & SVp_NOK) {
6040 (void)SvNOK_only(sv);
6043 if (!(flags & SVp_POK)) {
6044 if ((flags & SVTYPEMASK) < SVt_PVNV)
6045 sv_upgrade(sv, SVt_NV);
6047 (void)SvNOK_only(sv);
6050 #ifdef PERL_PRESERVE_IVUV
6052 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
6053 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6054 /* Need to try really hard to see if it's an integer.
6055 9.22337203685478e+18 is an integer.
6056 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6057 so $a="9.22337203685478e+18"; $a+0; $a--
6058 needs to be the same as $a="9.22337203685478e+18"; $a--
6065 /* sv_2iv *should* have made this an NV */
6066 if (flags & SVp_NOK) {
6067 (void)SvNOK_only(sv);
6071 /* I don't think we can get here. Maybe I should assert this
6072 And if we do get here I suspect that sv_setnv will croak. NWC
6074 #if defined(USE_LONG_DOUBLE)
6075 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",
6076 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
6078 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
6079 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
6083 #endif /* PERL_PRESERVE_IVUV */
6084 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
6088 =for apidoc sv_mortalcopy
6090 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
6091 The new SV is marked as mortal. It will be destroyed "soon", either by an
6092 explicit call to FREETMPS, or by an implicit call at places such as
6093 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
6098 /* Make a string that will exist for the duration of the expression
6099 * evaluation. Actually, it may have to last longer than that, but
6100 * hopefully we won't free it until it has been assigned to a
6101 * permanent location. */
6104 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
6109 sv_setsv(sv,oldstr);
6111 PL_tmps_stack[++PL_tmps_ix] = sv;
6117 =for apidoc sv_newmortal
6119 Creates a new null SV which is mortal. The reference count of the SV is
6120 set to 1. It will be destroyed "soon", either by an explicit call to
6121 FREETMPS, or by an implicit call at places such as statement boundaries.
6122 See also C<sv_mortalcopy> and C<sv_2mortal>.
6128 Perl_sv_newmortal(pTHX)
6133 SvFLAGS(sv) = SVs_TEMP;
6135 PL_tmps_stack[++PL_tmps_ix] = sv;
6140 =for apidoc sv_2mortal
6142 Marks an existing SV as mortal. The SV will be destroyed "soon", either
6143 by an explicit call to FREETMPS, or by an implicit call at places such as
6144 statement boundaries. See also C<sv_newmortal> and C<sv_mortalcopy>.
6150 Perl_sv_2mortal(pTHX_ register SV *sv)
6154 if (SvREADONLY(sv) && SvIMMORTAL(sv))
6157 PL_tmps_stack[++PL_tmps_ix] = sv;
6165 Creates a new SV and copies a string into it. The reference count for the
6166 SV is set to 1. If C<len> is zero, Perl will compute the length using
6167 strlen(). For efficiency, consider using C<newSVpvn> instead.
6173 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
6180 sv_setpvn(sv,s,len);
6185 =for apidoc newSVpvn
6187 Creates a new SV and copies a string into it. The reference count for the
6188 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
6189 string. You are responsible for ensuring that the source string is at least
6196 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
6201 sv_setpvn(sv,s,len);
6206 =for apidoc newSVpvn_share
6208 Creates a new SV with its SvPVX pointing to a shared string in the string
6209 table. If the string does not already exist in the table, it is created
6210 first. Turns on READONLY and FAKE. The string's hash is stored in the UV
6211 slot of the SV; if the C<hash> parameter is non-zero, that value is used;
6212 otherwise the hash is computed. The idea here is that as the string table
6213 is used for shared hash keys these strings will have SvPVX == HeKEY and
6214 hash lookup will avoid string compare.
6220 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
6223 bool is_utf8 = FALSE;
6225 STRLEN tmplen = -len;
6227 /* See the note in hv.c:hv_fetch() --jhi */
6228 src = (char*)bytes_from_utf8((U8*)src, &tmplen, &is_utf8);
6232 PERL_HASH(hash, src, len);
6234 sv_upgrade(sv, SVt_PVIV);
6235 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
6248 #if defined(PERL_IMPLICIT_CONTEXT)
6250 /* pTHX_ magic can't cope with varargs, so this is a no-context
6251 * version of the main function, (which may itself be aliased to us).
6252 * Don't access this version directly.
6256 Perl_newSVpvf_nocontext(const char* pat, ...)
6261 va_start(args, pat);
6262 sv = vnewSVpvf(pat, &args);
6269 =for apidoc newSVpvf
6271 Creates a new SV and initializes it with the string formatted like
6278 Perl_newSVpvf(pTHX_ const char* pat, ...)
6282 va_start(args, pat);
6283 sv = vnewSVpvf(pat, &args);
6288 /* backend for newSVpvf() and newSVpvf_nocontext() */
6291 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
6295 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6302 Creates a new SV and copies a floating point value into it.
6303 The reference count for the SV is set to 1.
6309 Perl_newSVnv(pTHX_ NV n)
6321 Creates a new SV and copies an integer into it. The reference count for the
6328 Perl_newSViv(pTHX_ IV i)
6340 Creates a new SV and copies an unsigned integer into it.
6341 The reference count for the SV is set to 1.
6347 Perl_newSVuv(pTHX_ UV u)
6357 =for apidoc newRV_noinc
6359 Creates an RV wrapper for an SV. The reference count for the original
6360 SV is B<not> incremented.
6366 Perl_newRV_noinc(pTHX_ SV *tmpRef)
6371 sv_upgrade(sv, SVt_RV);
6378 /* newRV_inc is the official function name to use now.
6379 * newRV_inc is in fact #defined to newRV in sv.h
6383 Perl_newRV(pTHX_ SV *tmpRef)
6385 return newRV_noinc(SvREFCNT_inc(tmpRef));
6391 Creates a new SV which is an exact duplicate of the original SV.
6398 Perl_newSVsv(pTHX_ register SV *old)
6404 if (SvTYPE(old) == SVTYPEMASK) {
6405 if (ckWARN_d(WARN_INTERNAL))
6406 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
6421 =for apidoc sv_reset
6423 Underlying implementation for the C<reset> Perl function.
6424 Note that the perl-level function is vaguely deprecated.
6430 Perl_sv_reset(pTHX_ register char *s, HV *stash)
6438 char todo[PERL_UCHAR_MAX+1];
6443 if (!*s) { /* reset ?? searches */
6444 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
6445 pm->op_pmdynflags &= ~PMdf_USED;
6450 /* reset variables */
6452 if (!HvARRAY(stash))
6455 Zero(todo, 256, char);
6457 i = (unsigned char)*s;
6461 max = (unsigned char)*s++;
6462 for ( ; i <= max; i++) {
6465 for (i = 0; i <= (I32) HvMAX(stash); i++) {
6466 for (entry = HvARRAY(stash)[i];
6468 entry = HeNEXT(entry))
6470 if (!todo[(U8)*HeKEY(entry)])
6472 gv = (GV*)HeVAL(entry);
6474 if (SvTHINKFIRST(sv)) {
6475 if (!SvREADONLY(sv) && SvROK(sv))
6480 if (SvTYPE(sv) >= SVt_PV) {
6482 if (SvPVX(sv) != Nullch)
6489 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
6491 #ifdef USE_ENVIRON_ARRAY
6493 environ[0] = Nullch;
6504 Using various gambits, try to get an IO from an SV: the IO slot if its a
6505 GV; or the recursive result if we're an RV; or the IO slot of the symbol
6506 named after the PV if we're a string.
6512 Perl_sv_2io(pTHX_ SV *sv)
6518 switch (SvTYPE(sv)) {
6526 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
6530 Perl_croak(aTHX_ PL_no_usym, "filehandle");
6532 return sv_2io(SvRV(sv));
6533 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
6539 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
6548 Using various gambits, try to get a CV from an SV; in addition, try if
6549 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
6555 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
6562 return *gvp = Nullgv, Nullcv;
6563 switch (SvTYPE(sv)) {
6582 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
6583 tryAMAGICunDEREF(to_cv);
6586 if (SvTYPE(sv) == SVt_PVCV) {
6595 Perl_croak(aTHX_ "Not a subroutine reference");
6600 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
6606 if (lref && !GvCVu(gv)) {
6609 tmpsv = NEWSV(704,0);
6610 gv_efullname3(tmpsv, gv, Nullch);
6611 /* XXX this is probably not what they think they're getting.
6612 * It has the same effect as "sub name;", i.e. just a forward
6614 newSUB(start_subparse(FALSE, 0),
6615 newSVOP(OP_CONST, 0, tmpsv),
6620 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
6629 Returns true if the SV has a true value by Perl's rules.
6630 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
6631 instead use an in-line version.
6637 Perl_sv_true(pTHX_ register SV *sv)
6643 if ((tXpv = (XPV*)SvANY(sv)) &&
6644 (tXpv->xpv_cur > 1 ||
6645 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
6652 return SvIVX(sv) != 0;
6655 return SvNVX(sv) != 0.0;
6657 return sv_2bool(sv);
6665 A private implementation of the C<SvIVx> macro for compilers which can't
6666 cope with complex macro expressions. Always use the macro instead.
6672 Perl_sv_iv(pTHX_ register SV *sv)
6676 return (IV)SvUVX(sv);
6685 A private implementation of the C<SvUVx> macro for compilers which can't
6686 cope with complex macro expressions. Always use the macro instead.
6692 Perl_sv_uv(pTHX_ register SV *sv)
6697 return (UV)SvIVX(sv);
6705 A private implementation of the C<SvNVx> macro for compilers which can't
6706 cope with complex macro expressions. Always use the macro instead.
6712 Perl_sv_nv(pTHX_ register SV *sv)
6722 A private implementation of the C<SvPV_nolen> macro for compilers which can't
6723 cope with complex macro expressions. Always use the macro instead.
6729 Perl_sv_pv(pTHX_ SV *sv)
6736 return sv_2pv(sv, &n_a);
6742 A private implementation of the C<SvPV> macro for compilers which can't
6743 cope with complex macro expressions. Always use the macro instead.
6749 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6755 return sv_2pv(sv, lp);
6758 /* For -DCRIPPLED_CC only. See also C<sv_2pv_flags()>.
6762 Perl_sv_pvn_nomg(pTHX_ register SV *sv, STRLEN *lp)
6768 return sv_2pv_flags(sv, lp, 0);
6772 =for apidoc sv_pvn_force
6774 Get a sensible string out of the SV somehow.
6775 A private implementation of the C<SvPV_force> macro for compilers which
6776 can't cope with complex macro expressions. Always use the macro instead.
6782 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6784 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
6788 =for apidoc sv_pvn_force_flags
6790 Get a sensible string out of the SV somehow.
6791 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
6792 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
6793 implemented in terms of this function.
6794 You normally want to use the various wrapper macros instead: see
6795 C<SvPV_force> and C<SvPV_force_nomg>
6801 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
6805 if (SvTHINKFIRST(sv) && !SvROK(sv))
6806 sv_force_normal(sv);
6812 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6813 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6817 s = sv_2pv_flags(sv, lp, flags);
6818 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6823 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6824 SvGROW(sv, len + 1);
6825 Move(s,SvPVX(sv),len,char);
6830 SvPOK_on(sv); /* validate pointer */
6832 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6833 PTR2UV(sv),SvPVX(sv)));
6840 =for apidoc sv_pvbyte
6842 A private implementation of the C<SvPVbyte_nolen> macro for compilers
6843 which can't cope with complex macro expressions. Always use the macro
6850 Perl_sv_pvbyte(pTHX_ SV *sv)
6852 sv_utf8_downgrade(sv,0);
6857 =for apidoc sv_pvbyten
6859 A private implementation of the C<SvPVbyte> macro for compilers
6860 which can't cope with complex macro expressions. Always use the macro
6867 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6869 sv_utf8_downgrade(sv,0);
6870 return sv_pvn(sv,lp);
6874 =for apidoc sv_pvbyten_force
6876 A private implementation of the C<SvPVbytex_force> macro for compilers
6877 which can't cope with complex macro expressions. Always use the macro
6884 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6886 sv_utf8_downgrade(sv,0);
6887 return sv_pvn_force(sv,lp);
6891 =for apidoc sv_pvutf8
6893 A private implementation of the C<SvPVutf8_nolen> macro for compilers
6894 which can't cope with complex macro expressions. Always use the macro
6901 Perl_sv_pvutf8(pTHX_ SV *sv)
6903 sv_utf8_upgrade(sv);
6908 =for apidoc sv_pvutf8n
6910 A private implementation of the C<SvPVutf8> macro for compilers
6911 which can't cope with complex macro expressions. Always use the macro
6918 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6920 sv_utf8_upgrade(sv);
6921 return sv_pvn(sv,lp);
6925 =for apidoc sv_pvutf8n_force
6927 A private implementation of the C<SvPVutf8_force> macro for compilers
6928 which can't cope with complex macro expressions. Always use the macro
6935 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6937 sv_utf8_upgrade(sv);
6938 return sv_pvn_force(sv,lp);
6942 =for apidoc sv_reftype
6944 Returns a string describing what the SV is a reference to.
6950 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6952 if (ob && SvOBJECT(sv)) {
6953 HV *svs = SvSTASH(sv);
6954 /* [20011101.072] This bandaid for C<package;> should eventually
6955 be removed. AMS 20011103 */
6956 return (svs ? HvNAME(svs) : "<none>");
6959 switch (SvTYPE(sv)) {
6973 case SVt_PVLV: return "LVALUE";
6974 case SVt_PVAV: return "ARRAY";
6975 case SVt_PVHV: return "HASH";
6976 case SVt_PVCV: return "CODE";
6977 case SVt_PVGV: return "GLOB";
6978 case SVt_PVFM: return "FORMAT";
6979 case SVt_PVIO: return "IO";
6980 default: return "UNKNOWN";
6986 =for apidoc sv_isobject
6988 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6989 object. If the SV is not an RV, or if the object is not blessed, then this
6996 Perl_sv_isobject(pTHX_ SV *sv)
7013 Returns a boolean indicating whether the SV is blessed into the specified
7014 class. This does not check for subtypes; use C<sv_derived_from> to verify
7015 an inheritance relationship.
7021 Perl_sv_isa(pTHX_ SV *sv, const char *name)
7033 return strEQ(HvNAME(SvSTASH(sv)), name);
7039 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
7040 it will be upgraded to one. If C<classname> is non-null then the new SV will
7041 be blessed in the specified package. The new SV is returned and its
7042 reference count is 1.
7048 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
7054 SV_CHECK_THINKFIRST(rv);
7057 if (SvTYPE(rv) >= SVt_PVMG) {
7058 U32 refcnt = SvREFCNT(rv);
7062 SvREFCNT(rv) = refcnt;
7065 if (SvTYPE(rv) < SVt_RV)
7066 sv_upgrade(rv, SVt_RV);
7067 else if (SvTYPE(rv) > SVt_RV) {
7068 (void)SvOOK_off(rv);
7069 if (SvPVX(rv) && SvLEN(rv))
7070 Safefree(SvPVX(rv));
7080 HV* stash = gv_stashpv(classname, TRUE);
7081 (void)sv_bless(rv, stash);
7087 =for apidoc sv_setref_pv
7089 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
7090 argument will be upgraded to an RV. That RV will be modified to point to
7091 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7092 into the SV. The C<classname> argument indicates the package for the
7093 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7094 will be returned and will have a reference count of 1.
7096 Do not use with other Perl types such as HV, AV, SV, CV, because those
7097 objects will become corrupted by the pointer copy process.
7099 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7105 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
7108 sv_setsv(rv, &PL_sv_undef);
7112 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
7117 =for apidoc sv_setref_iv
7119 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
7120 argument will be upgraded to an RV. That RV will be modified to point to
7121 the new SV. The C<classname> argument indicates the package for the
7122 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7123 will be returned and will have a reference count of 1.
7129 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
7131 sv_setiv(newSVrv(rv,classname), iv);
7136 =for apidoc sv_setref_uv
7138 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
7139 argument will be upgraded to an RV. That RV will be modified to point to
7140 the new SV. The C<classname> argument indicates the package for the
7141 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7142 will be returned and will have a reference count of 1.
7148 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7150 sv_setuv(newSVrv(rv,classname), uv);
7155 =for apidoc sv_setref_nv
7157 Copies a double into a new SV, optionally blessing the SV. The C<rv>
7158 argument will be upgraded to an RV. That RV will be modified to point to
7159 the new SV. The C<classname> argument indicates the package for the
7160 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
7161 will be returned and will have a reference count of 1.
7167 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
7169 sv_setnv(newSVrv(rv,classname), nv);
7174 =for apidoc sv_setref_pvn
7176 Copies a string into a new SV, optionally blessing the SV. The length of the
7177 string must be specified with C<n>. The C<rv> argument will be upgraded to
7178 an RV. That RV will be modified to point to the new SV. The C<classname>
7179 argument indicates the package for the blessing. Set C<classname> to
7180 C<Nullch> to avoid the blessing. The new SV will be returned and will have
7181 a reference count of 1.
7183 Note that C<sv_setref_pv> copies the pointer while this copies the string.
7189 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
7191 sv_setpvn(newSVrv(rv,classname), pv, n);
7196 =for apidoc sv_bless
7198 Blesses an SV into a specified package. The SV must be an RV. The package
7199 must be designated by its stash (see C<gv_stashpv()>). The reference count
7200 of the SV is unaffected.
7206 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
7210 Perl_croak(aTHX_ "Can't bless non-reference value");
7212 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
7213 if (SvREADONLY(tmpRef))
7214 Perl_croak(aTHX_ PL_no_modify);
7215 if (SvOBJECT(tmpRef)) {
7216 if (SvTYPE(tmpRef) != SVt_PVIO)
7218 SvREFCNT_dec(SvSTASH(tmpRef));
7221 SvOBJECT_on(tmpRef);
7222 if (SvTYPE(tmpRef) != SVt_PVIO)
7224 (void)SvUPGRADE(tmpRef, SVt_PVMG);
7225 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
7232 if(SvSMAGICAL(tmpRef))
7233 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
7241 /* Downgrades a PVGV to a PVMG.
7243 * XXX This function doesn't actually appear to be used anywhere
7248 S_sv_unglob(pTHX_ SV *sv)
7252 assert(SvTYPE(sv) == SVt_PVGV);
7257 SvREFCNT_dec(GvSTASH(sv));
7258 GvSTASH(sv) = Nullhv;
7260 sv_unmagic(sv, PERL_MAGIC_glob);
7261 Safefree(GvNAME(sv));
7264 /* need to keep SvANY(sv) in the right arena */
7265 xpvmg = new_XPVMG();
7266 StructCopy(SvANY(sv), xpvmg, XPVMG);
7267 del_XPVGV(SvANY(sv));
7270 SvFLAGS(sv) &= ~SVTYPEMASK;
7271 SvFLAGS(sv) |= SVt_PVMG;
7275 =for apidoc sv_unref_flags
7277 Unsets the RV status of the SV, and decrements the reference count of
7278 whatever was being referenced by the RV. This can almost be thought of
7279 as a reversal of C<newSVrv>. The C<cflags> argument can contain
7280 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
7281 (otherwise the decrementing is conditional on the reference count being
7282 different from one or the reference being a readonly SV).
7289 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
7293 if (SvWEAKREF(sv)) {
7301 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
7303 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
7304 sv_2mortal(rv); /* Schedule for freeing later */
7308 =for apidoc sv_unref
7310 Unsets the RV status of the SV, and decrements the reference count of
7311 whatever was being referenced by the RV. This can almost be thought of
7312 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
7313 being zero. See C<SvROK_off>.
7319 Perl_sv_unref(pTHX_ SV *sv)
7321 sv_unref_flags(sv, 0);
7325 =for apidoc sv_taint
7327 Taint an SV. Use C<SvTAINTED_on> instead.
7332 Perl_sv_taint(pTHX_ SV *sv)
7334 sv_magic((sv), Nullsv, PERL_MAGIC_taint, Nullch, 0);
7338 =for apidoc sv_untaint
7340 Untaint an SV. Use C<SvTAINTED_off> instead.
7345 Perl_sv_untaint(pTHX_ SV *sv)
7347 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
7348 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
7355 =for apidoc sv_tainted
7357 Test an SV for taintedness. Use C<SvTAINTED> instead.
7362 Perl_sv_tainted(pTHX_ SV *sv)
7364 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
7365 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
7366 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
7373 =for apidoc sv_setpviv
7375 Copies an integer into the given SV, also updating its string value.
7376 Does not handle 'set' magic. See C<sv_setpviv_mg>.
7382 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
7384 char buf[TYPE_CHARS(UV)];
7386 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
7388 sv_setpvn(sv, ptr, ebuf - ptr);
7392 =for apidoc sv_setpviv_mg
7394 Like C<sv_setpviv>, but also handles 'set' magic.
7400 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
7402 char buf[TYPE_CHARS(UV)];
7404 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
7406 sv_setpvn(sv, ptr, ebuf - ptr);
7410 #if defined(PERL_IMPLICIT_CONTEXT)
7412 /* pTHX_ magic can't cope with varargs, so this is a no-context
7413 * version of the main function, (which may itself be aliased to us).
7414 * Don't access this version directly.
7418 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
7422 va_start(args, pat);
7423 sv_vsetpvf(sv, pat, &args);
7427 /* pTHX_ magic can't cope with varargs, so this is a no-context
7428 * version of the main function, (which may itself be aliased to us).
7429 * Don't access this version directly.
7433 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
7437 va_start(args, pat);
7438 sv_vsetpvf_mg(sv, pat, &args);
7444 =for apidoc sv_setpvf
7446 Processes its arguments like C<sprintf> and sets an SV to the formatted
7447 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
7453 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
7456 va_start(args, pat);
7457 sv_vsetpvf(sv, pat, &args);
7461 /* backend for C<sv_setpvf> and C<sv_setpvf_nocontext> */
7464 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
7466 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7470 =for apidoc sv_setpvf_mg
7472 Like C<sv_setpvf>, but also handles 'set' magic.
7478 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
7481 va_start(args, pat);
7482 sv_vsetpvf_mg(sv, pat, &args);
7486 /* backend for C<sv_setpvf_mg> C<setpvf_mg_nocontext> */
7489 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
7491 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7495 #if defined(PERL_IMPLICIT_CONTEXT)
7497 /* pTHX_ magic can't cope with varargs, so this is a no-context
7498 * version of the main function, (which may itself be aliased to us).
7499 * Don't access this version directly.
7503 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
7507 va_start(args, pat);
7508 sv_vcatpvf(sv, pat, &args);
7512 /* pTHX_ magic can't cope with varargs, so this is a no-context
7513 * version of the main function, (which may itself be aliased to us).
7514 * Don't access this version directly.
7518 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
7522 va_start(args, pat);
7523 sv_vcatpvf_mg(sv, pat, &args);
7529 =for apidoc sv_catpvf
7531 Processes its arguments like C<sprintf> and appends the formatted
7532 output to an SV. If the appended data contains "wide" characters
7533 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
7534 and characters >255 formatted with %c), the original SV might get
7535 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic.
7536 C<SvSETMAGIC()> must typically be called after calling this function
7537 to handle 'set' magic.
7542 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
7545 va_start(args, pat);
7546 sv_vcatpvf(sv, pat, &args);
7550 /* backend for C<sv_catpvf> and C<catpvf_mg_nocontext> */
7553 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
7555 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7559 =for apidoc sv_catpvf_mg
7561 Like C<sv_catpvf>, but also handles 'set' magic.
7567 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
7570 va_start(args, pat);
7571 sv_vcatpvf_mg(sv, pat, &args);
7575 /* backend for C<catpvf_mg> and C<catpvf_mg_nocontext> */
7578 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
7580 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7585 =for apidoc sv_vsetpvfn
7587 Works like C<vcatpvfn> but copies the text into the SV instead of
7590 Usually used via one of its frontends C<sv_setpvf> and C<sv_setpvf_mg>.
7596 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
7598 sv_setpvn(sv, "", 0);
7599 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
7602 /* private function for use in sv_vcatpvfn via the EXPECT_NUMBER macro */
7605 S_expect_number(pTHX_ char** pattern)
7608 switch (**pattern) {
7609 case '1': case '2': case '3':
7610 case '4': case '5': case '6':
7611 case '7': case '8': case '9':
7612 while (isDIGIT(**pattern))
7613 var = var * 10 + (*(*pattern)++ - '0');
7617 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
7620 =for apidoc sv_vcatpvfn
7622 Processes its arguments like C<vsprintf> and appends the formatted output
7623 to an SV. Uses an array of SVs if the C style variable argument list is
7624 missing (NULL). When running with taint checks enabled, indicates via
7625 C<maybe_tainted> if results are untrustworthy (often due to the use of
7628 Usually used via one of its frontends C<sv_catpvf> and C<sv_catpvf_mg>.
7634 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
7641 static char nullstr[] = "(null)";
7644 /* no matter what, this is a string now */
7645 (void)SvPV_force(sv, origlen);
7647 /* special-case "", "%s", and "%_" */
7650 if (patlen == 2 && pat[0] == '%') {
7654 char *s = va_arg(*args, char*);
7655 sv_catpv(sv, s ? s : nullstr);
7657 else if (svix < svmax) {
7658 sv_catsv(sv, *svargs);
7659 if (DO_UTF8(*svargs))
7665 argsv = va_arg(*args, SV*);
7666 sv_catsv(sv, argsv);
7671 /* See comment on '_' below */
7676 patend = (char*)pat + patlen;
7677 for (p = (char*)pat; p < patend; p = q) {
7680 bool vectorize = FALSE;
7681 bool vectorarg = FALSE;
7682 bool vec_utf = FALSE;
7688 bool has_precis = FALSE;
7690 bool is_utf = FALSE;
7693 U8 utf8buf[UTF8_MAXLEN+1];
7694 STRLEN esignlen = 0;
7696 char *eptr = Nullch;
7698 /* Times 4: a decimal digit takes more than 3 binary digits.
7699 * NV_DIG: mantissa takes than many decimal digits.
7700 * Plus 32: Playing safe. */
7701 char ebuf[IV_DIG * 4 + NV_DIG + 32];
7702 /* large enough for "%#.#f" --chip */
7703 /* what about long double NVs? --jhi */
7706 U8 *vecstr = Null(U8*);
7718 STRLEN dotstrlen = 1;
7719 I32 efix = 0; /* explicit format parameter index */
7720 I32 ewix = 0; /* explicit width index */
7721 I32 epix = 0; /* explicit precision index */
7722 I32 evix = 0; /* explicit vector index */
7723 bool asterisk = FALSE;
7725 /* echo everything up to the next format specification */
7726 for (q = p; q < patend && *q != '%'; ++q) ;
7728 sv_catpvn(sv, p, q - p);
7735 We allow format specification elements in this order:
7736 \d+\$ explicit format parameter index
7738 \*?(\d+\$)?v vector with optional (optionally specified) arg
7739 \d+|\*(\d+\$)? width using optional (optionally specified) arg
7740 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
7742 [%bcdefginopsux_DFOUX] format (mandatory)
7744 if (EXPECT_NUMBER(q, width)) {
7785 if (EXPECT_NUMBER(q, ewix))
7794 if ((vectorarg = asterisk)) {
7804 EXPECT_NUMBER(q, width);
7809 vecsv = va_arg(*args, SV*);
7811 vecsv = (evix ? evix <= svmax : svix < svmax) ?
7812 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
7813 dotstr = SvPVx(vecsv, dotstrlen);
7818 vecsv = va_arg(*args, SV*);
7819 vecstr = (U8*)SvPVx(vecsv,veclen);
7820 vec_utf = DO_UTF8(vecsv);
7822 else if (efix ? efix <= svmax : svix < svmax) {
7823 vecsv = svargs[efix ? efix-1 : svix++];
7824 vecstr = (U8*)SvPVx(vecsv,veclen);
7825 vec_utf = DO_UTF8(vecsv);
7835 i = va_arg(*args, int);
7837 i = (ewix ? ewix <= svmax : svix < svmax) ?
7838 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7840 width = (i < 0) ? -i : i;
7850 if (EXPECT_NUMBER(q, epix) && *q++ != '$') /* epix currently unused */
7853 i = va_arg(*args, int);
7855 i = (ewix ? ewix <= svmax : svix < svmax)
7856 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7857 precis = (i < 0) ? 0 : i;
7862 precis = precis * 10 + (*q++ - '0');
7870 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7881 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7882 if (*(q + 1) == 'l') { /* lld, llf */
7905 argsv = (efix ? efix <= svmax : svix < svmax) ?
7906 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7913 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7915 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
7917 eptr = (char*)utf8buf;
7918 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
7930 eptr = va_arg(*args, char*);
7932 #ifdef MACOS_TRADITIONAL
7933 /* On MacOS, %#s format is used for Pascal strings */
7938 elen = strlen(eptr);
7941 elen = sizeof nullstr - 1;
7945 eptr = SvPVx(argsv, elen);
7946 if (DO_UTF8(argsv)) {
7947 if (has_precis && precis < elen) {
7949 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7952 if (width) { /* fudge width (can't fudge elen) */
7953 width += elen - sv_len_utf8(argsv);
7962 * The "%_" hack might have to be changed someday,
7963 * if ISO or ANSI decide to use '_' for something.
7964 * So we keep it hidden from users' code.
7968 argsv = va_arg(*args, SV*);
7969 eptr = SvPVx(argsv, elen);
7975 if (has_precis && elen > precis)
7984 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
8002 uv = utf8n_to_uvchr(vecstr, veclen, &ulen, UTF8_ALLOW_ANYUV);
8010 esignbuf[esignlen++] = plus;
8014 case 'h': iv = (short)va_arg(*args, int); break;
8015 default: iv = va_arg(*args, int); break;
8016 case 'l': iv = va_arg(*args, long); break;
8017 case 'V': iv = va_arg(*args, IV); break;
8019 case 'q': iv = va_arg(*args, Quad_t); break;
8026 case 'h': iv = (short)iv; break;
8028 case 'l': iv = (long)iv; break;
8031 case 'q': iv = (Quad_t)iv; break;
8035 if ( !vectorize ) /* we already set uv above */
8040 esignbuf[esignlen++] = plus;
8044 esignbuf[esignlen++] = '-';
8087 uv = utf8n_to_uvchr(vecstr, veclen, &ulen, UTF8_ALLOW_ANYUV);
8097 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
8098 default: uv = va_arg(*args, unsigned); break;
8099 case 'l': uv = va_arg(*args, unsigned long); break;
8100 case 'V': uv = va_arg(*args, UV); break;
8102 case 'q': uv = va_arg(*args, Quad_t); break;
8109 case 'h': uv = (unsigned short)uv; break;
8111 case 'l': uv = (unsigned long)uv; break;
8114 case 'q': uv = (Quad_t)uv; break;
8120 eptr = ebuf + sizeof ebuf;
8126 p = (char*)((c == 'X')
8127 ? "0123456789ABCDEF" : "0123456789abcdef");
8133 esignbuf[esignlen++] = '0';
8134 esignbuf[esignlen++] = c; /* 'x' or 'X' */
8140 *--eptr = '0' + dig;
8142 if (alt && *eptr != '0')
8148 *--eptr = '0' + dig;
8151 esignbuf[esignlen++] = '0';
8152 esignbuf[esignlen++] = 'b';
8155 default: /* it had better be ten or less */
8156 #if defined(PERL_Y2KWARN)
8157 if (ckWARN(WARN_Y2K)) {
8159 char *s = SvPV(sv,n);
8160 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
8161 && (n == 2 || !isDIGIT(s[n-3])))
8163 Perl_warner(aTHX_ WARN_Y2K,
8164 "Possible Y2K bug: %%%c %s",
8165 c, "format string following '19'");
8171 *--eptr = '0' + dig;
8172 } while (uv /= base);
8175 elen = (ebuf + sizeof ebuf) - eptr;
8178 zeros = precis - elen;
8179 else if (precis == 0 && elen == 1 && *eptr == '0')
8184 /* FLOATING POINT */
8187 c = 'f'; /* maybe %F isn't supported here */
8193 /* This is evil, but floating point is even more evil */
8196 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
8199 if (c != 'e' && c != 'E') {
8201 (void)Perl_frexp(nv, &i);
8202 if (i == PERL_INT_MIN)
8203 Perl_die(aTHX_ "panic: frexp");
8205 need = BIT_DIGITS(i);
8207 need += has_precis ? precis : 6; /* known default */
8211 need += 20; /* fudge factor */
8212 if (PL_efloatsize < need) {
8213 Safefree(PL_efloatbuf);
8214 PL_efloatsize = need + 20; /* more fudge */
8215 New(906, PL_efloatbuf, PL_efloatsize, char);
8216 PL_efloatbuf[0] = '\0';
8219 eptr = ebuf + sizeof ebuf;
8222 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
8224 /* Copy the one or more characters in a long double
8225 * format before the 'base' ([efgEFG]) character to
8226 * the format string. */
8227 static char const prifldbl[] = PERL_PRIfldbl;
8228 char const *p = prifldbl + sizeof(prifldbl) - 3;
8229 while (p >= prifldbl) { *--eptr = *p--; }
8234 do { *--eptr = '0' + (base % 10); } while (base /= 10);
8239 do { *--eptr = '0' + (base % 10); } while (base /= 10);
8251 /* No taint. Otherwise we are in the strange situation
8252 * where printf() taints but print($float) doesn't.
8254 (void)sprintf(PL_efloatbuf, eptr, nv);
8256 eptr = PL_efloatbuf;
8257 elen = strlen(PL_efloatbuf);
8264 i = SvCUR(sv) - origlen;
8267 case 'h': *(va_arg(*args, short*)) = i; break;
8268 default: *(va_arg(*args, int*)) = i; break;
8269 case 'l': *(va_arg(*args, long*)) = i; break;
8270 case 'V': *(va_arg(*args, IV*)) = i; break;
8272 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
8277 sv_setuv_mg(argsv, (UV)i);
8278 continue; /* not "break" */
8285 if (!args && ckWARN(WARN_PRINTF) &&
8286 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
8287 SV *msg = sv_newmortal();
8288 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
8289 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
8292 Perl_sv_catpvf(aTHX_ msg,
8293 "\"%%%c\"", c & 0xFF);
8295 Perl_sv_catpvf(aTHX_ msg,
8296 "\"%%\\%03"UVof"\"",
8299 sv_catpv(msg, "end of string");
8300 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
8303 /* output mangled stuff ... */
8309 /* ... right here, because formatting flags should not apply */
8310 SvGROW(sv, SvCUR(sv) + elen + 1);
8312 Copy(eptr, p, elen, char);
8315 SvCUR(sv) = p - SvPVX(sv);
8316 continue; /* not "break" */
8319 have = esignlen + zeros + elen;
8320 need = (have > width ? have : width);
8323 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
8325 if (esignlen && fill == '0') {
8326 for (i = 0; i < esignlen; i++)
8330 memset(p, fill, gap);
8333 if (esignlen && fill != '0') {
8334 for (i = 0; i < esignlen; i++)
8338 for (i = zeros; i; i--)
8342 Copy(eptr, p, elen, char);
8346 memset(p, ' ', gap);
8351 Copy(dotstr, p, dotstrlen, char);
8355 vectorize = FALSE; /* done iterating over vecstr */
8360 SvCUR(sv) = p - SvPVX(sv);
8368 /* =========================================================================
8370 =head1 Cloning an interpreter
8372 All the macros and functions in this section are for the private use of
8373 the main function, perl_clone().
8375 The foo_dup() functions make an exact copy of an existing foo thinngy.
8376 During the course of a cloning, a hash table is used to map old addresses
8377 to new addresses. The table is created and manipulated with the
8378 ptr_table_* functions.
8382 ============================================================================*/
8385 #if defined(USE_ITHREADS)
8387 #if defined(USE_5005THREADS)
8388 # include "error: USE_5005THREADS and USE_ITHREADS are incompatible"
8391 #ifndef GpREFCNT_inc
8392 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
8396 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
8397 #define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
8398 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
8399 #define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
8400 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
8401 #define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
8402 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
8403 #define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
8404 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
8405 #define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
8406 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
8407 #define SAVEPV(p) (p ? savepv(p) : Nullch)
8408 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
8411 /* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
8412 regcomp.c. AMS 20010712 */
8415 Perl_re_dup(pTHX_ REGEXP *r, CLONE_PARAMS *param)
8419 struct reg_substr_datum *s;
8422 return (REGEXP *)NULL;
8424 if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
8427 len = r->offsets[0];
8428 npar = r->nparens+1;
8430 Newc(0, ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
8431 Copy(r->program, ret->program, len+1, regnode);
8433 New(0, ret->startp, npar, I32);
8434 Copy(r->startp, ret->startp, npar, I32);
8435 New(0, ret->endp, npar, I32);
8436 Copy(r->startp, ret->startp, npar, I32);
8438 New(0, ret->substrs, 1, struct reg_substr_data);
8439 for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
8440 s->min_offset = r->substrs->data[i].min_offset;
8441 s->max_offset = r->substrs->data[i].max_offset;
8442 s->substr = sv_dup_inc(r->substrs->data[i].substr, param);
8445 ret->regstclass = NULL;
8448 int count = r->data->count;
8450 Newc(0, d, sizeof(struct reg_data) + count*sizeof(void *),
8451 char, struct reg_data);
8452 New(0, d->what, count, U8);
8455 for (i = 0; i < count; i++) {
8456 d->what[i] = r->data->what[i];
8457 switch (d->what[i]) {
8459 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
8462 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
8465 /* This is cheating. */
8466 New(0, d->data[i], 1, struct regnode_charclass_class);
8467 StructCopy(r->data->data[i], d->data[i],
8468 struct regnode_charclass_class);
8469 ret->regstclass = (regnode*)d->data[i];
8472 /* Compiled op trees are readonly, and can thus be
8473 shared without duplication. */
8474 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
8477 d->data[i] = r->data->data[i];
8487 New(0, ret->offsets, 2*len+1, U32);
8488 Copy(r->offsets, ret->offsets, 2*len+1, U32);
8490 ret->precomp = SAVEPV(r->precomp);
8491 ret->refcnt = r->refcnt;
8492 ret->minlen = r->minlen;
8493 ret->prelen = r->prelen;
8494 ret->nparens = r->nparens;
8495 ret->lastparen = r->lastparen;
8496 ret->lastcloseparen = r->lastcloseparen;
8497 ret->reganch = r->reganch;
8499 ret->sublen = r->sublen;
8501 if (RX_MATCH_COPIED(ret))
8502 ret->subbeg = SAVEPV(r->subbeg);
8504 ret->subbeg = Nullch;
8506 ptr_table_store(PL_ptr_table, r, ret);
8510 /* duplicate a file handle */
8513 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
8517 return (PerlIO*)NULL;
8519 /* look for it in the table first */
8520 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
8524 /* create anew and remember what it is */
8525 ret = PerlIO_fdupopen(aTHX_ fp, param);
8526 ptr_table_store(PL_ptr_table, fp, ret);
8530 /* duplicate a directory handle */
8533 Perl_dirp_dup(pTHX_ DIR *dp)
8541 /* duplicate a typeglob */
8544 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
8549 /* look for it in the table first */
8550 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
8554 /* create anew and remember what it is */
8555 Newz(0, ret, 1, GP);
8556 ptr_table_store(PL_ptr_table, gp, ret);
8559 ret->gp_refcnt = 0; /* must be before any other dups! */
8560 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
8561 ret->gp_io = io_dup_inc(gp->gp_io, param);
8562 ret->gp_form = cv_dup_inc(gp->gp_form, param);
8563 ret->gp_av = av_dup_inc(gp->gp_av, param);
8564 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
8565 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
8566 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
8567 ret->gp_cvgen = gp->gp_cvgen;
8568 ret->gp_flags = gp->gp_flags;
8569 ret->gp_line = gp->gp_line;
8570 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
8574 /* duplicate a chain of magic */
8577 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
8579 MAGIC *mgprev = (MAGIC*)NULL;
8582 return (MAGIC*)NULL;
8583 /* look for it in the table first */
8584 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
8588 for (; mg; mg = mg->mg_moremagic) {
8590 Newz(0, nmg, 1, MAGIC);
8592 mgprev->mg_moremagic = nmg;
8595 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
8596 nmg->mg_private = mg->mg_private;
8597 nmg->mg_type = mg->mg_type;
8598 nmg->mg_flags = mg->mg_flags;
8599 if (mg->mg_type == PERL_MAGIC_qr) {
8600 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
8602 else if(mg->mg_type == PERL_MAGIC_backref) {
8603 AV *av = (AV*) mg->mg_obj;
8606 nmg->mg_obj = (SV*)newAV();
8610 av_push((AV*)nmg->mg_obj,sv_dup(svp[i],param));
8615 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
8616 ? sv_dup_inc(mg->mg_obj, param)
8617 : sv_dup(mg->mg_obj, param);
8619 nmg->mg_len = mg->mg_len;
8620 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
8621 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
8622 if (mg->mg_len >= 0) {
8623 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
8624 if (mg->mg_type == PERL_MAGIC_overload_table &&
8625 AMT_AMAGIC((AMT*)mg->mg_ptr))
8627 AMT *amtp = (AMT*)mg->mg_ptr;
8628 AMT *namtp = (AMT*)nmg->mg_ptr;
8630 for (i = 1; i < NofAMmeth; i++) {
8631 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
8635 else if (mg->mg_len == HEf_SVKEY)
8636 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
8643 /* create a new pointer-mapping table */
8646 Perl_ptr_table_new(pTHX)
8649 Newz(0, tbl, 1, PTR_TBL_t);
8652 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
8656 /* map an existing pointer using a table */
8659 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
8661 PTR_TBL_ENT_t *tblent;
8662 UV hash = PTR2UV(sv);
8664 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
8665 for (; tblent; tblent = tblent->next) {
8666 if (tblent->oldval == sv)
8667 return tblent->newval;
8672 /* add a new entry to a pointer-mapping table */
8675 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
8677 PTR_TBL_ENT_t *tblent, **otblent;
8678 /* XXX this may be pessimal on platforms where pointers aren't good
8679 * hash values e.g. if they grow faster in the most significant
8681 UV hash = PTR2UV(oldv);
8685 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
8686 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
8687 if (tblent->oldval == oldv) {
8688 tblent->newval = newv;
8693 Newz(0, tblent, 1, PTR_TBL_ENT_t);
8694 tblent->oldval = oldv;
8695 tblent->newval = newv;
8696 tblent->next = *otblent;
8699 if (i && tbl->tbl_items > tbl->tbl_max)
8700 ptr_table_split(tbl);
8703 /* double the hash bucket size of an existing ptr table */
8706 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
8708 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
8709 UV oldsize = tbl->tbl_max + 1;
8710 UV newsize = oldsize * 2;
8713 Renew(ary, newsize, PTR_TBL_ENT_t*);
8714 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
8715 tbl->tbl_max = --newsize;
8717 for (i=0; i < oldsize; i++, ary++) {
8718 PTR_TBL_ENT_t **curentp, **entp, *ent;
8721 curentp = ary + oldsize;
8722 for (entp = ary, ent = *ary; ent; ent = *entp) {
8723 if ((newsize & PTR2UV(ent->oldval)) != i) {
8725 ent->next = *curentp;
8735 /* remove all the entries from a ptr table */
8738 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
8740 register PTR_TBL_ENT_t **array;
8741 register PTR_TBL_ENT_t *entry;
8742 register PTR_TBL_ENT_t *oentry = Null(PTR_TBL_ENT_t*);
8746 if (!tbl || !tbl->tbl_items) {
8750 array = tbl->tbl_ary;
8757 entry = entry->next;
8761 if (++riter > max) {
8764 entry = array[riter];
8771 /* clear and free a ptr table */
8774 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
8779 ptr_table_clear(tbl);
8780 Safefree(tbl->tbl_ary);
8788 /* attempt to make everything in the typeglob readonly */
8791 S_gv_share(pTHX_ SV *sstr)
8794 SV *sv = &PL_sv_no; /* just need SvREADONLY-ness */
8796 if (GvIO(gv) || GvFORM(gv)) {
8797 GvUNIQUE_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
8799 else if (!GvCV(gv)) {
8803 /* CvPADLISTs cannot be shared */
8804 if (!CvXSUB(GvCV(gv))) {
8809 if (!GvUNIQUE(gv)) {
8811 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
8812 HvNAME(GvSTASH(gv)), GvNAME(gv));
8818 * write attempts will die with
8819 * "Modification of a read-only value attempted"
8825 SvREADONLY_on(GvSV(gv));
8832 SvREADONLY_on(GvAV(gv));
8839 SvREADONLY_on(GvAV(gv));
8842 return sstr; /* he_dup() will SvREFCNT_inc() */
8845 /* duplicate an SV of any type (including AV, HV etc) */
8848 Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param)
8852 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
8854 /* look for it in the table first */
8855 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
8859 /* create anew and remember what it is */
8861 ptr_table_store(PL_ptr_table, sstr, dstr);
8864 SvFLAGS(dstr) = SvFLAGS(sstr);
8865 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
8866 SvREFCNT(dstr) = 0; /* must be before any other dups! */
8869 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
8870 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
8871 PL_watch_pvx, SvPVX(sstr));
8874 switch (SvTYPE(sstr)) {
8879 SvANY(dstr) = new_XIV();
8880 SvIVX(dstr) = SvIVX(sstr);
8883 SvANY(dstr) = new_XNV();
8884 SvNVX(dstr) = SvNVX(sstr);
8887 SvANY(dstr) = new_XRV();
8888 SvRV(dstr) = SvRV(sstr) && SvWEAKREF(sstr)
8889 ? sv_dup(SvRV(sstr), param)
8890 : sv_dup_inc(SvRV(sstr), param);
8893 SvANY(dstr) = new_XPV();
8894 SvCUR(dstr) = SvCUR(sstr);
8895 SvLEN(dstr) = SvLEN(sstr);
8897 SvRV(dstr) = SvWEAKREF(sstr)
8898 ? sv_dup(SvRV(sstr), param)
8899 : sv_dup_inc(SvRV(sstr), param);
8900 else if (SvPVX(sstr) && SvLEN(sstr))
8901 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8903 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8906 SvANY(dstr) = new_XPVIV();
8907 SvCUR(dstr) = SvCUR(sstr);
8908 SvLEN(dstr) = SvLEN(sstr);
8909 SvIVX(dstr) = SvIVX(sstr);
8911 SvRV(dstr) = SvWEAKREF(sstr)
8912 ? sv_dup(SvRV(sstr), param)
8913 : sv_dup_inc(SvRV(sstr), param);
8914 else if (SvPVX(sstr) && SvLEN(sstr))
8915 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8917 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8920 SvANY(dstr) = new_XPVNV();
8921 SvCUR(dstr) = SvCUR(sstr);
8922 SvLEN(dstr) = SvLEN(sstr);
8923 SvIVX(dstr) = SvIVX(sstr);
8924 SvNVX(dstr) = SvNVX(sstr);
8926 SvRV(dstr) = SvWEAKREF(sstr)
8927 ? sv_dup(SvRV(sstr), param)
8928 : sv_dup_inc(SvRV(sstr), param);
8929 else if (SvPVX(sstr) && SvLEN(sstr))
8930 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8932 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8935 SvANY(dstr) = new_XPVMG();
8936 SvCUR(dstr) = SvCUR(sstr);
8937 SvLEN(dstr) = SvLEN(sstr);
8938 SvIVX(dstr) = SvIVX(sstr);
8939 SvNVX(dstr) = SvNVX(sstr);
8940 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
8941 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
8943 SvRV(dstr) = SvWEAKREF(sstr)
8944 ? sv_dup(SvRV(sstr), param)
8945 : sv_dup_inc(SvRV(sstr), param);
8946 else if (SvPVX(sstr) && SvLEN(sstr))
8947 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8949 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8952 SvANY(dstr) = new_XPVBM();
8953 SvCUR(dstr) = SvCUR(sstr);
8954 SvLEN(dstr) = SvLEN(sstr);
8955 SvIVX(dstr) = SvIVX(sstr);
8956 SvNVX(dstr) = SvNVX(sstr);
8957 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
8958 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
8960 SvRV(dstr) = SvWEAKREF(sstr)
8961 ? sv_dup(SvRV(sstr), param)
8962 : sv_dup_inc(SvRV(sstr), param);
8963 else if (SvPVX(sstr) && SvLEN(sstr))
8964 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8966 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8967 BmRARE(dstr) = BmRARE(sstr);
8968 BmUSEFUL(dstr) = BmUSEFUL(sstr);
8969 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
8972 SvANY(dstr) = new_XPVLV();
8973 SvCUR(dstr) = SvCUR(sstr);
8974 SvLEN(dstr) = SvLEN(sstr);
8975 SvIVX(dstr) = SvIVX(sstr);
8976 SvNVX(dstr) = SvNVX(sstr);
8977 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
8978 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
8980 SvRV(dstr) = SvWEAKREF(sstr)
8981 ? sv_dup(SvRV(sstr), param)
8982 : sv_dup_inc(SvRV(sstr), param);
8983 else if (SvPVX(sstr) && SvLEN(sstr))
8984 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8986 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8987 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
8988 LvTARGLEN(dstr) = LvTARGLEN(sstr);
8989 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr), param);
8990 LvTYPE(dstr) = LvTYPE(sstr);
8993 if (GvUNIQUE((GV*)sstr)) {
8995 if ((share = gv_share(sstr))) {
8999 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
9000 HvNAME(GvSTASH(share)), GvNAME(share));
9005 SvANY(dstr) = new_XPVGV();
9006 SvCUR(dstr) = SvCUR(sstr);
9007 SvLEN(dstr) = SvLEN(sstr);
9008 SvIVX(dstr) = SvIVX(sstr);
9009 SvNVX(dstr) = SvNVX(sstr);
9010 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9011 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9013 SvRV(dstr) = SvWEAKREF(sstr)
9014 ? sv_dup(SvRV(sstr), param)
9015 : sv_dup_inc(SvRV(sstr), param);
9016 else if (SvPVX(sstr) && SvLEN(sstr))
9017 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
9019 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
9020 GvNAMELEN(dstr) = GvNAMELEN(sstr);
9021 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
9022 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr), param);
9023 GvFLAGS(dstr) = GvFLAGS(sstr);
9024 GvGP(dstr) = gp_dup(GvGP(sstr), param);
9025 (void)GpREFCNT_inc(GvGP(dstr));
9028 SvANY(dstr) = new_XPVIO();
9029 SvCUR(dstr) = SvCUR(sstr);
9030 SvLEN(dstr) = SvLEN(sstr);
9031 SvIVX(dstr) = SvIVX(sstr);
9032 SvNVX(dstr) = SvNVX(sstr);
9033 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9034 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9036 SvRV(dstr) = SvWEAKREF(sstr)
9037 ? sv_dup(SvRV(sstr), param)
9038 : sv_dup_inc(SvRV(sstr), param);
9039 else if (SvPVX(sstr) && SvLEN(sstr))
9040 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
9042 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
9043 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr), param);
9044 if (IoOFP(sstr) == IoIFP(sstr))
9045 IoOFP(dstr) = IoIFP(dstr);
9047 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr), param);
9048 /* PL_rsfp_filters entries have fake IoDIRP() */
9049 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
9050 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
9052 IoDIRP(dstr) = IoDIRP(sstr);
9053 IoLINES(dstr) = IoLINES(sstr);
9054 IoPAGE(dstr) = IoPAGE(sstr);
9055 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
9056 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
9057 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
9058 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr), param);
9059 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
9060 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr), param);
9061 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
9062 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr), param);
9063 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
9064 IoTYPE(dstr) = IoTYPE(sstr);
9065 IoFLAGS(dstr) = IoFLAGS(sstr);
9068 SvANY(dstr) = new_XPVAV();
9069 SvCUR(dstr) = SvCUR(sstr);
9070 SvLEN(dstr) = SvLEN(sstr);
9071 SvIVX(dstr) = SvIVX(sstr);
9072 SvNVX(dstr) = SvNVX(sstr);
9073 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9074 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9075 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param);
9076 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
9077 if (AvARRAY((AV*)sstr)) {
9078 SV **dst_ary, **src_ary;
9079 SSize_t items = AvFILLp((AV*)sstr) + 1;
9081 src_ary = AvARRAY((AV*)sstr);
9082 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
9083 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
9084 SvPVX(dstr) = (char*)dst_ary;
9085 AvALLOC((AV*)dstr) = dst_ary;
9086 if (AvREAL((AV*)sstr)) {
9088 *dst_ary++ = sv_dup_inc(*src_ary++, param);
9092 *dst_ary++ = sv_dup(*src_ary++, param);
9094 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
9095 while (items-- > 0) {
9096 *dst_ary++ = &PL_sv_undef;
9100 SvPVX(dstr) = Nullch;
9101 AvALLOC((AV*)dstr) = (SV**)NULL;
9105 SvANY(dstr) = new_XPVHV();
9106 SvCUR(dstr) = SvCUR(sstr);
9107 SvLEN(dstr) = SvLEN(sstr);
9108 SvIVX(dstr) = SvIVX(sstr);
9109 SvNVX(dstr) = SvNVX(sstr);
9110 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9111 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9112 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
9113 if (HvARRAY((HV*)sstr)) {
9115 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
9116 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
9117 Newz(0, dxhv->xhv_array,
9118 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
9119 while (i <= sxhv->xhv_max) {
9120 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
9121 !!HvSHAREKEYS(sstr), param);
9124 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr), param);
9127 SvPVX(dstr) = Nullch;
9128 HvEITER((HV*)dstr) = (HE*)NULL;
9130 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
9131 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
9132 /* Record stashes for possible cloning in Perl_clone(). */
9133 if(HvNAME((HV*)dstr))
9134 av_push(param->stashes, dstr);
9137 SvANY(dstr) = new_XPVFM();
9138 FmLINES(dstr) = FmLINES(sstr);
9142 SvANY(dstr) = new_XPVCV();
9144 SvCUR(dstr) = SvCUR(sstr);
9145 SvLEN(dstr) = SvLEN(sstr);
9146 SvIVX(dstr) = SvIVX(sstr);
9147 SvNVX(dstr) = SvNVX(sstr);
9148 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
9149 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
9150 if (SvPVX(sstr) && SvLEN(sstr))
9151 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
9153 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
9154 CvSTASH(dstr) = hv_dup(CvSTASH(sstr), param); /* NOTE: not refcounted */
9155 CvSTART(dstr) = CvSTART(sstr);
9156 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
9157 CvXSUB(dstr) = CvXSUB(sstr);
9158 CvXSUBANY(dstr) = CvXSUBANY(sstr);
9159 if (CvCONST(sstr)) {
9160 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(sstr)) ?
9161 SvREFCNT_inc(CvXSUBANY(sstr).any_ptr) :
9162 sv_dup_inc(CvXSUBANY(sstr).any_ptr, param);
9164 CvGV(dstr) = gv_dup(CvGV(sstr), param);
9165 if (param->flags & CLONEf_COPY_STACKS) {
9166 CvDEPTH(dstr) = CvDEPTH(sstr);
9170 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
9171 /* XXX padlists are real, but pretend to be not */
9172 AvREAL_on(CvPADLIST(sstr));
9173 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr), param);
9174 AvREAL_off(CvPADLIST(sstr));
9175 AvREAL_off(CvPADLIST(dstr));
9178 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr), param);
9179 if (!CvANON(sstr) || CvCLONED(sstr))
9180 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr), param);
9182 CvOUTSIDE(dstr) = cv_dup(CvOUTSIDE(sstr), param);
9183 CvFLAGS(dstr) = CvFLAGS(sstr);
9184 CvFILE(dstr) = CvXSUB(sstr) ? CvFILE(sstr) : SAVEPV(CvFILE(sstr));
9187 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
9191 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
9197 /* duplicate a context */
9200 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
9205 return (PERL_CONTEXT*)NULL;
9207 /* look for it in the table first */
9208 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
9212 /* create anew and remember what it is */
9213 Newz(56, ncxs, max + 1, PERL_CONTEXT);
9214 ptr_table_store(PL_ptr_table, cxs, ncxs);
9217 PERL_CONTEXT *cx = &cxs[ix];
9218 PERL_CONTEXT *ncx = &ncxs[ix];
9219 ncx->cx_type = cx->cx_type;
9220 if (CxTYPE(cx) == CXt_SUBST) {
9221 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
9224 ncx->blk_oldsp = cx->blk_oldsp;
9225 ncx->blk_oldcop = cx->blk_oldcop;
9226 ncx->blk_oldretsp = cx->blk_oldretsp;
9227 ncx->blk_oldmarksp = cx->blk_oldmarksp;
9228 ncx->blk_oldscopesp = cx->blk_oldscopesp;
9229 ncx->blk_oldpm = cx->blk_oldpm;
9230 ncx->blk_gimme = cx->blk_gimme;
9231 switch (CxTYPE(cx)) {
9233 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
9234 ? cv_dup_inc(cx->blk_sub.cv, param)
9235 : cv_dup(cx->blk_sub.cv,param));
9236 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
9237 ? av_dup_inc(cx->blk_sub.argarray, param)
9239 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
9240 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
9241 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
9242 ncx->blk_sub.lval = cx->blk_sub.lval;
9245 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
9246 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
9247 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);;
9248 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
9249 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
9252 ncx->blk_loop.label = cx->blk_loop.label;
9253 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
9254 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
9255 ncx->blk_loop.next_op = cx->blk_loop.next_op;
9256 ncx->blk_loop.last_op = cx->blk_loop.last_op;
9257 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
9258 ? cx->blk_loop.iterdata
9259 : gv_dup((GV*)cx->blk_loop.iterdata, param));
9260 ncx->blk_loop.oldcurpad
9261 = (SV**)ptr_table_fetch(PL_ptr_table,
9262 cx->blk_loop.oldcurpad);
9263 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
9264 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
9265 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
9266 ncx->blk_loop.iterix = cx->blk_loop.iterix;
9267 ncx->blk_loop.itermax = cx->blk_loop.itermax;
9270 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
9271 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
9272 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
9273 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
9285 /* duplicate a stack info structure */
9288 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
9293 return (PERL_SI*)NULL;
9295 /* look for it in the table first */
9296 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
9300 /* create anew and remember what it is */
9301 Newz(56, nsi, 1, PERL_SI);
9302 ptr_table_store(PL_ptr_table, si, nsi);
9304 nsi->si_stack = av_dup_inc(si->si_stack, param);
9305 nsi->si_cxix = si->si_cxix;
9306 nsi->si_cxmax = si->si_cxmax;
9307 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
9308 nsi->si_type = si->si_type;
9309 nsi->si_prev = si_dup(si->si_prev, param);
9310 nsi->si_next = si_dup(si->si_next, param);
9311 nsi->si_markoff = si->si_markoff;
9316 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
9317 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
9318 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
9319 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
9320 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
9321 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
9322 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
9323 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
9324 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
9325 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
9326 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
9327 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
9330 #define pv_dup_inc(p) SAVEPV(p)
9331 #define pv_dup(p) SAVEPV(p)
9332 #define svp_dup_inc(p,pp) any_dup(p,pp)
9334 /* map any object to the new equivent - either something in the
9335 * ptr table, or something in the interpreter structure
9339 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
9346 /* look for it in the table first */
9347 ret = ptr_table_fetch(PL_ptr_table, v);
9351 /* see if it is part of the interpreter structure */
9352 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
9353 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
9360 /* duplicate the save stack */
9363 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
9365 ANY *ss = proto_perl->Tsavestack;
9366 I32 ix = proto_perl->Tsavestack_ix;
9367 I32 max = proto_perl->Tsavestack_max;
9380 void (*dptr) (void*);
9381 void (*dxptr) (pTHX_ void*);
9384 Newz(54, nss, max, ANY);
9390 case SAVEt_ITEM: /* normal string */
9391 sv = (SV*)POPPTR(ss,ix);
9392 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9393 sv = (SV*)POPPTR(ss,ix);
9394 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9396 case SAVEt_SV: /* scalar reference */
9397 sv = (SV*)POPPTR(ss,ix);
9398 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9399 gv = (GV*)POPPTR(ss,ix);
9400 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
9402 case SAVEt_GENERIC_PVREF: /* generic char* */
9403 c = (char*)POPPTR(ss,ix);
9404 TOPPTR(nss,ix) = pv_dup(c);
9405 ptr = POPPTR(ss,ix);
9406 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9408 case SAVEt_GENERIC_SVREF: /* generic sv */
9409 case SAVEt_SVREF: /* scalar reference */
9410 sv = (SV*)POPPTR(ss,ix);
9411 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9412 ptr = POPPTR(ss,ix);
9413 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
9415 case SAVEt_AV: /* array reference */
9416 av = (AV*)POPPTR(ss,ix);
9417 TOPPTR(nss,ix) = av_dup_inc(av, param);
9418 gv = (GV*)POPPTR(ss,ix);
9419 TOPPTR(nss,ix) = gv_dup(gv, param);
9421 case SAVEt_HV: /* hash reference */
9422 hv = (HV*)POPPTR(ss,ix);
9423 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
9424 gv = (GV*)POPPTR(ss,ix);
9425 TOPPTR(nss,ix) = gv_dup(gv, param);
9427 case SAVEt_INT: /* int reference */
9428 ptr = POPPTR(ss,ix);
9429 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9430 intval = (int)POPINT(ss,ix);
9431 TOPINT(nss,ix) = intval;
9433 case SAVEt_LONG: /* long reference */
9434 ptr = POPPTR(ss,ix);
9435 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9436 longval = (long)POPLONG(ss,ix);
9437 TOPLONG(nss,ix) = longval;
9439 case SAVEt_I32: /* I32 reference */
9440 case SAVEt_I16: /* I16 reference */
9441 case SAVEt_I8: /* I8 reference */
9442 ptr = POPPTR(ss,ix);
9443 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9447 case SAVEt_IV: /* IV reference */
9448 ptr = POPPTR(ss,ix);
9449 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9453 case SAVEt_SPTR: /* SV* reference */
9454 ptr = POPPTR(ss,ix);
9455 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9456 sv = (SV*)POPPTR(ss,ix);
9457 TOPPTR(nss,ix) = sv_dup(sv, param);
9459 case SAVEt_VPTR: /* random* reference */
9460 ptr = POPPTR(ss,ix);
9461 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9462 ptr = POPPTR(ss,ix);
9463 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9465 case SAVEt_PPTR: /* char* reference */
9466 ptr = POPPTR(ss,ix);
9467 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9468 c = (char*)POPPTR(ss,ix);
9469 TOPPTR(nss,ix) = pv_dup(c);
9471 case SAVEt_HPTR: /* HV* reference */
9472 ptr = POPPTR(ss,ix);
9473 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9474 hv = (HV*)POPPTR(ss,ix);
9475 TOPPTR(nss,ix) = hv_dup(hv, param);
9477 case SAVEt_APTR: /* AV* reference */
9478 ptr = POPPTR(ss,ix);
9479 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9480 av = (AV*)POPPTR(ss,ix);
9481 TOPPTR(nss,ix) = av_dup(av, param);
9484 gv = (GV*)POPPTR(ss,ix);
9485 TOPPTR(nss,ix) = gv_dup(gv, param);
9487 case SAVEt_GP: /* scalar reference */
9488 gp = (GP*)POPPTR(ss,ix);
9489 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
9490 (void)GpREFCNT_inc(gp);
9491 gv = (GV*)POPPTR(ss,ix);
9492 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
9493 c = (char*)POPPTR(ss,ix);
9494 TOPPTR(nss,ix) = pv_dup(c);
9501 case SAVEt_MORTALIZESV:
9502 sv = (SV*)POPPTR(ss,ix);
9503 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9506 ptr = POPPTR(ss,ix);
9507 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
9508 /* these are assumed to be refcounted properly */
9509 switch (((OP*)ptr)->op_type) {
9516 TOPPTR(nss,ix) = ptr;
9521 TOPPTR(nss,ix) = Nullop;
9526 TOPPTR(nss,ix) = Nullop;
9529 c = (char*)POPPTR(ss,ix);
9530 TOPPTR(nss,ix) = pv_dup_inc(c);
9533 longval = POPLONG(ss,ix);
9534 TOPLONG(nss,ix) = longval;
9537 hv = (HV*)POPPTR(ss,ix);
9538 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
9539 c = (char*)POPPTR(ss,ix);
9540 TOPPTR(nss,ix) = pv_dup_inc(c);
9544 case SAVEt_DESTRUCTOR:
9545 ptr = POPPTR(ss,ix);
9546 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
9547 dptr = POPDPTR(ss,ix);
9548 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
9550 case SAVEt_DESTRUCTOR_X:
9551 ptr = POPPTR(ss,ix);
9552 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
9553 dxptr = POPDXPTR(ss,ix);
9554 TOPDXPTR(nss,ix) = (void (*)(pTHX_ void*))any_dup((void *)dxptr, proto_perl);
9556 case SAVEt_REGCONTEXT:
9562 case SAVEt_STACK_POS: /* Position on Perl stack */
9566 case SAVEt_AELEM: /* array element */
9567 sv = (SV*)POPPTR(ss,ix);
9568 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9571 av = (AV*)POPPTR(ss,ix);
9572 TOPPTR(nss,ix) = av_dup_inc(av, param);
9574 case SAVEt_HELEM: /* hash element */
9575 sv = (SV*)POPPTR(ss,ix);
9576 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9577 sv = (SV*)POPPTR(ss,ix);
9578 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9579 hv = (HV*)POPPTR(ss,ix);
9580 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
9583 ptr = POPPTR(ss,ix);
9584 TOPPTR(nss,ix) = ptr;
9591 av = (AV*)POPPTR(ss,ix);
9592 TOPPTR(nss,ix) = av_dup(av, param);
9595 longval = (long)POPLONG(ss,ix);
9596 TOPLONG(nss,ix) = longval;
9597 ptr = POPPTR(ss,ix);
9598 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
9599 sv = (SV*)POPPTR(ss,ix);
9600 TOPPTR(nss,ix) = sv_dup(sv, param);
9603 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
9611 =for apidoc perl_clone
9613 Create and return a new interpreter by cloning the current one.
9618 /* XXX the above needs expanding by someone who actually understands it ! */
9619 EXTERN_C PerlInterpreter *
9620 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
9623 perl_clone(PerlInterpreter *proto_perl, UV flags)
9625 #ifdef PERL_IMPLICIT_SYS
9627 /* perlhost.h so we need to call into it
9628 to clone the host, CPerlHost should have a c interface, sky */
9630 if (flags & CLONEf_CLONE_HOST) {
9631 return perl_clone_host(proto_perl,flags);
9633 return perl_clone_using(proto_perl, flags,
9635 proto_perl->IMemShared,
9636 proto_perl->IMemParse,
9646 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
9647 struct IPerlMem* ipM, struct IPerlMem* ipMS,
9648 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
9649 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
9650 struct IPerlDir* ipD, struct IPerlSock* ipS,
9651 struct IPerlProc* ipP)
9653 /* XXX many of the string copies here can be optimized if they're
9654 * constants; they need to be allocated as common memory and just
9655 * their pointers copied. */
9658 CLONE_PARAMS* param = (CLONE_PARAMS*) malloc(sizeof(CLONE_PARAMS));
9660 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
9661 PERL_SET_THX(my_perl);
9664 memset(my_perl, 0xab, sizeof(PerlInterpreter));
9670 # else /* !DEBUGGING */
9671 Zero(my_perl, 1, PerlInterpreter);
9672 # endif /* DEBUGGING */
9676 PL_MemShared = ipMS;
9684 #else /* !PERL_IMPLICIT_SYS */
9686 CLONE_PARAMS* param = (CLONE_PARAMS*) malloc(sizeof(CLONE_PARAMS));
9687 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
9688 PERL_SET_THX(my_perl);
9693 memset(my_perl, 0xab, sizeof(PerlInterpreter));
9699 # else /* !DEBUGGING */
9700 Zero(my_perl, 1, PerlInterpreter);
9701 # endif /* DEBUGGING */
9702 #endif /* PERL_IMPLICIT_SYS */
9703 param->flags = flags;
9706 PL_xiv_arenaroot = NULL;
9708 PL_xnv_arenaroot = NULL;
9710 PL_xrv_arenaroot = NULL;
9712 PL_xpv_arenaroot = NULL;
9714 PL_xpviv_arenaroot = NULL;
9715 PL_xpviv_root = NULL;
9716 PL_xpvnv_arenaroot = NULL;
9717 PL_xpvnv_root = NULL;
9718 PL_xpvcv_arenaroot = NULL;
9719 PL_xpvcv_root = NULL;
9720 PL_xpvav_arenaroot = NULL;
9721 PL_xpvav_root = NULL;
9722 PL_xpvhv_arenaroot = NULL;
9723 PL_xpvhv_root = NULL;
9724 PL_xpvmg_arenaroot = NULL;
9725 PL_xpvmg_root = NULL;
9726 PL_xpvlv_arenaroot = NULL;
9727 PL_xpvlv_root = NULL;
9728 PL_xpvbm_arenaroot = NULL;
9729 PL_xpvbm_root = NULL;
9730 PL_he_arenaroot = NULL;
9732 PL_nice_chunk = NULL;
9733 PL_nice_chunk_size = 0;
9736 PL_sv_root = Nullsv;
9737 PL_sv_arenaroot = Nullsv;
9739 PL_debug = proto_perl->Idebug;
9741 #ifdef USE_REENTRANT_API
9742 New(31337, PL_reentrant_buffer,1, REBUF);
9743 New(31337, PL_reentrant_buffer->tmbuff,1, struct tm);
9746 /* create SV map for pointer relocation */
9747 PL_ptr_table = ptr_table_new();
9749 /* initialize these special pointers as early as possible */
9750 SvANY(&PL_sv_undef) = NULL;
9751 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
9752 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
9753 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
9755 SvANY(&PL_sv_no) = new_XPVNV();
9756 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
9757 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
9758 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
9759 SvCUR(&PL_sv_no) = 0;
9760 SvLEN(&PL_sv_no) = 1;
9761 SvNVX(&PL_sv_no) = 0;
9762 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
9764 SvANY(&PL_sv_yes) = new_XPVNV();
9765 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
9766 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
9767 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
9768 SvCUR(&PL_sv_yes) = 1;
9769 SvLEN(&PL_sv_yes) = 2;
9770 SvNVX(&PL_sv_yes) = 1;
9771 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
9773 /* create shared string table */
9774 PL_strtab = newHV();
9775 HvSHAREKEYS_off(PL_strtab);
9776 hv_ksplit(PL_strtab, 512);
9777 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
9779 PL_compiling = proto_perl->Icompiling;
9780 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
9781 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
9782 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
9783 if (!specialWARN(PL_compiling.cop_warnings))
9784 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
9785 if (!specialCopIO(PL_compiling.cop_io))
9786 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
9787 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
9789 /* pseudo environmental stuff */
9790 PL_origargc = proto_perl->Iorigargc;
9792 New(0, PL_origargv, i+1, char*);
9793 PL_origargv[i] = '\0';
9795 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
9798 param->stashes = newAV(); /* Setup array of objects to call clone on */
9800 #ifdef PERLIO_LAYERS
9801 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
9802 PerlIO_clone(aTHX_ proto_perl, param);
9805 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
9806 PL_incgv = gv_dup(proto_perl->Iincgv, param);
9807 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
9808 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
9809 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
9810 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
9813 PL_minus_c = proto_perl->Iminus_c;
9814 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
9815 PL_localpatches = proto_perl->Ilocalpatches;
9816 PL_splitstr = proto_perl->Isplitstr;
9817 PL_preprocess = proto_perl->Ipreprocess;
9818 PL_minus_n = proto_perl->Iminus_n;
9819 PL_minus_p = proto_perl->Iminus_p;
9820 PL_minus_l = proto_perl->Iminus_l;
9821 PL_minus_a = proto_perl->Iminus_a;
9822 PL_minus_F = proto_perl->Iminus_F;
9823 PL_doswitches = proto_perl->Idoswitches;
9824 PL_dowarn = proto_perl->Idowarn;
9825 PL_doextract = proto_perl->Idoextract;
9826 PL_sawampersand = proto_perl->Isawampersand;
9827 PL_unsafe = proto_perl->Iunsafe;
9828 PL_inplace = SAVEPV(proto_perl->Iinplace);
9829 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
9830 PL_perldb = proto_perl->Iperldb;
9831 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
9832 PL_exit_flags = proto_perl->Iexit_flags;
9834 /* magical thingies */
9835 /* XXX time(&PL_basetime) when asked for? */
9836 PL_basetime = proto_perl->Ibasetime;
9837 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
9839 PL_maxsysfd = proto_perl->Imaxsysfd;
9840 PL_multiline = proto_perl->Imultiline;
9841 PL_statusvalue = proto_perl->Istatusvalue;
9843 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
9845 PL_encoding = sv_dup(proto_perl->Iencoding, param);
9847 /* Clone the regex array */
9848 PL_regex_padav = newAV();
9850 I32 len = av_len((AV*)proto_perl->Iregex_padav);
9851 SV** regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
9852 av_push(PL_regex_padav,
9853 sv_dup_inc(regexen[0],param));
9854 for(i = 1; i <= len; i++) {
9855 if(SvREPADTMP(regexen[i])) {
9856 av_push(PL_regex_padav, sv_dup_inc(regexen[i], param));
9858 av_push(PL_regex_padav,
9860 newSViv(PTR2IV(re_dup(INT2PTR(REGEXP *,
9861 SvIVX(regexen[i])), param)))
9866 PL_regex_pad = AvARRAY(PL_regex_padav);
9868 /* shortcuts to various I/O objects */
9869 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
9870 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
9871 PL_defgv = gv_dup(proto_perl->Idefgv, param);
9872 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
9873 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
9874 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
9876 /* shortcuts to regexp stuff */
9877 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
9879 /* shortcuts to misc objects */
9880 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
9882 /* shortcuts to debugging objects */
9883 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
9884 PL_DBline = gv_dup(proto_perl->IDBline, param);
9885 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
9886 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
9887 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
9888 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
9889 PL_lineary = av_dup(proto_perl->Ilineary, param);
9890 PL_dbargs = av_dup(proto_perl->Idbargs, param);
9893 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
9894 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
9895 PL_nullstash = hv_dup(proto_perl->Inullstash, param);
9896 PL_debstash = hv_dup(proto_perl->Idebstash, param);
9897 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
9898 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
9900 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
9901 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
9902 PL_endav = av_dup_inc(proto_perl->Iendav, param);
9903 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
9904 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
9906 PL_sub_generation = proto_perl->Isub_generation;
9908 /* funky return mechanisms */
9909 PL_forkprocess = proto_perl->Iforkprocess;
9911 /* subprocess state */
9912 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
9914 /* internal state */
9915 PL_tainting = proto_perl->Itainting;
9916 PL_maxo = proto_perl->Imaxo;
9917 if (proto_perl->Iop_mask)
9918 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
9920 PL_op_mask = Nullch;
9922 /* current interpreter roots */
9923 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
9924 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
9925 PL_main_start = proto_perl->Imain_start;
9926 PL_eval_root = proto_perl->Ieval_root;
9927 PL_eval_start = proto_perl->Ieval_start;
9929 /* runtime control stuff */
9930 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
9931 PL_copline = proto_perl->Icopline;
9933 PL_filemode = proto_perl->Ifilemode;
9934 PL_lastfd = proto_perl->Ilastfd;
9935 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
9938 PL_gensym = proto_perl->Igensym;
9939 PL_preambled = proto_perl->Ipreambled;
9940 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
9941 PL_laststatval = proto_perl->Ilaststatval;
9942 PL_laststype = proto_perl->Ilaststype;
9943 PL_mess_sv = Nullsv;
9945 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
9946 PL_ofmt = SAVEPV(proto_perl->Iofmt);
9948 /* interpreter atexit processing */
9949 PL_exitlistlen = proto_perl->Iexitlistlen;
9950 if (PL_exitlistlen) {
9951 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9952 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9955 PL_exitlist = (PerlExitListEntry*)NULL;
9956 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
9957 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
9958 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
9960 PL_profiledata = NULL;
9961 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
9962 /* PL_rsfp_filters entries have fake IoDIRP() */
9963 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
9965 PL_compcv = cv_dup(proto_perl->Icompcv, param);
9966 PL_comppad = av_dup(proto_perl->Icomppad, param);
9967 PL_comppad_name = av_dup(proto_perl->Icomppad_name, param);
9968 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
9969 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
9970 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
9971 proto_perl->Tcurpad);
9973 #ifdef HAVE_INTERP_INTERN
9974 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
9977 /* more statics moved here */
9978 PL_generation = proto_perl->Igeneration;
9979 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
9981 PL_in_clean_objs = proto_perl->Iin_clean_objs;
9982 PL_in_clean_all = proto_perl->Iin_clean_all;
9984 PL_uid = proto_perl->Iuid;
9985 PL_euid = proto_perl->Ieuid;
9986 PL_gid = proto_perl->Igid;
9987 PL_egid = proto_perl->Iegid;
9988 PL_nomemok = proto_perl->Inomemok;
9989 PL_an = proto_perl->Ian;
9990 PL_cop_seqmax = proto_perl->Icop_seqmax;
9991 PL_op_seqmax = proto_perl->Iop_seqmax;
9992 PL_evalseq = proto_perl->Ievalseq;
9993 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
9994 PL_origalen = proto_perl->Iorigalen;
9995 PL_pidstatus = newHV(); /* XXX flag for cloning? */
9996 PL_osname = SAVEPV(proto_perl->Iosname);
9997 PL_sh_path = proto_perl->Ish_path; /* XXX never deallocated */
9998 PL_sighandlerp = proto_perl->Isighandlerp;
10001 PL_runops = proto_perl->Irunops;
10003 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
10006 PL_cshlen = proto_perl->Icshlen;
10007 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
10010 PL_lex_state = proto_perl->Ilex_state;
10011 PL_lex_defer = proto_perl->Ilex_defer;
10012 PL_lex_expect = proto_perl->Ilex_expect;
10013 PL_lex_formbrack = proto_perl->Ilex_formbrack;
10014 PL_lex_dojoin = proto_perl->Ilex_dojoin;
10015 PL_lex_starts = proto_perl->Ilex_starts;
10016 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff, param);
10017 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl, param);
10018 PL_lex_op = proto_perl->Ilex_op;
10019 PL_lex_inpat = proto_perl->Ilex_inpat;
10020 PL_lex_inwhat = proto_perl->Ilex_inwhat;
10021 PL_lex_brackets = proto_perl->Ilex_brackets;
10022 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
10023 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
10024 PL_lex_casemods = proto_perl->Ilex_casemods;
10025 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
10026 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
10028 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
10029 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
10030 PL_nexttoke = proto_perl->Inexttoke;
10032 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
10033 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
10034 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10035 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
10036 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10037 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
10038 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10039 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
10040 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
10041 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10042 PL_pending_ident = proto_perl->Ipending_ident;
10043 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
10045 PL_expect = proto_perl->Iexpect;
10047 PL_multi_start = proto_perl->Imulti_start;
10048 PL_multi_end = proto_perl->Imulti_end;
10049 PL_multi_open = proto_perl->Imulti_open;
10050 PL_multi_close = proto_perl->Imulti_close;
10052 PL_error_count = proto_perl->Ierror_count;
10053 PL_subline = proto_perl->Isubline;
10054 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
10056 PL_min_intro_pending = proto_perl->Imin_intro_pending;
10057 PL_max_intro_pending = proto_perl->Imax_intro_pending;
10058 PL_padix = proto_perl->Ipadix;
10059 PL_padix_floor = proto_perl->Ipadix_floor;
10060 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
10062 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
10063 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10064 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
10065 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10066 PL_last_lop_op = proto_perl->Ilast_lop_op;
10067 PL_in_my = proto_perl->Iin_my;
10068 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
10070 PL_cryptseen = proto_perl->Icryptseen;
10073 PL_hints = proto_perl->Ihints;
10075 PL_amagic_generation = proto_perl->Iamagic_generation;
10077 #ifdef USE_LOCALE_COLLATE
10078 PL_collation_ix = proto_perl->Icollation_ix;
10079 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
10080 PL_collation_standard = proto_perl->Icollation_standard;
10081 PL_collxfrm_base = proto_perl->Icollxfrm_base;
10082 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
10083 #endif /* USE_LOCALE_COLLATE */
10085 #ifdef USE_LOCALE_NUMERIC
10086 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
10087 PL_numeric_standard = proto_perl->Inumeric_standard;
10088 PL_numeric_local = proto_perl->Inumeric_local;
10089 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
10090 #endif /* !USE_LOCALE_NUMERIC */
10092 /* utf8 character classes */
10093 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
10094 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
10095 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
10096 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
10097 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
10098 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
10099 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
10100 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
10101 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
10102 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
10103 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
10104 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
10105 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
10106 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
10107 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
10108 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
10109 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
10110 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
10113 PL_last_swash_hv = Nullhv; /* reinits on demand */
10114 PL_last_swash_klen = 0;
10115 PL_last_swash_key[0]= '\0';
10116 PL_last_swash_tmps = (U8*)NULL;
10117 PL_last_swash_slen = 0;
10119 /* perly.c globals */
10120 PL_yydebug = proto_perl->Iyydebug;
10121 PL_yynerrs = proto_perl->Iyynerrs;
10122 PL_yyerrflag = proto_perl->Iyyerrflag;
10123 PL_yychar = proto_perl->Iyychar;
10124 PL_yyval = proto_perl->Iyyval;
10125 PL_yylval = proto_perl->Iyylval;
10127 PL_glob_index = proto_perl->Iglob_index;
10128 PL_srand_called = proto_perl->Isrand_called;
10129 PL_uudmap['M'] = 0; /* reinits on demand */
10130 PL_bitcount = Nullch; /* reinits on demand */
10132 if (proto_perl->Ipsig_pend) {
10133 Newz(0, PL_psig_pend, SIG_SIZE, int);
10136 PL_psig_pend = (int*)NULL;
10139 if (proto_perl->Ipsig_ptr) {
10140 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
10141 Newz(0, PL_psig_name, SIG_SIZE, SV*);
10142 for (i = 1; i < SIG_SIZE; i++) {
10143 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
10144 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
10148 PL_psig_ptr = (SV**)NULL;
10149 PL_psig_name = (SV**)NULL;
10152 /* thrdvar.h stuff */
10154 if (flags & CLONEf_COPY_STACKS) {
10155 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
10156 PL_tmps_ix = proto_perl->Ttmps_ix;
10157 PL_tmps_max = proto_perl->Ttmps_max;
10158 PL_tmps_floor = proto_perl->Ttmps_floor;
10159 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
10161 while (i <= PL_tmps_ix) {
10162 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
10166 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
10167 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
10168 Newz(54, PL_markstack, i, I32);
10169 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
10170 - proto_perl->Tmarkstack);
10171 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
10172 - proto_perl->Tmarkstack);
10173 Copy(proto_perl->Tmarkstack, PL_markstack,
10174 PL_markstack_ptr - PL_markstack + 1, I32);
10176 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
10177 * NOTE: unlike the others! */
10178 PL_scopestack_ix = proto_perl->Tscopestack_ix;
10179 PL_scopestack_max = proto_perl->Tscopestack_max;
10180 Newz(54, PL_scopestack, PL_scopestack_max, I32);
10181 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
10183 /* next push_return() sets PL_retstack[PL_retstack_ix]
10184 * NOTE: unlike the others! */
10185 PL_retstack_ix = proto_perl->Tretstack_ix;
10186 PL_retstack_max = proto_perl->Tretstack_max;
10187 Newz(54, PL_retstack, PL_retstack_max, OP*);
10188 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
10190 /* NOTE: si_dup() looks at PL_markstack */
10191 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
10193 /* PL_curstack = PL_curstackinfo->si_stack; */
10194 PL_curstack = av_dup(proto_perl->Tcurstack, param);
10195 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
10197 /* next PUSHs() etc. set *(PL_stack_sp+1) */
10198 PL_stack_base = AvARRAY(PL_curstack);
10199 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
10200 - proto_perl->Tstack_base);
10201 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
10203 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
10204 * NOTE: unlike the others! */
10205 PL_savestack_ix = proto_perl->Tsavestack_ix;
10206 PL_savestack_max = proto_perl->Tsavestack_max;
10207 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
10208 PL_savestack = ss_dup(proto_perl, param);
10212 ENTER; /* perl_destruct() wants to LEAVE; */
10215 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
10216 PL_top_env = &PL_start_env;
10218 PL_op = proto_perl->Top;
10221 PL_Xpv = (XPV*)NULL;
10222 PL_na = proto_perl->Tna;
10224 PL_statbuf = proto_perl->Tstatbuf;
10225 PL_statcache = proto_perl->Tstatcache;
10226 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
10227 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
10229 PL_timesbuf = proto_perl->Ttimesbuf;
10232 PL_tainted = proto_perl->Ttainted;
10233 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
10234 PL_rs = sv_dup_inc(proto_perl->Trs, param);
10235 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
10236 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
10237 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
10238 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
10239 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
10240 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
10241 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
10243 PL_restartop = proto_perl->Trestartop;
10244 PL_in_eval = proto_perl->Tin_eval;
10245 PL_delaymagic = proto_perl->Tdelaymagic;
10246 PL_dirty = proto_perl->Tdirty;
10247 PL_localizing = proto_perl->Tlocalizing;
10249 #ifdef PERL_FLEXIBLE_EXCEPTIONS
10250 PL_protect = proto_perl->Tprotect;
10252 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
10253 PL_av_fetch_sv = Nullsv;
10254 PL_hv_fetch_sv = Nullsv;
10255 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
10256 PL_modcount = proto_perl->Tmodcount;
10257 PL_lastgotoprobe = Nullop;
10258 PL_dumpindent = proto_perl->Tdumpindent;
10260 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
10261 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
10262 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
10263 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
10264 PL_sortcxix = proto_perl->Tsortcxix;
10265 PL_efloatbuf = Nullch; /* reinits on demand */
10266 PL_efloatsize = 0; /* reinits on demand */
10270 PL_screamfirst = NULL;
10271 PL_screamnext = NULL;
10272 PL_maxscream = -1; /* reinits on demand */
10273 PL_lastscream = Nullsv;
10275 PL_watchaddr = NULL;
10276 PL_watchok = Nullch;
10278 PL_regdummy = proto_perl->Tregdummy;
10279 PL_regcomp_parse = Nullch;
10280 PL_regxend = Nullch;
10281 PL_regcode = (regnode*)NULL;
10284 PL_regprecomp = Nullch;
10289 PL_seen_zerolen = 0;
10291 PL_regcomp_rx = (regexp*)NULL;
10293 PL_colorset = 0; /* reinits PL_colors[] */
10294 /*PL_colors[6] = {0,0,0,0,0,0};*/
10295 PL_reg_whilem_seen = 0;
10296 PL_reginput = Nullch;
10297 PL_regbol = Nullch;
10298 PL_regeol = Nullch;
10299 PL_regstartp = (I32*)NULL;
10300 PL_regendp = (I32*)NULL;
10301 PL_reglastparen = (U32*)NULL;
10302 PL_regtill = Nullch;
10303 PL_reg_start_tmp = (char**)NULL;
10304 PL_reg_start_tmpl = 0;
10305 PL_regdata = (struct reg_data*)NULL;
10308 PL_reg_eval_set = 0;
10310 PL_regprogram = (regnode*)NULL;
10312 PL_regcc = (CURCUR*)NULL;
10313 PL_reg_call_cc = (struct re_cc_state*)NULL;
10314 PL_reg_re = (regexp*)NULL;
10315 PL_reg_ganch = Nullch;
10316 PL_reg_sv = Nullsv;
10317 PL_reg_match_utf8 = FALSE;
10318 PL_reg_magic = (MAGIC*)NULL;
10320 PL_reg_oldcurpm = (PMOP*)NULL;
10321 PL_reg_curpm = (PMOP*)NULL;
10322 PL_reg_oldsaved = Nullch;
10323 PL_reg_oldsavedlen = 0;
10324 PL_reg_maxiter = 0;
10325 PL_reg_leftiter = 0;
10326 PL_reg_poscache = Nullch;
10327 PL_reg_poscache_size= 0;
10329 /* RE engine - function pointers */
10330 PL_regcompp = proto_perl->Tregcompp;
10331 PL_regexecp = proto_perl->Tregexecp;
10332 PL_regint_start = proto_perl->Tregint_start;
10333 PL_regint_string = proto_perl->Tregint_string;
10334 PL_regfree = proto_perl->Tregfree;
10336 PL_reginterp_cnt = 0;
10337 PL_reg_starttry = 0;
10339 /* Pluggable optimizer */
10340 PL_peepp = proto_perl->Tpeepp;
10342 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
10343 ptr_table_free(PL_ptr_table);
10344 PL_ptr_table = NULL;
10347 /* Call the ->CLONE method, if it exists, for each of the stashes
10348 identified by sv_dup() above.
10350 while(av_len(param->stashes) != -1) {
10351 HV* stash = (HV*) av_shift(param->stashes);
10352 GV* cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
10353 if (cloner && GvCV(cloner)) {
10358 XPUSHs(sv_2mortal(newSVpv(HvNAME(stash), 0)));
10360 call_sv((SV*)GvCV(cloner), G_DISCARD);
10366 SvREFCNT_dec(param->stashes);
10372 #endif /* USE_ITHREADS */
10375 =for apidoc sv_recode_to_utf8
10377 The encoding is assumed to be an Encode object, on entry the PV
10378 of the sv is assumed to be octets in that encoding, and the sv
10379 will be converted into Unicode (and UTF-8).
10381 If the sv already is UTF-8 (or if it is not POK), or if the encoding
10382 is not a reference, nothing is done to the sv. If the encoding is not
10383 an C<Encode::XS> Encoding object, bad things will happen.
10384 (See F<lib/encoding.pm> and L<Encode>).
10386 The PV of the sv is returned.
10391 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
10393 if (SvPOK(sv) && !DO_UTF8(sv) && SvROK(encoding)) {
10404 XPUSHs(&PL_sv_yes);
10406 call_method("decode", G_SCALAR);
10410 s = SvPV(uni, len);
10411 if (s != SvPVX(sv)) {
10413 Move(s, SvPVX(sv), len, char);
10414 SvCUR_set(sv, len);