3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
28 /* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
32 #ifdef PERL_UTF8_CACHE_ASSERT
33 /* The cache element 0 is the Unicode offset;
34 * the cache element 1 is the byte offset of the element 0;
35 * the cache element 2 is the Unicode length of the substring;
36 * the cache element 3 is the byte length of the substring;
37 * The checking of the substring side would be good
38 * but substr() has enough code paths to make my head spin;
39 * if adding more checks watch out for the following tests:
40 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
41 * lib/utf8.t lib/Unicode/Collate/t/index.t
44 #define ASSERT_UTF8_CACHE(cache) \
45 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
47 #define ASSERT_UTF8_CACHE(cache) NOOP
50 #ifdef PERL_COPY_ON_WRITE
51 #define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
52 #define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
53 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
57 /* ============================================================================
59 =head1 Allocation and deallocation of SVs.
61 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct sv,
62 av, hv...) contains type and reference count information, as well as a
63 pointer to the body (struct xrv, xpv, xpviv...), which contains fields
64 specific to each type.
66 Normally, this allocation is done using arenas, which by default are
67 approximately 4K chunks of memory parcelled up into N heads or bodies. The
68 first slot in each arena is reserved, and is used to hold a link to the next
69 arena. In the case of heads, the unused first slot also contains some flags
70 and a note of the number of slots. Snaked through each arena chain is a
71 linked list of free items; when this becomes empty, an extra arena is
72 allocated and divided up into N items which are threaded into the free list.
74 The following global variables are associated with arenas:
76 PL_sv_arenaroot pointer to list of SV arenas
77 PL_sv_root pointer to list of free SV structures
79 PL_foo_arenaroot pointer to list of foo arenas,
80 PL_foo_root pointer to list of free foo bodies
81 ... for foo in xiv, xnv, xrv, xpv etc.
83 Note that some of the larger and more rarely used body types (eg xpvio)
84 are not allocated using arenas, but are instead just malloc()/free()ed as
85 required. Also, if PURIFY is defined, arenas are abandoned altogether,
86 with all items individually malloc()ed. In addition, a few SV heads are
87 not allocated from an arena, but are instead directly created as static
88 or auto variables, eg PL_sv_undef. The size of arenas can be changed from
89 the default by setting PERL_ARENA_SIZE appropriately at compile time.
91 The SV arena serves the secondary purpose of allowing still-live SVs
92 to be located and destroyed during final cleanup.
94 At the lowest level, the macros new_SV() and del_SV() grab and free
95 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
96 to return the SV to the free list with error checking.) new_SV() calls
97 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
98 SVs in the free list have their SvTYPE field set to all ones.
100 Similarly, there are macros new_XIV()/del_XIV(), new_XNV()/del_XNV() etc
101 that allocate and return individual body types. Normally these are mapped
102 to the arena-manipulating functions new_xiv()/del_xiv() etc, but may be
103 instead mapped directly to malloc()/free() if PURIFY is defined. The
104 new/del functions remove from, or add to, the appropriate PL_foo_root
105 list, and call more_xiv() etc to add a new arena if the list is empty.
107 At the time of very final cleanup, sv_free_arenas() is called from
108 perl_destruct() to physically free all the arenas allocated since the
109 start of the interpreter. Note that this also clears PL_he_arenaroot,
110 which is otherwise dealt with in hv.c.
112 Manipulation of any of the PL_*root pointers is protected by enclosing
113 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
114 if threads are enabled.
116 The function visit() scans the SV arenas list, and calls a specified
117 function for each SV it finds which is still live - ie which has an SvTYPE
118 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
119 following functions (specified as [function that calls visit()] / [function
120 called by visit() for each SV]):
122 sv_report_used() / do_report_used()
123 dump all remaining SVs (debugging aid)
125 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
126 Attempt to free all objects pointed to by RVs,
127 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
128 try to do the same for all objects indirectly
129 referenced by typeglobs too. Called once from
130 perl_destruct(), prior to calling sv_clean_all()
133 sv_clean_all() / do_clean_all()
134 SvREFCNT_dec(sv) each remaining SV, possibly
135 triggering an sv_free(). It also sets the
136 SVf_BREAK flag on the SV to indicate that the
137 refcnt has been artificially lowered, and thus
138 stopping sv_free() from giving spurious warnings
139 about SVs which unexpectedly have a refcnt
140 of zero. called repeatedly from perl_destruct()
141 until there are no SVs left.
145 Private API to rest of sv.c
149 new_XIV(), del_XIV(),
150 new_XNV(), del_XNV(),
155 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
160 ============================================================================ */
165 * "A time to plant, and a time to uproot what was planted..."
169 #ifdef DEBUG_LEAKING_SCALARS
171 # define FREE_SV_DEBUG_FILE(sv) PerlMemfree((sv)->sv_debug_file)
173 # define FREE_SV_DEBUG_FILE(sv) PerlMemShared_free((sv)->sv_debug_file)
176 # define FREE_SV_DEBUG_FILE(sv)
179 #define plant_SV(p) \
181 FREE_SV_DEBUG_FILE(p); \
182 SvANY(p) = (void *)PL_sv_root; \
183 SvFLAGS(p) = SVTYPEMASK; \
188 /* sv_mutex must be held while calling uproot_SV() */
189 #define uproot_SV(p) \
192 PL_sv_root = (SV*)SvANY(p); \
197 /* make some more SVs by adding another arena */
199 /* sv_mutex must be held while calling more_sv() */
206 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
207 PL_nice_chunk = Nullch;
208 PL_nice_chunk_size = 0;
211 char *chunk; /* must use New here to match call to */
212 New(704,chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
213 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
219 /* new_SV(): return a new, empty SV head */
221 #ifdef DEBUG_LEAKING_SCALARS
222 /* provide a real function for a debugger to play with */
232 sv = S_more_sv(aTHX);
237 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
238 sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
239 (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
240 sv->sv_debug_inpad = 0;
241 sv->sv_debug_cloned = 0;
243 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
245 sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
250 # define new_SV(p) (p)=S_new_SV(aTHX)
259 (p) = S_more_sv(aTHX); \
268 /* del_SV(): return an empty SV head to the free list */
283 S_del_sv(pTHX_ SV *p)
288 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
290 SV *svend = &sva[SvREFCNT(sva)];
291 if (p >= sv && p < svend) {
297 if (ckWARN_d(WARN_INTERNAL))
298 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
299 "Attempt to free non-arena SV: 0x%"UVxf
300 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
307 #else /* ! DEBUGGING */
309 #define del_SV(p) plant_SV(p)
311 #endif /* DEBUGGING */
315 =head1 SV Manipulation Functions
317 =for apidoc sv_add_arena
319 Given a chunk of memory, link it to the head of the list of arenas,
320 and split it into a list of free SVs.
326 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
332 /* The first SV in an arena isn't an SV. */
333 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
334 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
335 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
337 PL_sv_arenaroot = sva;
338 PL_sv_root = sva + 1;
340 svend = &sva[SvREFCNT(sva) - 1];
343 SvANY(sv) = (void *)(SV*)(sv + 1);
347 /* Must always set typemask because it's awlays checked in on cleanup
348 when the arenas are walked looking for objects. */
349 SvFLAGS(sv) = SVTYPEMASK;
356 SvFLAGS(sv) = SVTYPEMASK;
359 /* visit(): call the named function for each non-free SV in the arenas
360 * whose flags field matches the flags/mask args. */
363 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
368 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
369 register SV * const svend = &sva[SvREFCNT(sva)];
371 for (sv = sva + 1; sv < svend; ++sv) {
372 if (SvTYPE(sv) != SVTYPEMASK
373 && (sv->sv_flags & mask) == flags
386 /* called by sv_report_used() for each live SV */
389 do_report_used(pTHX_ SV *sv)
391 if (SvTYPE(sv) != SVTYPEMASK) {
392 PerlIO_printf(Perl_debug_log, "****\n");
399 =for apidoc sv_report_used
401 Dump the contents of all SVs not yet freed. (Debugging aid).
407 Perl_sv_report_used(pTHX)
410 visit(do_report_used, 0, 0);
414 /* called by sv_clean_objs() for each live SV */
417 do_clean_objs(pTHX_ SV *sv)
421 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
422 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
434 /* XXX Might want to check arrays, etc. */
437 /* called by sv_clean_objs() for each live SV */
439 #ifndef DISABLE_DESTRUCTOR_KLUDGE
441 do_clean_named_objs(pTHX_ SV *sv)
443 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
444 if ( SvOBJECT(GvSV(sv)) ||
445 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
446 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
447 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
448 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
450 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
451 SvFLAGS(sv) |= SVf_BREAK;
459 =for apidoc sv_clean_objs
461 Attempt to destroy all objects not yet freed
467 Perl_sv_clean_objs(pTHX)
469 PL_in_clean_objs = TRUE;
470 visit(do_clean_objs, SVf_ROK, SVf_ROK);
471 #ifndef DISABLE_DESTRUCTOR_KLUDGE
472 /* some barnacles may yet remain, clinging to typeglobs */
473 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
475 PL_in_clean_objs = FALSE;
478 /* called by sv_clean_all() for each live SV */
481 do_clean_all(pTHX_ SV *sv)
483 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
484 SvFLAGS(sv) |= SVf_BREAK;
485 if (PL_comppad == (AV*)sv) {
487 PL_curpad = Null(SV**);
493 =for apidoc sv_clean_all
495 Decrement the refcnt of each remaining SV, possibly triggering a
496 cleanup. This function may have to be called multiple times to free
497 SVs which are in complex self-referential hierarchies.
503 Perl_sv_clean_all(pTHX)
506 PL_in_clean_all = TRUE;
507 cleaned = visit(do_clean_all, 0,0);
508 PL_in_clean_all = FALSE;
513 =for apidoc sv_free_arenas
515 Deallocate the memory used by all arenas. Note that all the individual SV
516 heads and bodies within the arenas must already have been freed.
522 Perl_sv_free_arenas(pTHX)
526 XPV *arena, *arenanext;
528 /* Free arenas here, but be careful about fake ones. (We assume
529 contiguity of the fake ones with the corresponding real ones.) */
531 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
532 svanext = (SV*) SvANY(sva);
533 while (svanext && SvFAKE(svanext))
534 svanext = (SV*) SvANY(svanext);
537 Safefree((void *)sva);
540 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
541 arenanext = (XPV*)arena->xpv_pv;
544 PL_xiv_arenaroot = 0;
547 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
548 arenanext = (XPV*)arena->xpv_pv;
551 PL_xnv_arenaroot = 0;
554 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
555 arenanext = (XPV*)arena->xpv_pv;
558 PL_xrv_arenaroot = 0;
561 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
562 arenanext = (XPV*)arena->xpv_pv;
565 PL_xpv_arenaroot = 0;
568 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
569 arenanext = (XPV*)arena->xpv_pv;
572 PL_xpviv_arenaroot = 0;
575 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
576 arenanext = (XPV*)arena->xpv_pv;
579 PL_xpvnv_arenaroot = 0;
582 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
583 arenanext = (XPV*)arena->xpv_pv;
586 PL_xpvcv_arenaroot = 0;
589 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
590 arenanext = (XPV*)arena->xpv_pv;
593 PL_xpvav_arenaroot = 0;
596 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
597 arenanext = (XPV*)arena->xpv_pv;
600 PL_xpvhv_arenaroot = 0;
603 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
604 arenanext = (XPV*)arena->xpv_pv;
607 PL_xpvmg_arenaroot = 0;
610 for (arena = (XPV*)PL_xpvgv_arenaroot; arena; arena = arenanext) {
611 arenanext = (XPV*)arena->xpv_pv;
614 PL_xpvgv_arenaroot = 0;
617 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
618 arenanext = (XPV*)arena->xpv_pv;
621 PL_xpvlv_arenaroot = 0;
624 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
625 arenanext = (XPV*)arena->xpv_pv;
628 PL_xpvbm_arenaroot = 0;
634 for (he = PL_he_arenaroot; he; he = he_next) {
635 he_next = HeNEXT(he);
642 #if defined(USE_ITHREADS)
644 struct ptr_tbl_ent *pte;
645 struct ptr_tbl_ent *pte_next;
646 for (pte = PL_pte_arenaroot; pte; pte = pte_next) {
647 pte_next = pte->next;
651 PL_pte_arenaroot = 0;
656 Safefree(PL_nice_chunk);
657 PL_nice_chunk = Nullch;
658 PL_nice_chunk_size = 0;
663 /* ---------------------------------------------------------------------
665 * support functions for report_uninit()
668 /* the maxiumum size of array or hash where we will scan looking
669 * for the undefined element that triggered the warning */
671 #define FUV_MAX_SEARCH_SIZE 1000
673 /* Look for an entry in the hash whose value has the same SV as val;
674 * If so, return a mortal copy of the key. */
677 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
683 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
684 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
689 for (i=HvMAX(hv); i>0; i--) {
691 for (entry = array[i]; entry; entry = HeNEXT(entry)) {
692 if (HeVAL(entry) != val)
694 if ( HeVAL(entry) == &PL_sv_undef ||
695 HeVAL(entry) == &PL_sv_placeholder)
699 if (HeKLEN(entry) == HEf_SVKEY)
700 return sv_mortalcopy(HeKEY_sv(entry));
701 return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
707 /* Look for an entry in the array whose value has the same SV as val;
708 * If so, return the index, otherwise return -1. */
711 S_find_array_subscript(pTHX_ AV *av, SV* val)
715 if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
716 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
720 for (i=AvFILLp(av); i>=0; i--) {
721 if (svp[i] == val && svp[i] != &PL_sv_undef)
727 /* S_varname(): return the name of a variable, optionally with a subscript.
728 * If gv is non-zero, use the name of that global, along with gvtype (one
729 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
730 * targ. Depending on the value of the subscript_type flag, return:
733 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */
734 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */
735 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */
736 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */
739 S_varname(pTHX_ GV *gv, const char *gvtype, PADOFFSET targ,
740 SV* keyname, I32 aindex, int subscript_type)
745 SV * const name = sv_newmortal();
748 /* simulate gv_fullname4(), but add literal '^' for $^FOO names
749 * XXX get rid of all this if gv_fullnameX() ever supports this
753 HV *hv = GvSTASH(gv);
754 sv_setpv(name, gvtype);
757 else if (!(p=HvNAME_get(hv)))
759 if (strNE(p, "main")) {
761 sv_catpvn(name,"::", 2);
763 if (GvNAMELEN(gv)>= 1 &&
764 ((unsigned int)*GvNAME(gv)) <= 26)
766 Perl_sv_catpvf(aTHX_ name,"^%c", *GvNAME(gv) + 'A' - 1);
767 sv_catpvn(name,GvNAME(gv)+1,GvNAMELEN(gv)-1);
770 sv_catpvn(name,GvNAME(gv),GvNAMELEN(gv));
774 CV *cv = find_runcv(&u);
775 if (!cv || !CvPADLIST(cv))
777 av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
778 sv = *av_fetch(av, targ, FALSE);
779 /* SvLEN in a pad name is not to be trusted */
780 sv_setpv(name, SvPV_nolen(sv));
783 if (subscript_type == FUV_SUBSCRIPT_HASH) {
786 Perl_sv_catpvf(aTHX_ name, "{%s}",
787 pv_display(sv,SvPVX(keyname), SvCUR(keyname), 0, 32));
790 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
792 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
794 else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
795 sv_insert(name, 0, 0, "within ", 7);
802 =for apidoc find_uninit_var
804 Find the name of the undefined variable (if any) that caused the operator o
805 to issue a "Use of uninitialized value" warning.
806 If match is true, only return a name if it's value matches uninit_sv.
807 So roughly speaking, if a unary operator (such as OP_COS) generates a
808 warning, then following the direct child of the op may yield an
809 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
810 other hand, with OP_ADD there are two branches to follow, so we only print
811 the variable name if we get an exact match.
813 The name is returned as a mortal SV.
815 Assumes that PL_op is the op that originally triggered the error, and that
816 PL_comppad/PL_curpad points to the currently executing pad.
822 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
831 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
832 uninit_sv == &PL_sv_placeholder)))
835 switch (obase->op_type) {
842 const bool pad = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
843 const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
846 int subscript_type = FUV_SUBSCRIPT_WITHIN;
848 if (pad) { /* @lex, %lex */
849 sv = PAD_SVl(obase->op_targ);
853 if (cUNOPx(obase)->op_first->op_type == OP_GV) {
854 /* @global, %global */
855 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
858 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
860 else /* @{expr}, %{expr} */
861 return find_uninit_var(cUNOPx(obase)->op_first,
865 /* attempt to find a match within the aggregate */
867 keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
869 subscript_type = FUV_SUBSCRIPT_HASH;
872 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
874 subscript_type = FUV_SUBSCRIPT_ARRAY;
877 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
880 return S_varname(aTHX_ gv, hash ? "%" : "@", obase->op_targ,
881 keysv, index, subscript_type);
885 if (match && PAD_SVl(obase->op_targ) != uninit_sv)
887 return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
888 Nullsv, 0, FUV_SUBSCRIPT_NONE);
891 gv = cGVOPx_gv(obase);
892 if (!gv || (match && GvSV(gv) != uninit_sv))
894 return S_varname(aTHX_ gv, "$", 0, Nullsv, 0, FUV_SUBSCRIPT_NONE);
897 if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
899 av = (AV*)PAD_SV(obase->op_targ);
900 if (!av || SvRMAGICAL(av))
902 svp = av_fetch(av, (I32)obase->op_private, FALSE);
903 if (!svp || *svp != uninit_sv)
906 return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
907 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
910 gv = cGVOPx_gv(obase);
915 if (!av || SvRMAGICAL(av))
917 svp = av_fetch(av, (I32)obase->op_private, FALSE);
918 if (!svp || *svp != uninit_sv)
921 return S_varname(aTHX_ gv, "$", 0,
922 Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
927 o = cUNOPx(obase)->op_first;
928 if (!o || o->op_type != OP_NULL ||
929 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
931 return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
936 /* $a[uninit_expr] or $h{uninit_expr} */
937 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
940 o = cBINOPx(obase)->op_first;
941 kid = cBINOPx(obase)->op_last;
943 /* get the av or hv, and optionally the gv */
945 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
946 sv = PAD_SV(o->op_targ);
948 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
949 && cUNOPo->op_first->op_type == OP_GV)
951 gv = cGVOPx_gv(cUNOPo->op_first);
954 sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
959 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
960 /* index is constant */
964 if (obase->op_type == OP_HELEM) {
965 HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
966 if (!he || HeVAL(he) != uninit_sv)
970 svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
971 if (!svp || *svp != uninit_sv)
975 if (obase->op_type == OP_HELEM)
976 return S_varname(aTHX_ gv, "%", o->op_targ,
977 cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
979 return S_varname(aTHX_ gv, "@", o->op_targ, Nullsv,
980 SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
984 /* index is an expression;
985 * attempt to find a match within the aggregate */
986 if (obase->op_type == OP_HELEM) {
987 SV *keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
989 return S_varname(aTHX_ gv, "%", o->op_targ,
990 keysv, 0, FUV_SUBSCRIPT_HASH);
993 const I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
995 return S_varname(aTHX_ gv, "@", o->op_targ,
996 Nullsv, index, FUV_SUBSCRIPT_ARRAY);
1000 return S_varname(aTHX_ gv,
1001 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
1003 o->op_targ, Nullsv, 0, FUV_SUBSCRIPT_WITHIN);
1009 /* only examine RHS */
1010 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
1013 o = cUNOPx(obase)->op_first;
1014 if (o->op_type == OP_PUSHMARK)
1017 if (!o->op_sibling) {
1018 /* one-arg version of open is highly magical */
1020 if (o->op_type == OP_GV) { /* open FOO; */
1022 if (match && GvSV(gv) != uninit_sv)
1024 return S_varname(aTHX_ gv, "$", 0,
1025 Nullsv, 0, FUV_SUBSCRIPT_NONE);
1027 /* other possibilities not handled are:
1028 * open $x; or open my $x; should return '${*$x}'
1029 * open expr; should return '$'.expr ideally
1035 /* ops where $_ may be an implicit arg */
1039 if ( !(obase->op_flags & OPf_STACKED)) {
1040 if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
1041 ? PAD_SVl(obase->op_targ)
1044 sv = sv_newmortal();
1053 /* skip filehandle as it can't produce 'undef' warning */
1054 o = cUNOPx(obase)->op_first;
1055 if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
1056 o = o->op_sibling->op_sibling;
1063 match = 1; /* XS or custom code could trigger random warnings */
1068 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
1069 return sv_2mortal(newSVpv("${$/}", 0));
1074 if (!(obase->op_flags & OPf_KIDS))
1076 o = cUNOPx(obase)->op_first;
1082 /* if all except one arg are constant, or have no side-effects,
1083 * or are optimized away, then it's unambiguous */
1085 for (kid=o; kid; kid = kid->op_sibling) {
1087 ( (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
1088 || (kid->op_type == OP_NULL && ! (kid->op_flags & OPf_KIDS))
1089 || (kid->op_type == OP_PUSHMARK)
1093 if (o2) { /* more than one found */
1100 return find_uninit_var(o2, uninit_sv, match);
1104 sv = find_uninit_var(o, uninit_sv, 1);
1116 =for apidoc report_uninit
1118 Print appropriate "Use of uninitialized variable" warning
1124 Perl_report_uninit(pTHX_ SV* uninit_sv)
1127 SV* varname = Nullsv;
1129 varname = find_uninit_var(PL_op, uninit_sv,0);
1131 sv_insert(varname, 0, 0, " ", 1);
1133 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1134 varname ? SvPV_nolen(varname) : "",
1135 " in ", OP_DESC(PL_op));
1138 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1143 /* allocate another arena's worth of struct xrv */
1151 New(712, ptr, PERL_ARENA_SIZE/sizeof(XPV), XPV);
1152 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
1153 PL_xrv_arenaroot = ptr;
1156 xrvend = &xrv[PERL_ARENA_SIZE / sizeof(XRV) - 1];
1157 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
1159 while (xrv < xrvend) {
1160 xrv->xrv_rv = (SV*)(xrv + 1);
1166 /* allocate another arena's worth of IV bodies */
1174 New(705, ptr, PERL_ARENA_SIZE/sizeof(XPV), XPV);
1175 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
1176 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
1179 xivend = &xiv[PERL_ARENA_SIZE / sizeof(IV) - 1];
1180 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
1182 while (xiv < xivend) {
1183 *(IV**)xiv = (IV *)(xiv + 1);
1189 /* allocate another arena's worth of NV bodies */
1197 New(711, ptr, PERL_ARENA_SIZE/sizeof(XPV), XPV);
1198 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
1199 PL_xnv_arenaroot = ptr;
1202 xnvend = &xnv[PERL_ARENA_SIZE / sizeof(NV) - 1];
1203 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
1205 while (xnv < xnvend) {
1206 *(NV**)xnv = (NV*)(xnv + 1);
1212 /* allocate another arena's worth of struct xpv */
1219 New(713, xpv, PERL_ARENA_SIZE/sizeof(XPV), XPV);
1220 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
1221 PL_xpv_arenaroot = xpv;
1223 xpvend = &xpv[PERL_ARENA_SIZE / sizeof(XPV) - 1];
1224 PL_xpv_root = ++xpv;
1225 while (xpv < xpvend) {
1226 xpv->xpv_pv = (char*)(xpv + 1);
1232 /* allocate another arena's worth of struct xpviv */
1239 New(714, xpviv, PERL_ARENA_SIZE/sizeof(XPVIV), XPVIV);
1240 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
1241 PL_xpviv_arenaroot = xpviv;
1243 xpvivend = &xpviv[PERL_ARENA_SIZE / sizeof(XPVIV) - 1];
1244 PL_xpviv_root = ++xpviv;
1245 while (xpviv < xpvivend) {
1246 xpviv->xpv_pv = (char*)(xpviv + 1);
1252 /* allocate another arena's worth of struct xpvnv */
1259 New(715, xpvnv, PERL_ARENA_SIZE/sizeof(XPVNV), XPVNV);
1260 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
1261 PL_xpvnv_arenaroot = xpvnv;
1263 xpvnvend = &xpvnv[PERL_ARENA_SIZE / sizeof(XPVNV) - 1];
1264 PL_xpvnv_root = ++xpvnv;
1265 while (xpvnv < xpvnvend) {
1266 xpvnv->xpv_pv = (char*)(xpvnv + 1);
1272 /* allocate another arena's worth of struct xpvcv */
1279 New(716, xpvcv, PERL_ARENA_SIZE/sizeof(XPVCV), XPVCV);
1280 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
1281 PL_xpvcv_arenaroot = xpvcv;
1283 xpvcvend = &xpvcv[PERL_ARENA_SIZE / sizeof(XPVCV) - 1];
1284 PL_xpvcv_root = ++xpvcv;
1285 while (xpvcv < xpvcvend) {
1286 xpvcv->xpv_pv = (char*)(xpvcv + 1);
1292 /* allocate another arena's worth of struct xpvav */
1299 New(717, xpvav, PERL_ARENA_SIZE/sizeof(XPVAV), XPVAV);
1300 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
1301 PL_xpvav_arenaroot = xpvav;
1303 xpvavend = &xpvav[PERL_ARENA_SIZE / sizeof(XPVAV) - 1];
1304 PL_xpvav_root = ++xpvav;
1305 while (xpvav < xpvavend) {
1306 xpvav->xav_array = (char*)(xpvav + 1);
1309 xpvav->xav_array = 0;
1312 /* allocate another arena's worth of struct xpvhv */
1319 New(718, xpvhv, PERL_ARENA_SIZE/sizeof(XPVHV), XPVHV);
1320 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
1321 PL_xpvhv_arenaroot = xpvhv;
1323 xpvhvend = &xpvhv[PERL_ARENA_SIZE / sizeof(XPVHV) - 1];
1324 PL_xpvhv_root = ++xpvhv;
1325 while (xpvhv < xpvhvend) {
1326 xpvhv->xhv_array = (char*)(xpvhv + 1);
1329 xpvhv->xhv_array = 0;
1332 /* allocate another arena's worth of struct xpvmg */
1339 New(719, xpvmg, PERL_ARENA_SIZE/sizeof(XPVMG), XPVMG);
1340 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
1341 PL_xpvmg_arenaroot = xpvmg;
1343 xpvmgend = &xpvmg[PERL_ARENA_SIZE / sizeof(XPVMG) - 1];
1344 PL_xpvmg_root = ++xpvmg;
1345 while (xpvmg < xpvmgend) {
1346 xpvmg->xpv_pv = (char*)(xpvmg + 1);
1352 /* allocate another arena's worth of struct xpvgv */
1359 New(720, xpvgv, PERL_ARENA_SIZE/sizeof(XPVGV), XPVGV);
1360 xpvgv->xpv_pv = (char*)PL_xpvgv_arenaroot;
1361 PL_xpvgv_arenaroot = xpvgv;
1363 xpvgvend = &xpvgv[PERL_ARENA_SIZE / sizeof(XPVGV) - 1];
1364 PL_xpvgv_root = ++xpvgv;
1365 while (xpvgv < xpvgvend) {
1366 xpvgv->xpv_pv = (char*)(xpvgv + 1);
1372 /* allocate another arena's worth of struct xpvlv */
1379 New(720, xpvlv, PERL_ARENA_SIZE/sizeof(XPVLV), XPVLV);
1380 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
1381 PL_xpvlv_arenaroot = xpvlv;
1383 xpvlvend = &xpvlv[PERL_ARENA_SIZE / sizeof(XPVLV) - 1];
1384 PL_xpvlv_root = ++xpvlv;
1385 while (xpvlv < xpvlvend) {
1386 xpvlv->xpv_pv = (char*)(xpvlv + 1);
1392 /* allocate another arena's worth of struct xpvbm */
1399 New(721, xpvbm, PERL_ARENA_SIZE/sizeof(XPVBM), XPVBM);
1400 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
1401 PL_xpvbm_arenaroot = xpvbm;
1403 xpvbmend = &xpvbm[PERL_ARENA_SIZE / sizeof(XPVBM) - 1];
1404 PL_xpvbm_root = ++xpvbm;
1405 while (xpvbm < xpvbmend) {
1406 xpvbm->xpv_pv = (char*)(xpvbm + 1);
1412 /* grab a new struct xrv from the free list, allocating more if necessary */
1422 PL_xrv_root = (XRV*)xrv->xrv_rv;
1427 /* return a struct xrv to the free list */
1430 S_del_xrv(pTHX_ XRV *p)
1433 p->xrv_rv = (SV*)PL_xrv_root;
1438 /* grab a new IV body from the free list, allocating more if necessary */
1449 * See comment in more_xiv() -- RAM.
1451 PL_xiv_root = *(IV**)xiv;
1453 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
1456 /* return an IV body to the free list */
1459 S_del_xiv(pTHX_ XPVIV *p)
1461 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
1463 *(IV**)xiv = PL_xiv_root;
1468 /* grab a new NV body from the free list, allocating more if necessary */
1478 PL_xnv_root = *(NV**)xnv;
1480 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
1483 /* return an NV body to the free list */
1486 S_del_xnv(pTHX_ XPVNV *p)
1488 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
1490 *(NV**)xnv = PL_xnv_root;
1495 /* grab a new struct xpv from the free list, allocating more if necessary */
1505 PL_xpv_root = (XPV*)xpv->xpv_pv;
1510 /* return a struct xpv to the free list */
1513 S_del_xpv(pTHX_ XPV *p)
1516 p->xpv_pv = (char*)PL_xpv_root;
1521 /* grab a new struct xpviv from the free list, allocating more if necessary */
1530 xpviv = PL_xpviv_root;
1531 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
1536 /* return a struct xpviv to the free list */
1539 S_del_xpviv(pTHX_ XPVIV *p)
1542 p->xpv_pv = (char*)PL_xpviv_root;
1547 /* grab a new struct xpvnv from the free list, allocating more if necessary */
1556 xpvnv = PL_xpvnv_root;
1557 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
1562 /* return a struct xpvnv to the free list */
1565 S_del_xpvnv(pTHX_ XPVNV *p)
1568 p->xpv_pv = (char*)PL_xpvnv_root;
1573 /* grab a new struct xpvcv from the free list, allocating more if necessary */
1582 xpvcv = PL_xpvcv_root;
1583 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
1588 /* return a struct xpvcv to the free list */
1591 S_del_xpvcv(pTHX_ XPVCV *p)
1594 p->xpv_pv = (char*)PL_xpvcv_root;
1599 /* grab a new struct xpvav from the free list, allocating more if necessary */
1608 xpvav = PL_xpvav_root;
1609 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
1614 /* return a struct xpvav to the free list */
1617 S_del_xpvav(pTHX_ XPVAV *p)
1620 p->xav_array = (char*)PL_xpvav_root;
1625 /* grab a new struct xpvhv from the free list, allocating more if necessary */
1634 xpvhv = PL_xpvhv_root;
1635 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
1640 /* return a struct xpvhv to the free list */
1643 S_del_xpvhv(pTHX_ XPVHV *p)
1646 p->xhv_array = (char*)PL_xpvhv_root;
1651 /* grab a new struct xpvmg from the free list, allocating more if necessary */
1660 xpvmg = PL_xpvmg_root;
1661 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
1666 /* return a struct xpvmg to the free list */
1669 S_del_xpvmg(pTHX_ XPVMG *p)
1672 p->xpv_pv = (char*)PL_xpvmg_root;
1677 /* grab a new struct xpvgv from the free list, allocating more if necessary */
1686 xpvgv = PL_xpvgv_root;
1687 PL_xpvgv_root = (XPVGV*)xpvgv->xpv_pv;
1692 /* return a struct xpvgv to the free list */
1695 S_del_xpvgv(pTHX_ XPVGV *p)
1698 p->xpv_pv = (char*)PL_xpvgv_root;
1703 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1712 xpvlv = PL_xpvlv_root;
1713 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
1718 /* return a struct xpvlv to the free list */
1721 S_del_xpvlv(pTHX_ XPVLV *p)
1724 p->xpv_pv = (char*)PL_xpvlv_root;
1729 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1738 xpvbm = PL_xpvbm_root;
1739 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
1744 /* return a struct xpvbm to the free list */
1747 S_del_xpvbm(pTHX_ XPVBM *p)
1750 p->xpv_pv = (char*)PL_xpvbm_root;
1755 #define my_safemalloc(s) (void*)safemalloc(s)
1756 #define my_safefree(p) safefree((char*)p)
1760 #define new_XIV() my_safemalloc(sizeof(XPVIV))
1761 #define del_XIV(p) my_safefree(p)
1763 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1764 #define del_XNV(p) my_safefree(p)
1766 #define new_XRV() my_safemalloc(sizeof(XRV))
1767 #define del_XRV(p) my_safefree(p)
1769 #define new_XPV() my_safemalloc(sizeof(XPV))
1770 #define del_XPV(p) my_safefree(p)
1772 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1773 #define del_XPVIV(p) my_safefree(p)
1775 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1776 #define del_XPVNV(p) my_safefree(p)
1778 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1779 #define del_XPVCV(p) my_safefree(p)
1781 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1782 #define del_XPVAV(p) my_safefree(p)
1784 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1785 #define del_XPVHV(p) my_safefree(p)
1787 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1788 #define del_XPVMG(p) my_safefree(p)
1790 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1791 #define del_XPVGV(p) my_safefree(p)
1793 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1794 #define del_XPVLV(p) my_safefree(p)
1796 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1797 #define del_XPVBM(p) my_safefree(p)
1801 #define new_XIV() (void*)new_xiv()
1802 #define del_XIV(p) del_xiv((XPVIV*) p)
1804 #define new_XNV() (void*)new_xnv()
1805 #define del_XNV(p) del_xnv((XPVNV*) p)
1807 #define new_XRV() (void*)new_xrv()
1808 #define del_XRV(p) del_xrv((XRV*) p)
1810 #define new_XPV() (void*)new_xpv()
1811 #define del_XPV(p) del_xpv((XPV *)p)
1813 #define new_XPVIV() (void*)new_xpviv()
1814 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
1816 #define new_XPVNV() (void*)new_xpvnv()
1817 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
1819 #define new_XPVCV() (void*)new_xpvcv()
1820 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
1822 #define new_XPVAV() (void*)new_xpvav()
1823 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
1825 #define new_XPVHV() (void*)new_xpvhv()
1826 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
1828 #define new_XPVMG() (void*)new_xpvmg()
1829 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
1831 #define new_XPVGV() (void*)new_xpvgv()
1832 #define del_XPVGV(p) del_xpvgv((XPVGV *)p)
1834 #define new_XPVLV() (void*)new_xpvlv()
1835 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
1837 #define new_XPVBM() (void*)new_xpvbm()
1838 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
1842 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1843 #define del_XPVFM(p) my_safefree(p)
1845 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1846 #define del_XPVIO(p) my_safefree(p)
1849 =for apidoc sv_upgrade
1851 Upgrade an SV to a more complex form. Generally adds a new body type to the
1852 SV, then copies across as much information as possible from the old body.
1853 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1859 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1870 if (mt != SVt_PV && SvIsCOW(sv)) {
1871 sv_force_normal_flags(sv, 0);
1874 if (SvTYPE(sv) == mt)
1885 switch (SvTYPE(sv)) {
1893 else if (mt < SVt_PVIV)
1903 pv = (char*)SvRV(sv);
1913 else if (mt == SVt_NV)
1921 del_XPVIV(SvANY(sv));
1929 del_XPVNV(SvANY(sv));
1932 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1933 there's no way that it can be safely upgraded, because perl.c
1934 expects to Safefree(SvANY(PL_mess_sv)) */
1935 assert(sv != PL_mess_sv);
1936 /* This flag bit is used to mean other things in other scalar types.
1937 Given that it only has meaning inside the pad, it shouldn't be set
1938 on anything that can get upgraded. */
1939 assert((SvFLAGS(sv) & SVpad_TYPED) == 0);
1945 magic = SvMAGIC(sv);
1946 stash = SvSTASH(sv);
1947 del_XPVMG(SvANY(sv));
1950 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1953 SvFLAGS(sv) &= ~SVTYPEMASK;
1958 Perl_croak(aTHX_ "Can't upgrade to undef");
1960 SvANY(sv) = new_XIV();
1964 SvANY(sv) = new_XNV();
1968 SvANY(sv) = new_XRV();
1969 SvRV_set(sv, (SV*)pv);
1972 SvANY(sv) = new_XPVHV();
1973 ((XPVHV*) SvANY(sv))->xhv_aux = 0;
1976 HvTOTALKEYS(sv) = 0;
1978 /* Fall through... */
1981 SvANY(sv) = new_XPVAV();
1991 /* XXX? Only SVt_NULL is ever upgraded to AV or HV? */
1993 /* FIXME. Should be able to remove all this if()... if the above
1994 assertion is genuinely always true. */
1997 SvFLAGS(sv) &= ~SVf_OOK;
2000 SvPV_set(sv, (char*)0);
2001 SvMAGIC_set(sv, magic);
2002 SvSTASH_set(sv, stash);
2006 SvANY(sv) = new_XPVIO();
2007 Zero(SvANY(sv), 1, XPVIO);
2008 IoPAGE_LEN(sv) = 60;
2009 goto set_magic_common;
2011 SvANY(sv) = new_XPVFM();
2012 Zero(SvANY(sv), 1, XPVFM);
2013 goto set_magic_common;
2015 SvANY(sv) = new_XPVBM();
2019 goto set_magic_common;
2021 SvANY(sv) = new_XPVGV();
2027 goto set_magic_common;
2029 SvANY(sv) = new_XPVCV();
2030 Zero(SvANY(sv), 1, XPVCV);
2031 goto set_magic_common;
2033 SvANY(sv) = new_XPVLV();
2046 SvANY(sv) = new_XPVMG();
2049 SvMAGIC_set(sv, magic);
2050 SvSTASH_set(sv, stash);
2054 SvANY(sv) = new_XPVNV();
2060 SvANY(sv) = new_XPVIV();
2069 SvANY(sv) = new_XPV();
2080 =for apidoc sv_backoff
2082 Remove any string offset. You should normally use the C<SvOOK_off> macro
2089 Perl_sv_backoff(pTHX_ register SV *sv)
2093 char *s = SvPVX(sv);
2094 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
2095 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
2097 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
2099 SvFLAGS(sv) &= ~SVf_OOK;
2106 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
2107 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
2108 Use the C<SvGROW> wrapper instead.
2114 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
2118 #ifdef HAS_64K_LIMIT
2119 if (newlen >= 0x10000) {
2120 PerlIO_printf(Perl_debug_log,
2121 "Allocation too large: %"UVxf"\n", (UV)newlen);
2124 #endif /* HAS_64K_LIMIT */
2127 if (SvTYPE(sv) < SVt_PV) {
2128 sv_upgrade(sv, SVt_PV);
2131 else if (SvOOK(sv)) { /* pv is offset? */
2134 if (newlen > SvLEN(sv))
2135 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
2136 #ifdef HAS_64K_LIMIT
2137 if (newlen >= 0x10000)
2144 if (newlen > SvLEN(sv)) { /* need more room? */
2145 if (SvLEN(sv) && s) {
2147 const STRLEN l = malloced_size((void*)SvPVX(sv));
2153 Renew(s,newlen,char);
2156 New(703, s, newlen, char);
2157 if (SvPVX(sv) && SvCUR(sv)) {
2158 Move(SvPVX(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
2162 SvLEN_set(sv, newlen);
2168 =for apidoc sv_setiv
2170 Copies an integer into the given SV, upgrading first if necessary.
2171 Does not handle 'set' magic. See also C<sv_setiv_mg>.
2177 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
2179 SV_CHECK_THINKFIRST_COW_DROP(sv);
2180 switch (SvTYPE(sv)) {
2182 sv_upgrade(sv, SVt_IV);
2185 sv_upgrade(sv, SVt_PVNV);
2189 sv_upgrade(sv, SVt_PVIV);
2198 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
2201 (void)SvIOK_only(sv); /* validate number */
2207 =for apidoc sv_setiv_mg
2209 Like C<sv_setiv>, but also handles 'set' magic.
2215 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
2222 =for apidoc sv_setuv
2224 Copies an unsigned integer into the given SV, upgrading first if necessary.
2225 Does not handle 'set' magic. See also C<sv_setuv_mg>.
2231 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
2233 /* With these two if statements:
2234 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
2237 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
2239 If you wish to remove them, please benchmark to see what the effect is
2241 if (u <= (UV)IV_MAX) {
2242 sv_setiv(sv, (IV)u);
2251 =for apidoc sv_setuv_mg
2253 Like C<sv_setuv>, but also handles 'set' magic.
2259 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
2261 /* With these two if statements:
2262 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
2265 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
2267 If you wish to remove them, please benchmark to see what the effect is
2269 if (u <= (UV)IV_MAX) {
2270 sv_setiv(sv, (IV)u);
2280 =for apidoc sv_setnv
2282 Copies a double into the given SV, upgrading first if necessary.
2283 Does not handle 'set' magic. See also C<sv_setnv_mg>.
2289 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
2291 SV_CHECK_THINKFIRST_COW_DROP(sv);
2292 switch (SvTYPE(sv)) {
2295 sv_upgrade(sv, SVt_NV);
2300 sv_upgrade(sv, SVt_PVNV);
2309 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
2313 (void)SvNOK_only(sv); /* validate number */
2318 =for apidoc sv_setnv_mg
2320 Like C<sv_setnv>, but also handles 'set' magic.
2326 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
2332 /* Print an "isn't numeric" warning, using a cleaned-up,
2333 * printable version of the offending string
2337 S_not_a_number(pTHX_ SV *sv)
2344 dsv = sv_2mortal(newSVpv("", 0));
2345 pv = sv_uni_display(dsv, sv, 10, 0);
2348 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
2349 /* each *s can expand to 4 chars + "...\0",
2350 i.e. need room for 8 chars */
2353 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
2355 if (ch & 128 && !isPRINT_LC(ch)) {
2364 else if (ch == '\r') {
2368 else if (ch == '\f') {
2372 else if (ch == '\\') {
2376 else if (ch == '\0') {
2380 else if (isPRINT_LC(ch))
2397 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2398 "Argument \"%s\" isn't numeric in %s", pv,
2401 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2402 "Argument \"%s\" isn't numeric", pv);
2406 =for apidoc looks_like_number
2408 Test if the content of an SV looks like a number (or is a number).
2409 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
2410 non-numeric warning), even if your atof() doesn't grok them.
2416 Perl_looks_like_number(pTHX_ SV *sv)
2418 register const char *sbegin;
2425 else if (SvPOKp(sv))
2426 sbegin = SvPV(sv, len);
2428 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
2429 return grok_number(sbegin, len, NULL);
2432 /* Actually, ISO C leaves conversion of UV to IV undefined, but
2433 until proven guilty, assume that things are not that bad... */
2438 As 64 bit platforms often have an NV that doesn't preserve all bits of
2439 an IV (an assumption perl has been based on to date) it becomes necessary
2440 to remove the assumption that the NV always carries enough precision to
2441 recreate the IV whenever needed, and that the NV is the canonical form.
2442 Instead, IV/UV and NV need to be given equal rights. So as to not lose
2443 precision as a side effect of conversion (which would lead to insanity
2444 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
2445 1) to distinguish between IV/UV/NV slots that have cached a valid
2446 conversion where precision was lost and IV/UV/NV slots that have a
2447 valid conversion which has lost no precision
2448 2) to ensure that if a numeric conversion to one form is requested that
2449 would lose precision, the precise conversion (or differently
2450 imprecise conversion) is also performed and cached, to prevent
2451 requests for different numeric formats on the same SV causing
2452 lossy conversion chains. (lossless conversion chains are perfectly
2457 SvIOKp is true if the IV slot contains a valid value
2458 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
2459 SvNOKp is true if the NV slot contains a valid value
2460 SvNOK is true only if the NV value is accurate
2463 while converting from PV to NV, check to see if converting that NV to an
2464 IV(or UV) would lose accuracy over a direct conversion from PV to
2465 IV(or UV). If it would, cache both conversions, return NV, but mark
2466 SV as IOK NOKp (ie not NOK).
2468 While converting from PV to IV, check to see if converting that IV to an
2469 NV would lose accuracy over a direct conversion from PV to NV. If it
2470 would, cache both conversions, flag similarly.
2472 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2473 correctly because if IV & NV were set NV *always* overruled.
2474 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2475 changes - now IV and NV together means that the two are interchangeable:
2476 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2478 The benefit of this is that operations such as pp_add know that if
2479 SvIOK is true for both left and right operands, then integer addition
2480 can be used instead of floating point (for cases where the result won't
2481 overflow). Before, floating point was always used, which could lead to
2482 loss of precision compared with integer addition.
2484 * making IV and NV equal status should make maths accurate on 64 bit
2486 * may speed up maths somewhat if pp_add and friends start to use
2487 integers when possible instead of fp. (Hopefully the overhead in
2488 looking for SvIOK and checking for overflow will not outweigh the
2489 fp to integer speedup)
2490 * will slow down integer operations (callers of SvIV) on "inaccurate"
2491 values, as the change from SvIOK to SvIOKp will cause a call into
2492 sv_2iv each time rather than a macro access direct to the IV slot
2493 * should speed up number->string conversion on integers as IV is
2494 favoured when IV and NV are equally accurate
2496 ####################################################################
2497 You had better be using SvIOK_notUV if you want an IV for arithmetic:
2498 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2499 On the other hand, SvUOK is true iff UV.
2500 ####################################################################
2502 Your mileage will vary depending your CPU's relative fp to integer
2506 #ifndef NV_PRESERVES_UV
2507 # define IS_NUMBER_UNDERFLOW_IV 1
2508 # define IS_NUMBER_UNDERFLOW_UV 2
2509 # define IS_NUMBER_IV_AND_UV 2
2510 # define IS_NUMBER_OVERFLOW_IV 4
2511 # define IS_NUMBER_OVERFLOW_UV 5
2513 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2515 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2517 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2519 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2520 if (SvNVX(sv) < (NV)IV_MIN) {
2521 (void)SvIOKp_on(sv);
2523 SvIV_set(sv, IV_MIN);
2524 return IS_NUMBER_UNDERFLOW_IV;
2526 if (SvNVX(sv) > (NV)UV_MAX) {
2527 (void)SvIOKp_on(sv);
2530 SvUV_set(sv, UV_MAX);
2531 return IS_NUMBER_OVERFLOW_UV;
2533 (void)SvIOKp_on(sv);
2535 /* Can't use strtol etc to convert this string. (See truth table in
2537 if (SvNVX(sv) <= (UV)IV_MAX) {
2538 SvIV_set(sv, I_V(SvNVX(sv)));
2539 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2540 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2542 /* Integer is imprecise. NOK, IOKp */
2544 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2547 SvUV_set(sv, U_V(SvNVX(sv)));
2548 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2549 if (SvUVX(sv) == UV_MAX) {
2550 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2551 possibly be preserved by NV. Hence, it must be overflow.
2553 return IS_NUMBER_OVERFLOW_UV;
2555 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2557 /* Integer is imprecise. NOK, IOKp */
2559 return IS_NUMBER_OVERFLOW_IV;
2561 #endif /* !NV_PRESERVES_UV*/
2563 /* sv_2iv() is now a macro using Perl_sv_2iv_flags();
2564 * this function provided for binary compatibility only
2568 Perl_sv_2iv(pTHX_ register SV *sv)
2570 return sv_2iv_flags(sv, SV_GMAGIC);
2574 =for apidoc sv_2iv_flags
2576 Return the integer value of an SV, doing any necessary string
2577 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2578 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2584 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2588 if (SvGMAGICAL(sv)) {
2589 if (flags & SV_GMAGIC)
2594 return I_V(SvNVX(sv));
2596 if (SvPOKp(sv) && SvLEN(sv))
2599 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2600 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2606 if (SvTHINKFIRST(sv)) {
2609 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2610 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2611 return SvIV(tmpstr);
2612 return PTR2IV(SvRV(sv));
2615 sv_force_normal_flags(sv, 0);
2617 if (SvREADONLY(sv) && !SvOK(sv)) {
2618 if (ckWARN(WARN_UNINITIALIZED))
2625 return (IV)(SvUVX(sv));
2632 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2633 * without also getting a cached IV/UV from it at the same time
2634 * (ie PV->NV conversion should detect loss of accuracy and cache
2635 * IV or UV at same time to avoid this. NWC */
2637 if (SvTYPE(sv) == SVt_NV)
2638 sv_upgrade(sv, SVt_PVNV);
2640 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2641 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2642 certainly cast into the IV range at IV_MAX, whereas the correct
2643 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2645 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2646 SvIV_set(sv, I_V(SvNVX(sv)));
2647 if (SvNVX(sv) == (NV) SvIVX(sv)
2648 #ifndef NV_PRESERVES_UV
2649 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2650 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2651 /* Don't flag it as "accurately an integer" if the number
2652 came from a (by definition imprecise) NV operation, and
2653 we're outside the range of NV integer precision */
2656 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2657 DEBUG_c(PerlIO_printf(Perl_debug_log,
2658 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2664 /* IV not precise. No need to convert from PV, as NV
2665 conversion would already have cached IV if it detected
2666 that PV->IV would be better than PV->NV->IV
2667 flags already correct - don't set public IOK. */
2668 DEBUG_c(PerlIO_printf(Perl_debug_log,
2669 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2674 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2675 but the cast (NV)IV_MIN rounds to a the value less (more
2676 negative) than IV_MIN which happens to be equal to SvNVX ??
2677 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2678 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2679 (NV)UVX == NVX are both true, but the values differ. :-(
2680 Hopefully for 2s complement IV_MIN is something like
2681 0x8000000000000000 which will be exact. NWC */
2684 SvUV_set(sv, U_V(SvNVX(sv)));
2686 (SvNVX(sv) == (NV) SvUVX(sv))
2687 #ifndef NV_PRESERVES_UV
2688 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2689 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2690 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2691 /* Don't flag it as "accurately an integer" if the number
2692 came from a (by definition imprecise) NV operation, and
2693 we're outside the range of NV integer precision */
2699 DEBUG_c(PerlIO_printf(Perl_debug_log,
2700 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2704 return (IV)SvUVX(sv);
2707 else if (SvPOKp(sv) && SvLEN(sv)) {
2709 const int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2710 /* We want to avoid a possible problem when we cache an IV which
2711 may be later translated to an NV, and the resulting NV is not
2712 the same as the direct translation of the initial string
2713 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2714 be careful to ensure that the value with the .456 is around if the
2715 NV value is requested in the future).
2717 This means that if we cache such an IV, we need to cache the
2718 NV as well. Moreover, we trade speed for space, and do not
2719 cache the NV if we are sure it's not needed.
2722 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2723 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2724 == IS_NUMBER_IN_UV) {
2725 /* It's definitely an integer, only upgrade to PVIV */
2726 if (SvTYPE(sv) < SVt_PVIV)
2727 sv_upgrade(sv, SVt_PVIV);
2729 } else if (SvTYPE(sv) < SVt_PVNV)
2730 sv_upgrade(sv, SVt_PVNV);
2732 /* If NV preserves UV then we only use the UV value if we know that
2733 we aren't going to call atof() below. If NVs don't preserve UVs
2734 then the value returned may have more precision than atof() will
2735 return, even though value isn't perfectly accurate. */
2736 if ((numtype & (IS_NUMBER_IN_UV
2737 #ifdef NV_PRESERVES_UV
2740 )) == IS_NUMBER_IN_UV) {
2741 /* This won't turn off the public IOK flag if it was set above */
2742 (void)SvIOKp_on(sv);
2744 if (!(numtype & IS_NUMBER_NEG)) {
2746 if (value <= (UV)IV_MAX) {
2747 SvIV_set(sv, (IV)value);
2749 SvUV_set(sv, value);
2753 /* 2s complement assumption */
2754 if (value <= (UV)IV_MIN) {
2755 SvIV_set(sv, -(IV)value);
2757 /* Too negative for an IV. This is a double upgrade, but
2758 I'm assuming it will be rare. */
2759 if (SvTYPE(sv) < SVt_PVNV)
2760 sv_upgrade(sv, SVt_PVNV);
2764 SvNV_set(sv, -(NV)value);
2765 SvIV_set(sv, IV_MIN);
2769 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2770 will be in the previous block to set the IV slot, and the next
2771 block to set the NV slot. So no else here. */
2773 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2774 != IS_NUMBER_IN_UV) {
2775 /* It wasn't an (integer that doesn't overflow the UV). */
2776 SvNV_set(sv, Atof(SvPVX(sv)));
2778 if (! numtype && ckWARN(WARN_NUMERIC))
2781 #if defined(USE_LONG_DOUBLE)
2782 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2783 PTR2UV(sv), SvNVX(sv)));
2785 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2786 PTR2UV(sv), SvNVX(sv)));
2790 #ifdef NV_PRESERVES_UV
2791 (void)SvIOKp_on(sv);
2793 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2794 SvIV_set(sv, I_V(SvNVX(sv)));
2795 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2798 /* Integer is imprecise. NOK, IOKp */
2800 /* UV will not work better than IV */
2802 if (SvNVX(sv) > (NV)UV_MAX) {
2804 /* Integer is inaccurate. NOK, IOKp, is UV */
2805 SvUV_set(sv, UV_MAX);
2808 SvUV_set(sv, U_V(SvNVX(sv)));
2809 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2810 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2814 /* Integer is imprecise. NOK, IOKp, is UV */
2820 #else /* NV_PRESERVES_UV */
2821 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2822 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2823 /* The IV slot will have been set from value returned by
2824 grok_number above. The NV slot has just been set using
2827 assert (SvIOKp(sv));
2829 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2830 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2831 /* Small enough to preserve all bits. */
2832 (void)SvIOKp_on(sv);
2834 SvIV_set(sv, I_V(SvNVX(sv)));
2835 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2837 /* Assumption: first non-preserved integer is < IV_MAX,
2838 this NV is in the preserved range, therefore: */
2839 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2841 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2845 0 0 already failed to read UV.
2846 0 1 already failed to read UV.
2847 1 0 you won't get here in this case. IV/UV
2848 slot set, public IOK, Atof() unneeded.
2849 1 1 already read UV.
2850 so there's no point in sv_2iuv_non_preserve() attempting
2851 to use atol, strtol, strtoul etc. */
2852 if (sv_2iuv_non_preserve (sv, numtype)
2853 >= IS_NUMBER_OVERFLOW_IV)
2857 #endif /* NV_PRESERVES_UV */
2860 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2862 if (SvTYPE(sv) < SVt_IV)
2863 /* Typically the caller expects that sv_any is not NULL now. */
2864 sv_upgrade(sv, SVt_IV);
2867 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2868 PTR2UV(sv),SvIVX(sv)));
2869 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2872 /* sv_2uv() is now a macro using Perl_sv_2uv_flags();
2873 * this function provided for binary compatibility only
2877 Perl_sv_2uv(pTHX_ register SV *sv)
2879 return sv_2uv_flags(sv, SV_GMAGIC);
2883 =for apidoc sv_2uv_flags
2885 Return the unsigned integer value of an SV, doing any necessary string
2886 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2887 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2893 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2897 if (SvGMAGICAL(sv)) {
2898 if (flags & SV_GMAGIC)
2903 return U_V(SvNVX(sv));
2904 if (SvPOKp(sv) && SvLEN(sv))
2907 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2908 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2914 if (SvTHINKFIRST(sv)) {
2917 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2918 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2919 return SvUV(tmpstr);
2920 return PTR2UV(SvRV(sv));
2923 sv_force_normal_flags(sv, 0);
2925 if (SvREADONLY(sv) && !SvOK(sv)) {
2926 if (ckWARN(WARN_UNINITIALIZED))
2936 return (UV)SvIVX(sv);
2940 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2941 * without also getting a cached IV/UV from it at the same time
2942 * (ie PV->NV conversion should detect loss of accuracy and cache
2943 * IV or UV at same time to avoid this. */
2944 /* IV-over-UV optimisation - choose to cache IV if possible */
2946 if (SvTYPE(sv) == SVt_NV)
2947 sv_upgrade(sv, SVt_PVNV);
2949 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2950 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2951 SvIV_set(sv, I_V(SvNVX(sv)));
2952 if (SvNVX(sv) == (NV) SvIVX(sv)
2953 #ifndef NV_PRESERVES_UV
2954 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2955 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2956 /* Don't flag it as "accurately an integer" if the number
2957 came from a (by definition imprecise) NV operation, and
2958 we're outside the range of NV integer precision */
2961 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2962 DEBUG_c(PerlIO_printf(Perl_debug_log,
2963 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2969 /* IV not precise. No need to convert from PV, as NV
2970 conversion would already have cached IV if it detected
2971 that PV->IV would be better than PV->NV->IV
2972 flags already correct - don't set public IOK. */
2973 DEBUG_c(PerlIO_printf(Perl_debug_log,
2974 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2979 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2980 but the cast (NV)IV_MIN rounds to a the value less (more
2981 negative) than IV_MIN which happens to be equal to SvNVX ??
2982 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2983 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2984 (NV)UVX == NVX are both true, but the values differ. :-(
2985 Hopefully for 2s complement IV_MIN is something like
2986 0x8000000000000000 which will be exact. NWC */
2989 SvUV_set(sv, U_V(SvNVX(sv)));
2991 (SvNVX(sv) == (NV) SvUVX(sv))
2992 #ifndef NV_PRESERVES_UV
2993 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2994 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2995 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2996 /* Don't flag it as "accurately an integer" if the number
2997 came from a (by definition imprecise) NV operation, and
2998 we're outside the range of NV integer precision */
3003 DEBUG_c(PerlIO_printf(Perl_debug_log,
3004 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
3010 else if (SvPOKp(sv) && SvLEN(sv)) {
3012 const int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3014 /* We want to avoid a possible problem when we cache a UV which
3015 may be later translated to an NV, and the resulting NV is not
3016 the translation of the initial data.
3018 This means that if we cache such a UV, we need to cache the
3019 NV as well. Moreover, we trade speed for space, and do not
3020 cache the NV if not needed.
3023 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
3024 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3025 == IS_NUMBER_IN_UV) {
3026 /* It's definitely an integer, only upgrade to PVIV */
3027 if (SvTYPE(sv) < SVt_PVIV)
3028 sv_upgrade(sv, SVt_PVIV);
3030 } else if (SvTYPE(sv) < SVt_PVNV)
3031 sv_upgrade(sv, SVt_PVNV);
3033 /* If NV preserves UV then we only use the UV value if we know that
3034 we aren't going to call atof() below. If NVs don't preserve UVs
3035 then the value returned may have more precision than atof() will
3036 return, even though it isn't accurate. */
3037 if ((numtype & (IS_NUMBER_IN_UV
3038 #ifdef NV_PRESERVES_UV
3041 )) == IS_NUMBER_IN_UV) {
3042 /* This won't turn off the public IOK flag if it was set above */
3043 (void)SvIOKp_on(sv);
3045 if (!(numtype & IS_NUMBER_NEG)) {
3047 if (value <= (UV)IV_MAX) {
3048 SvIV_set(sv, (IV)value);
3050 /* it didn't overflow, and it was positive. */
3051 SvUV_set(sv, value);
3055 /* 2s complement assumption */
3056 if (value <= (UV)IV_MIN) {
3057 SvIV_set(sv, -(IV)value);
3059 /* Too negative for an IV. This is a double upgrade, but
3060 I'm assuming it will be rare. */
3061 if (SvTYPE(sv) < SVt_PVNV)
3062 sv_upgrade(sv, SVt_PVNV);
3066 SvNV_set(sv, -(NV)value);
3067 SvIV_set(sv, IV_MIN);
3072 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3073 != IS_NUMBER_IN_UV) {
3074 /* It wasn't an integer, or it overflowed the UV. */
3075 SvNV_set(sv, Atof(SvPVX(sv)));
3077 if (! numtype && ckWARN(WARN_NUMERIC))
3080 #if defined(USE_LONG_DOUBLE)
3081 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
3082 PTR2UV(sv), SvNVX(sv)));
3084 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
3085 PTR2UV(sv), SvNVX(sv)));
3088 #ifdef NV_PRESERVES_UV
3089 (void)SvIOKp_on(sv);
3091 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
3092 SvIV_set(sv, I_V(SvNVX(sv)));
3093 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
3096 /* Integer is imprecise. NOK, IOKp */
3098 /* UV will not work better than IV */
3100 if (SvNVX(sv) > (NV)UV_MAX) {
3102 /* Integer is inaccurate. NOK, IOKp, is UV */
3103 SvUV_set(sv, UV_MAX);
3106 SvUV_set(sv, U_V(SvNVX(sv)));
3107 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
3108 NV preservse UV so can do correct comparison. */
3109 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
3113 /* Integer is imprecise. NOK, IOKp, is UV */
3118 #else /* NV_PRESERVES_UV */
3119 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3120 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
3121 /* The UV slot will have been set from value returned by
3122 grok_number above. The NV slot has just been set using
3125 assert (SvIOKp(sv));
3127 if (((UV)1 << NV_PRESERVES_UV_BITS) >
3128 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
3129 /* Small enough to preserve all bits. */
3130 (void)SvIOKp_on(sv);
3132 SvIV_set(sv, I_V(SvNVX(sv)));
3133 if ((NV)(SvIVX(sv)) == SvNVX(sv))
3135 /* Assumption: first non-preserved integer is < IV_MAX,
3136 this NV is in the preserved range, therefore: */
3137 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
3139 Perl_croak(aTHX_ "sv_2uv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
3142 sv_2iuv_non_preserve (sv, numtype);
3144 #endif /* NV_PRESERVES_UV */
3148 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3149 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3152 if (SvTYPE(sv) < SVt_IV)
3153 /* Typically the caller expects that sv_any is not NULL now. */
3154 sv_upgrade(sv, SVt_IV);
3158 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
3159 PTR2UV(sv),SvUVX(sv)));
3160 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
3166 Return the num value of an SV, doing any necessary string or integer
3167 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
3174 Perl_sv_2nv(pTHX_ register SV *sv)
3178 if (SvGMAGICAL(sv)) {
3182 if (SvPOKp(sv) && SvLEN(sv)) {
3183 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
3184 !grok_number(SvPVX(sv), SvCUR(sv), NULL))
3186 return Atof(SvPVX(sv));
3190 return (NV)SvUVX(sv);
3192 return (NV)SvIVX(sv);
3195 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3196 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3202 if (SvTHINKFIRST(sv)) {
3205 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
3206 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
3207 return SvNV(tmpstr);
3208 return PTR2NV(SvRV(sv));
3211 sv_force_normal_flags(sv, 0);
3213 if (SvREADONLY(sv) && !SvOK(sv)) {
3214 if (ckWARN(WARN_UNINITIALIZED))
3219 if (SvTYPE(sv) < SVt_NV) {
3220 if (SvTYPE(sv) == SVt_IV)
3221 sv_upgrade(sv, SVt_PVNV);
3223 sv_upgrade(sv, SVt_NV);
3224 #ifdef USE_LONG_DOUBLE
3226 STORE_NUMERIC_LOCAL_SET_STANDARD();
3227 PerlIO_printf(Perl_debug_log,
3228 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
3229 PTR2UV(sv), SvNVX(sv));
3230 RESTORE_NUMERIC_LOCAL();
3234 STORE_NUMERIC_LOCAL_SET_STANDARD();
3235 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
3236 PTR2UV(sv), SvNVX(sv));
3237 RESTORE_NUMERIC_LOCAL();
3241 else if (SvTYPE(sv) < SVt_PVNV)
3242 sv_upgrade(sv, SVt_PVNV);
3247 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
3248 #ifdef NV_PRESERVES_UV
3251 /* Only set the public NV OK flag if this NV preserves the IV */
3252 /* Check it's not 0xFFFFFFFFFFFFFFFF */
3253 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
3254 : (SvIVX(sv) == I_V(SvNVX(sv))))
3260 else if (SvPOKp(sv) && SvLEN(sv)) {
3262 const int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3263 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
3265 #ifdef NV_PRESERVES_UV
3266 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3267 == IS_NUMBER_IN_UV) {
3268 /* It's definitely an integer */
3269 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
3271 SvNV_set(sv, Atof(SvPVX(sv)));
3274 SvNV_set(sv, Atof(SvPVX(sv)));
3275 /* Only set the public NV OK flag if this NV preserves the value in
3276 the PV at least as well as an IV/UV would.
3277 Not sure how to do this 100% reliably. */
3278 /* if that shift count is out of range then Configure's test is
3279 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
3281 if (((UV)1 << NV_PRESERVES_UV_BITS) >
3282 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
3283 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
3284 } else if (!(numtype & IS_NUMBER_IN_UV)) {
3285 /* Can't use strtol etc to convert this string, so don't try.
3286 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
3289 /* value has been set. It may not be precise. */
3290 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
3291 /* 2s complement assumption for (UV)IV_MIN */
3292 SvNOK_on(sv); /* Integer is too negative. */
3297 if (numtype & IS_NUMBER_NEG) {
3298 SvIV_set(sv, -(IV)value);
3299 } else if (value <= (UV)IV_MAX) {
3300 SvIV_set(sv, (IV)value);
3302 SvUV_set(sv, value);
3306 if (numtype & IS_NUMBER_NOT_INT) {
3307 /* I believe that even if the original PV had decimals,
3308 they are lost beyond the limit of the FP precision.
3309 However, neither is canonical, so both only get p
3310 flags. NWC, 2000/11/25 */
3311 /* Both already have p flags, so do nothing */
3314 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
3315 if (SvIVX(sv) == I_V(nv)) {
3320 /* It had no "." so it must be integer. */
3323 /* between IV_MAX and NV(UV_MAX).
3324 Could be slightly > UV_MAX */
3326 if (numtype & IS_NUMBER_NOT_INT) {
3327 /* UV and NV both imprecise. */
3329 UV nv_as_uv = U_V(nv);
3331 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
3342 #endif /* NV_PRESERVES_UV */
3345 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3347 if (SvTYPE(sv) < SVt_NV)
3348 /* Typically the caller expects that sv_any is not NULL now. */
3349 /* XXX Ilya implies that this is a bug in callers that assume this
3350 and ideally should be fixed. */
3351 sv_upgrade(sv, SVt_NV);
3354 #if defined(USE_LONG_DOUBLE)
3356 STORE_NUMERIC_LOCAL_SET_STANDARD();
3357 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
3358 PTR2UV(sv), SvNVX(sv));
3359 RESTORE_NUMERIC_LOCAL();
3363 STORE_NUMERIC_LOCAL_SET_STANDARD();
3364 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
3365 PTR2UV(sv), SvNVX(sv));
3366 RESTORE_NUMERIC_LOCAL();
3372 /* asIV(): extract an integer from the string value of an SV.
3373 * Caller must validate PVX */
3376 S_asIV(pTHX_ SV *sv)
3379 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3381 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3382 == IS_NUMBER_IN_UV) {
3383 /* It's definitely an integer */
3384 if (numtype & IS_NUMBER_NEG) {
3385 if (value < (UV)IV_MIN)
3388 if (value < (UV)IV_MAX)
3393 if (ckWARN(WARN_NUMERIC))
3396 return I_V(Atof(SvPVX(sv)));
3399 /* asUV(): extract an unsigned integer from the string value of an SV
3400 * Caller must validate PVX */
3403 S_asUV(pTHX_ SV *sv)
3406 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
3408 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3409 == IS_NUMBER_IN_UV) {
3410 /* It's definitely an integer */
3411 if (!(numtype & IS_NUMBER_NEG))
3415 if (ckWARN(WARN_NUMERIC))
3418 return U_V(Atof(SvPVX(sv)));
3422 =for apidoc sv_2pv_nolen
3424 Like C<sv_2pv()>, but doesn't return the length too. You should usually
3425 use the macro wrapper C<SvPV_nolen(sv)> instead.
3430 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
3433 return sv_2pv(sv, &n_a);
3436 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
3437 * UV as a string towards the end of buf, and return pointers to start and
3440 * We assume that buf is at least TYPE_CHARS(UV) long.
3444 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
3446 char *ptr = buf + TYPE_CHARS(UV);
3460 *--ptr = '0' + (char)(uv % 10);
3468 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
3469 * this function provided for binary compatibility only
3473 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
3475 return sv_2pv_flags(sv, lp, SV_GMAGIC);
3479 =for apidoc sv_2pv_flags
3481 Returns a pointer to the string value of an SV, and sets *lp to its length.
3482 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
3484 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
3485 usually end up here too.
3491 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
3496 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
3497 char *tmpbuf = tbuf;
3503 if (SvGMAGICAL(sv)) {
3504 if (flags & SV_GMAGIC)
3512 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
3514 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
3519 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
3524 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3525 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3532 if (SvTHINKFIRST(sv)) {
3535 register const char *typestr;
3536 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3537 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3538 char *pv = SvPV(tmpstr, *lp);
3548 typestr = "NULLREF";
3552 switch (SvTYPE(sv)) {
3554 if ( ((SvFLAGS(sv) &
3555 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3556 == (SVs_OBJECT|SVs_SMG))
3557 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3558 const regexp *re = (regexp *)mg->mg_obj;
3561 const char *fptr = "msix";
3566 char need_newline = 0;
3567 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3569 while((ch = *fptr++)) {
3571 reflags[left++] = ch;
3574 reflags[right--] = ch;
3579 reflags[left] = '-';
3583 mg->mg_len = re->prelen + 4 + left;
3585 * If /x was used, we have to worry about a regex
3586 * ending with a comment later being embedded
3587 * within another regex. If so, we don't want this
3588 * regex's "commentization" to leak out to the
3589 * right part of the enclosing regex, we must cap
3590 * it with a newline.
3592 * So, if /x was used, we scan backwards from the
3593 * end of the regex. If we find a '#' before we
3594 * find a newline, we need to add a newline
3595 * ourself. If we find a '\n' first (or if we
3596 * don't find '#' or '\n'), we don't need to add
3597 * anything. -jfriedl
3599 if (PMf_EXTENDED & re->reganch)
3601 const char *endptr = re->precomp + re->prelen;
3602 while (endptr >= re->precomp)
3604 const char c = *(endptr--);
3606 break; /* don't need another */
3608 /* we end while in a comment, so we
3610 mg->mg_len++; /* save space for it */
3611 need_newline = 1; /* note to add it */
3617 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3618 Copy("(?", mg->mg_ptr, 2, char);
3619 Copy(reflags, mg->mg_ptr+2, left, char);
3620 Copy(":", mg->mg_ptr+left+2, 1, char);
3621 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3623 mg->mg_ptr[mg->mg_len - 2] = '\n';
3624 mg->mg_ptr[mg->mg_len - 1] = ')';
3625 mg->mg_ptr[mg->mg_len] = 0;
3627 PL_reginterp_cnt += re->program[0].next_off;
3629 if (re->reganch & ROPT_UTF8)
3644 case SVt_PVBM: typestr = SvROK(sv) ? "REF" : "SCALAR"; break;
3645 case SVt_PVLV: typestr = SvROK(sv) ? "REF"
3646 /* tied lvalues should appear to be
3647 * scalars for backwards compatitbility */
3648 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3649 ? "SCALAR" : "LVALUE"; break;
3650 case SVt_PVAV: typestr = "ARRAY"; break;
3651 case SVt_PVHV: typestr = "HASH"; break;
3652 case SVt_PVCV: typestr = "CODE"; break;
3653 case SVt_PVGV: typestr = "GLOB"; break;
3654 case SVt_PVFM: typestr = "FORMAT"; break;
3655 case SVt_PVIO: typestr = "IO"; break;
3656 default: typestr = "UNKNOWN"; break;
3660 const char *name = HvNAME_get(SvSTASH(sv));
3661 Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
3662 name ? name : "__ANON__" , typestr, PTR2UV(sv));
3665 Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, PTR2UV(sv));
3668 *lp = strlen(typestr);
3669 return (char *)typestr;
3671 if (SvREADONLY(sv) && !SvOK(sv)) {
3672 if (ckWARN(WARN_UNINITIALIZED))
3678 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3679 /* I'm assuming that if both IV and NV are equally valid then
3680 converting the IV is going to be more efficient */
3681 const U32 isIOK = SvIOK(sv);
3682 const U32 isUIOK = SvIsUV(sv);
3683 char buf[TYPE_CHARS(UV)];
3686 if (SvTYPE(sv) < SVt_PVIV)
3687 sv_upgrade(sv, SVt_PVIV);
3689 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3691 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3692 SvGROW(sv, (STRLEN)(ebuf - ptr + 1)); /* inlined from sv_setpvn */
3693 Move(ptr,SvPVX(sv),ebuf - ptr,char);
3694 SvCUR_set(sv, ebuf - ptr);
3704 else if (SvNOKp(sv)) {
3705 if (SvTYPE(sv) < SVt_PVNV)
3706 sv_upgrade(sv, SVt_PVNV);
3707 /* The +20 is pure guesswork. Configure test needed. --jhi */
3708 SvGROW(sv, NV_DIG + 20);
3710 olderrno = errno; /* some Xenix systems wipe out errno here */
3712 if (SvNVX(sv) == 0.0)
3713 (void)strcpy(s,"0");
3717 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3720 #ifdef FIXNEGATIVEZERO
3721 if (*s == '-' && s[1] == '0' && !s[2])
3731 if (ckWARN(WARN_UNINITIALIZED)
3732 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3735 if (SvTYPE(sv) < SVt_PV)
3736 /* Typically the caller expects that sv_any is not NULL now. */
3737 sv_upgrade(sv, SVt_PV);
3740 *lp = s - SvPVX(sv);
3743 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3744 PTR2UV(sv),SvPVX(sv)));
3748 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3749 /* Sneaky stuff here */
3753 tsv = newSVpv(tmpbuf, 0);
3770 len = strlen(tmpbuf);
3772 #ifdef FIXNEGATIVEZERO
3773 if (len == 2 && t[0] == '-' && t[1] == '0') {
3778 (void)SvUPGRADE(sv, SVt_PV);
3780 s = SvGROW(sv, len + 1);
3783 return strcpy(s, t);
3788 =for apidoc sv_copypv
3790 Copies a stringified representation of the source SV into the
3791 destination SV. Automatically performs any necessary mg_get and
3792 coercion of numeric values into strings. Guaranteed to preserve
3793 UTF-8 flag even from overloaded objects. Similar in nature to
3794 sv_2pv[_flags] but operates directly on an SV instead of just the
3795 string. Mostly uses sv_2pv_flags to do its work, except when that
3796 would lose the UTF-8'ness of the PV.
3802 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3807 sv_setpvn(dsv,s,len);
3815 =for apidoc sv_2pvbyte_nolen
3817 Return a pointer to the byte-encoded representation of the SV.
3818 May cause the SV to be downgraded from UTF-8 as a side-effect.
3820 Usually accessed via the C<SvPVbyte_nolen> macro.
3826 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3829 return sv_2pvbyte(sv, &n_a);
3833 =for apidoc sv_2pvbyte
3835 Return a pointer to the byte-encoded representation of the SV, and set *lp
3836 to its length. May cause the SV to be downgraded from UTF-8 as a
3839 Usually accessed via the C<SvPVbyte> macro.
3845 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3847 sv_utf8_downgrade(sv,0);
3848 return SvPV(sv,*lp);
3852 =for apidoc sv_2pvutf8_nolen
3854 Return a pointer to the UTF-8-encoded representation of the SV.
3855 May cause the SV to be upgraded to UTF-8 as a side-effect.
3857 Usually accessed via the C<SvPVutf8_nolen> macro.
3863 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3866 return sv_2pvutf8(sv, &n_a);
3870 =for apidoc sv_2pvutf8
3872 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3873 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3875 Usually accessed via the C<SvPVutf8> macro.
3881 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3883 sv_utf8_upgrade(sv);
3884 return SvPV(sv,*lp);
3888 =for apidoc sv_2bool
3890 This function is only called on magical items, and is only used by
3891 sv_true() or its macro equivalent.
3897 Perl_sv_2bool(pTHX_ register SV *sv)
3906 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3907 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3908 return (bool)SvTRUE(tmpsv);
3909 return SvRV(sv) != 0;
3912 register XPV* Xpvtmp;
3913 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3914 (*Xpvtmp->xpv_pv > '0' ||
3915 Xpvtmp->xpv_cur > 1 ||
3916 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
3923 return SvIVX(sv) != 0;
3926 return SvNVX(sv) != 0.0;
3933 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3934 * this function provided for binary compatibility only
3939 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3941 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3945 =for apidoc sv_utf8_upgrade
3947 Converts the PV of an SV to its UTF-8-encoded form.
3948 Forces the SV to string form if it is not already.
3949 Always sets the SvUTF8 flag to avoid future validity checks even
3950 if all the bytes have hibit clear.
3952 This is not as a general purpose byte encoding to Unicode interface:
3953 use the Encode extension for that.
3955 =for apidoc sv_utf8_upgrade_flags
3957 Converts the PV of an SV to its UTF-8-encoded form.
3958 Forces the SV to string form if it is not already.
3959 Always sets the SvUTF8 flag to avoid future validity checks even
3960 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3961 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3962 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3964 This is not as a general purpose byte encoding to Unicode interface:
3965 use the Encode extension for that.
3971 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3973 if (sv == &PL_sv_undef)
3977 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3978 (void) sv_2pv_flags(sv,&len, flags);
3982 (void) SvPV_force(sv,len);
3991 sv_force_normal_flags(sv, 0);
3994 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3995 sv_recode_to_utf8(sv, PL_encoding);
3996 else { /* Assume Latin-1/EBCDIC */
3997 /* This function could be much more efficient if we
3998 * had a FLAG in SVs to signal if there are any hibit
3999 * chars in the PV. Given that there isn't such a flag
4000 * make the loop as fast as possible. */
4001 U8 *s = (U8 *) SvPVX(sv);
4002 U8 *e = (U8 *) SvEND(sv);
4008 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
4012 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
4013 s = bytes_to_utf8((U8*)s, &len);
4015 SvPV_free(sv); /* No longer using what was there before. */
4017 SvPV_set(sv, (char*)s);
4018 SvCUR_set(sv, len - 1);
4019 SvLEN_set(sv, len); /* No longer know the real size. */
4021 /* Mark as UTF-8 even if no hibit - saves scanning loop */
4028 =for apidoc sv_utf8_downgrade
4030 Attempts to convert the PV of an SV from characters to bytes.
4031 If the PV contains a character beyond byte, this conversion will fail;
4032 in this case, either returns false or, if C<fail_ok> is not
4035 This is not as a general purpose Unicode to byte encoding interface:
4036 use the Encode extension for that.
4042 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
4044 if (SvPOKp(sv) && SvUTF8(sv)) {
4050 sv_force_normal_flags(sv, 0);
4052 s = (U8 *) SvPV(sv, len);
4053 if (!utf8_to_bytes(s, &len)) {
4058 Perl_croak(aTHX_ "Wide character in %s",
4061 Perl_croak(aTHX_ "Wide character");
4072 =for apidoc sv_utf8_encode
4074 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
4075 flag off so that it looks like octets again.
4081 Perl_sv_utf8_encode(pTHX_ register SV *sv)
4083 (void) sv_utf8_upgrade(sv);
4085 sv_force_normal_flags(sv, 0);
4087 if (SvREADONLY(sv)) {
4088 Perl_croak(aTHX_ PL_no_modify);
4094 =for apidoc sv_utf8_decode
4096 If the PV of the SV is an octet sequence in UTF-8
4097 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
4098 so that it looks like a character. If the PV contains only single-byte
4099 characters, the C<SvUTF8> flag stays being off.
4100 Scans PV for validity and returns false if the PV is invalid UTF-8.
4106 Perl_sv_utf8_decode(pTHX_ register SV *sv)
4112 /* The octets may have got themselves encoded - get them back as
4115 if (!sv_utf8_downgrade(sv, TRUE))
4118 /* it is actually just a matter of turning the utf8 flag on, but
4119 * we want to make sure everything inside is valid utf8 first.
4121 c = (U8 *) SvPVX(sv);
4122 if (!is_utf8_string(c, SvCUR(sv)+1))
4124 e = (U8 *) SvEND(sv);
4127 if (!UTF8_IS_INVARIANT(ch)) {
4136 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
4137 * this function provided for binary compatibility only
4141 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
4143 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
4147 =for apidoc sv_setsv
4149 Copies the contents of the source SV C<ssv> into the destination SV
4150 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
4151 function if the source SV needs to be reused. Does not handle 'set' magic.
4152 Loosely speaking, it performs a copy-by-value, obliterating any previous
4153 content of the destination.
4155 You probably want to use one of the assortment of wrappers, such as
4156 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4157 C<SvSetMagicSV_nosteal>.
4159 =for apidoc sv_setsv_flags
4161 Copies the contents of the source SV C<ssv> into the destination SV
4162 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
4163 function if the source SV needs to be reused. Does not handle 'set' magic.
4164 Loosely speaking, it performs a copy-by-value, obliterating any previous
4165 content of the destination.
4166 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
4167 C<ssv> if appropriate, else not. If the C<flags> parameter has the
4168 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
4169 and C<sv_setsv_nomg> are implemented in terms of this function.
4171 You probably want to use one of the assortment of wrappers, such as
4172 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4173 C<SvSetMagicSV_nosteal>.
4175 This is the primary function for copying scalars, and most other
4176 copy-ish functions and macros use this underneath.
4182 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
4184 register U32 sflags;
4190 SV_CHECK_THINKFIRST_COW_DROP(dstr);
4192 sstr = &PL_sv_undef;
4193 stype = SvTYPE(sstr);
4194 dtype = SvTYPE(dstr);
4199 /* need to nuke the magic */
4201 SvRMAGICAL_off(dstr);
4204 /* There's a lot of redundancy below but we're going for speed here */
4209 if (dtype != SVt_PVGV) {
4210 (void)SvOK_off(dstr);
4218 sv_upgrade(dstr, SVt_IV);
4221 sv_upgrade(dstr, SVt_PVNV);
4225 sv_upgrade(dstr, SVt_PVIV);
4228 (void)SvIOK_only(dstr);
4229 SvIV_set(dstr, SvIVX(sstr));
4232 if (SvTAINTED(sstr))
4243 sv_upgrade(dstr, SVt_NV);
4248 sv_upgrade(dstr, SVt_PVNV);
4251 SvNV_set(dstr, SvNVX(sstr));
4252 (void)SvNOK_only(dstr);
4253 if (SvTAINTED(sstr))
4261 sv_upgrade(dstr, SVt_RV);
4262 else if (dtype == SVt_PVGV &&
4263 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
4266 if (GvIMPORTED(dstr) != GVf_IMPORTED
4267 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4269 GvIMPORTED_on(dstr);
4278 #ifdef PERL_COPY_ON_WRITE
4279 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4280 if (dtype < SVt_PVIV)
4281 sv_upgrade(dstr, SVt_PVIV);
4288 sv_upgrade(dstr, SVt_PV);
4291 if (dtype < SVt_PVIV)
4292 sv_upgrade(dstr, SVt_PVIV);
4295 if (dtype < SVt_PVNV)
4296 sv_upgrade(dstr, SVt_PVNV);
4303 const char * const type = sv_reftype(sstr,0);
4305 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
4307 Perl_croak(aTHX_ "Bizarre copy of %s", type);
4312 if (dtype <= SVt_PVGV) {
4314 if (dtype != SVt_PVGV) {
4315 const char * const name = GvNAME(sstr);
4316 const STRLEN len = GvNAMELEN(sstr);
4317 /* don't upgrade SVt_PVLV: it can hold a glob */
4318 if (dtype != SVt_PVLV)
4319 sv_upgrade(dstr, SVt_PVGV);
4320 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
4321 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
4322 GvNAME(dstr) = savepvn(name, len);
4323 GvNAMELEN(dstr) = len;
4324 SvFAKE_on(dstr); /* can coerce to non-glob */
4326 /* ahem, death to those who redefine active sort subs */
4327 else if (PL_curstackinfo->si_type == PERLSI_SORT
4328 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
4329 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
4332 #ifdef GV_UNIQUE_CHECK
4333 if (GvUNIQUE((GV*)dstr)) {
4334 Perl_croak(aTHX_ PL_no_modify);
4338 (void)SvOK_off(dstr);
4339 GvINTRO_off(dstr); /* one-shot flag */
4341 GvGP(dstr) = gp_ref(GvGP(sstr));
4342 if (SvTAINTED(sstr))
4344 if (GvIMPORTED(dstr) != GVf_IMPORTED
4345 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4347 GvIMPORTED_on(dstr);
4355 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4357 if ((int)SvTYPE(sstr) != stype) {
4358 stype = SvTYPE(sstr);
4359 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
4363 if (stype == SVt_PVLV)
4364 (void)SvUPGRADE(dstr, SVt_PVNV);
4366 (void)SvUPGRADE(dstr, (U32)stype);
4369 sflags = SvFLAGS(sstr);
4371 if (sflags & SVf_ROK) {
4372 if (dtype >= SVt_PV) {
4373 if (dtype == SVt_PVGV) {
4374 SV *sref = SvREFCNT_inc(SvRV(sstr));
4376 const int intro = GvINTRO(dstr);
4378 #ifdef GV_UNIQUE_CHECK
4379 if (GvUNIQUE((GV*)dstr)) {
4380 Perl_croak(aTHX_ PL_no_modify);
4385 GvINTRO_off(dstr); /* one-shot flag */
4386 GvLINE(dstr) = CopLINE(PL_curcop);
4387 GvEGV(dstr) = (GV*)dstr;
4390 switch (SvTYPE(sref)) {
4393 SAVEGENERICSV(GvAV(dstr));
4395 dref = (SV*)GvAV(dstr);
4396 GvAV(dstr) = (AV*)sref;
4397 if (!GvIMPORTED_AV(dstr)
4398 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4400 GvIMPORTED_AV_on(dstr);
4405 SAVEGENERICSV(GvHV(dstr));
4407 dref = (SV*)GvHV(dstr);
4408 GvHV(dstr) = (HV*)sref;
4409 if (!GvIMPORTED_HV(dstr)
4410 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4412 GvIMPORTED_HV_on(dstr);
4417 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
4418 SvREFCNT_dec(GvCV(dstr));
4419 GvCV(dstr) = Nullcv;
4420 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4421 PL_sub_generation++;
4423 SAVEGENERICSV(GvCV(dstr));
4426 dref = (SV*)GvCV(dstr);
4427 if (GvCV(dstr) != (CV*)sref) {
4428 CV* cv = GvCV(dstr);
4430 if (!GvCVGEN((GV*)dstr) &&
4431 (CvROOT(cv) || CvXSUB(cv)))
4433 /* ahem, death to those who redefine
4434 * active sort subs */
4435 if (PL_curstackinfo->si_type == PERLSI_SORT &&
4436 PL_sortcop == CvSTART(cv))
4438 "Can't redefine active sort subroutine %s",
4439 GvENAME((GV*)dstr));
4440 /* Redefining a sub - warning is mandatory if
4441 it was a const and its value changed. */
4442 if (ckWARN(WARN_REDEFINE)
4444 && (!CvCONST((CV*)sref)
4445 || sv_cmp(cv_const_sv(cv),
4446 cv_const_sv((CV*)sref)))))
4448 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4450 ? "Constant subroutine %s::%s redefined"
4451 : "Subroutine %s::%s redefined",
4452 HvNAME_get(GvSTASH((GV*)dstr)),
4453 GvENAME((GV*)dstr));
4457 cv_ckproto(cv, (GV*)dstr,
4458 SvPOK(sref) ? SvPVX(sref) : Nullch);
4460 GvCV(dstr) = (CV*)sref;
4461 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4462 GvASSUMECV_on(dstr);
4463 PL_sub_generation++;
4465 if (!GvIMPORTED_CV(dstr)
4466 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4468 GvIMPORTED_CV_on(dstr);
4473 SAVEGENERICSV(GvIOp(dstr));
4475 dref = (SV*)GvIOp(dstr);
4476 GvIOp(dstr) = (IO*)sref;
4480 SAVEGENERICSV(GvFORM(dstr));
4482 dref = (SV*)GvFORM(dstr);
4483 GvFORM(dstr) = (CV*)sref;
4487 SAVEGENERICSV(GvSV(dstr));
4489 dref = (SV*)GvSV(dstr);
4491 if (!GvIMPORTED_SV(dstr)
4492 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4494 GvIMPORTED_SV_on(dstr);
4500 if (SvTAINTED(sstr))
4510 (void)SvOK_off(dstr);
4511 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4513 if (sflags & SVp_NOK) {
4515 /* Only set the public OK flag if the source has public OK. */
4516 if (sflags & SVf_NOK)
4517 SvFLAGS(dstr) |= SVf_NOK;
4518 SvNV_set(dstr, SvNVX(sstr));
4520 if (sflags & SVp_IOK) {
4521 (void)SvIOKp_on(dstr);
4522 if (sflags & SVf_IOK)
4523 SvFLAGS(dstr) |= SVf_IOK;
4524 if (sflags & SVf_IVisUV)
4526 SvIV_set(dstr, SvIVX(sstr));
4528 if (SvAMAGIC(sstr)) {
4532 else if (sflags & SVp_POK) {
4536 * Check to see if we can just swipe the string. If so, it's a
4537 * possible small lose on short strings, but a big win on long ones.
4538 * It might even be a win on short strings if SvPVX(dstr)
4539 * has to be allocated and SvPVX(sstr) has to be freed.
4542 /* Whichever path we take through the next code, we want this true,
4543 and doing it now facilitates the COW check. */
4544 (void)SvPOK_only(dstr);
4547 #ifdef PERL_COPY_ON_WRITE
4548 (sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
4552 (sflags & SVs_TEMP) && /* slated for free anyway? */
4553 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4554 (!(flags & SV_NOSTEAL)) &&
4555 /* and we're allowed to steal temps */
4556 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4557 SvLEN(sstr) && /* and really is a string */
4558 /* and won't be needed again, potentially */
4559 !(PL_op && PL_op->op_type == OP_AASSIGN))
4560 #ifdef PERL_COPY_ON_WRITE
4561 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4562 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4563 && SvTYPE(sstr) >= SVt_PVIV)
4566 /* Failed the swipe test, and it's not a shared hash key either.
4567 Have to copy the string. */
4568 STRLEN len = SvCUR(sstr);
4569 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
4570 Move(SvPVX(sstr),SvPVX(dstr),len,char);
4571 SvCUR_set(dstr, len);
4572 *SvEND(dstr) = '\0';
4574 /* If PERL_COPY_ON_WRITE is not defined, then isSwipe will always
4576 #ifdef PERL_COPY_ON_WRITE
4577 /* Either it's a shared hash key, or it's suitable for
4578 copy-on-write or we can swipe the string. */
4580 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4585 /* I believe I should acquire a global SV mutex if
4586 it's a COW sv (not a shared hash key) to stop
4587 it going un copy-on-write.
4588 If the source SV has gone un copy on write between up there
4589 and down here, then (assert() that) it is of the correct
4590 form to make it copy on write again */
4591 if ((sflags & (SVf_FAKE | SVf_READONLY))
4592 != (SVf_FAKE | SVf_READONLY)) {
4593 SvREADONLY_on(sstr);
4595 /* Make the source SV into a loop of 1.
4596 (about to become 2) */
4597 SV_COW_NEXT_SV_SET(sstr, sstr);
4601 /* Initial code is common. */
4602 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
4604 SvFLAGS(dstr) &= ~SVf_OOK;
4605 Safefree(SvPVX(dstr) - SvIVX(dstr));
4607 else if (SvLEN(dstr))
4608 Safefree(SvPVX(dstr));
4611 #ifdef PERL_COPY_ON_WRITE
4613 /* making another shared SV. */
4614 STRLEN cur = SvCUR(sstr);
4615 STRLEN len = SvLEN(sstr);
4616 assert (SvTYPE(dstr) >= SVt_PVIV);
4618 /* SvIsCOW_normal */
4619 /* splice us in between source and next-after-source. */
4620 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4621 SV_COW_NEXT_SV_SET(sstr, dstr);
4622 SvPV_set(dstr, SvPVX(sstr));
4624 /* SvIsCOW_shared_hash */
4625 UV hash = SvUVX(sstr);
4626 DEBUG_C(PerlIO_printf(Perl_debug_log,
4627 "Copy on write: Sharing hash\n"));
4629 sharepvn(SvPVX(sstr),
4630 (sflags & SVf_UTF8?-cur:cur), hash));
4631 SvUV_set(dstr, hash);
4633 SvLEN_set(dstr, len);
4634 SvCUR_set(dstr, cur);
4635 SvREADONLY_on(dstr);
4637 /* Relesase a global SV mutex. */
4641 { /* Passes the swipe test. */
4642 SvPV_set(dstr, SvPVX(sstr));
4643 SvLEN_set(dstr, SvLEN(sstr));
4644 SvCUR_set(dstr, SvCUR(sstr));
4647 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4648 SvPV_set(sstr, Nullch);
4654 if (sflags & SVf_UTF8)
4657 if (sflags & SVp_NOK) {
4659 if (sflags & SVf_NOK)
4660 SvFLAGS(dstr) |= SVf_NOK;
4661 SvNV_set(dstr, SvNVX(sstr));
4663 if (sflags & SVp_IOK) {
4664 (void)SvIOKp_on(dstr);
4665 if (sflags & SVf_IOK)
4666 SvFLAGS(dstr) |= SVf_IOK;
4667 if (sflags & SVf_IVisUV)
4669 SvIV_set(dstr, SvIVX(sstr));
4672 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4673 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4674 smg->mg_ptr, smg->mg_len);
4675 SvRMAGICAL_on(dstr);
4678 else if (sflags & SVp_IOK) {
4679 if (sflags & SVf_IOK)
4680 (void)SvIOK_only(dstr);
4682 (void)SvOK_off(dstr);
4683 (void)SvIOKp_on(dstr);
4685 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4686 if (sflags & SVf_IVisUV)
4688 SvIV_set(dstr, SvIVX(sstr));
4689 if (sflags & SVp_NOK) {
4690 if (sflags & SVf_NOK)
4691 (void)SvNOK_on(dstr);
4693 (void)SvNOKp_on(dstr);
4694 SvNV_set(dstr, SvNVX(sstr));
4697 else if (sflags & SVp_NOK) {
4698 if (sflags & SVf_NOK)
4699 (void)SvNOK_only(dstr);
4701 (void)SvOK_off(dstr);
4704 SvNV_set(dstr, SvNVX(sstr));
4707 if (dtype == SVt_PVGV) {
4708 if (ckWARN(WARN_MISC))
4709 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4712 (void)SvOK_off(dstr);
4714 if (SvTAINTED(sstr))
4719 =for apidoc sv_setsv_mg
4721 Like C<sv_setsv>, but also handles 'set' magic.
4727 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4729 sv_setsv(dstr,sstr);
4733 #ifdef PERL_COPY_ON_WRITE
4735 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4737 STRLEN cur = SvCUR(sstr);
4738 STRLEN len = SvLEN(sstr);
4739 register char *new_pv;
4742 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4750 if (SvTHINKFIRST(dstr))
4751 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4752 else if (SvPVX(dstr))
4753 Safefree(SvPVX(dstr));
4757 (void)SvUPGRADE (dstr, SVt_PVIV);
4759 assert (SvPOK(sstr));
4760 assert (SvPOKp(sstr));
4761 assert (!SvIOK(sstr));
4762 assert (!SvIOKp(sstr));
4763 assert (!SvNOK(sstr));
4764 assert (!SvNOKp(sstr));
4766 if (SvIsCOW(sstr)) {
4768 if (SvLEN(sstr) == 0) {
4769 /* source is a COW shared hash key. */
4770 UV hash = SvUVX(sstr);
4771 DEBUG_C(PerlIO_printf(Perl_debug_log,
4772 "Fast copy on write: Sharing hash\n"));
4773 SvUV_set(dstr, hash);
4774 new_pv = sharepvn(SvPVX(sstr), (SvUTF8(sstr)?-cur:cur), hash);
4777 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4779 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4780 (void)SvUPGRADE (sstr, SVt_PVIV);
4781 SvREADONLY_on(sstr);
4783 DEBUG_C(PerlIO_printf(Perl_debug_log,
4784 "Fast copy on write: Converting sstr to COW\n"));
4785 SV_COW_NEXT_SV_SET(dstr, sstr);
4787 SV_COW_NEXT_SV_SET(sstr, dstr);
4788 new_pv = SvPVX(sstr);
4791 SvPV_set(dstr, new_pv);
4792 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4795 SvLEN_set(dstr, len);
4796 SvCUR_set(dstr, cur);
4805 =for apidoc sv_setpvn
4807 Copies a string into an SV. The C<len> parameter indicates the number of
4808 bytes to be copied. If the C<ptr> argument is NULL the SV will become
4809 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4815 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4817 register char *dptr;
4819 SV_CHECK_THINKFIRST_COW_DROP(sv);
4825 /* len is STRLEN which is unsigned, need to copy to signed */
4828 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4830 (void)SvUPGRADE(sv, SVt_PV);
4832 SvGROW(sv, len + 1);
4834 Move(ptr,dptr,len,char);
4837 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4842 =for apidoc sv_setpvn_mg
4844 Like C<sv_setpvn>, but also handles 'set' magic.
4850 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4852 sv_setpvn(sv,ptr,len);
4857 =for apidoc sv_setpv
4859 Copies a string into an SV. The string must be null-terminated. Does not
4860 handle 'set' magic. See C<sv_setpv_mg>.
4866 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4868 register STRLEN len;
4870 SV_CHECK_THINKFIRST_COW_DROP(sv);
4876 (void)SvUPGRADE(sv, SVt_PV);
4878 SvGROW(sv, len + 1);
4879 Move(ptr,SvPVX(sv),len+1,char);
4881 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4886 =for apidoc sv_setpv_mg
4888 Like C<sv_setpv>, but also handles 'set' magic.
4894 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4901 =for apidoc sv_usepvn
4903 Tells an SV to use C<ptr> to find its string value. Normally the string is
4904 stored inside the SV but sv_usepvn allows the SV to use an outside string.
4905 The C<ptr> should point to memory that was allocated by C<malloc>. The
4906 string length, C<len>, must be supplied. This function will realloc the
4907 memory pointed to by C<ptr>, so that pointer should not be freed or used by
4908 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
4909 See C<sv_usepvn_mg>.
4915 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4917 SV_CHECK_THINKFIRST_COW_DROP(sv);
4918 (void)SvUPGRADE(sv, SVt_PV);
4925 Renew(ptr, len+1, char);
4928 SvLEN_set(sv, len+1);
4930 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4935 =for apidoc sv_usepvn_mg
4937 Like C<sv_usepvn>, but also handles 'set' magic.
4943 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4945 sv_usepvn(sv,ptr,len);
4949 #ifdef PERL_COPY_ON_WRITE
4950 /* Need to do this *after* making the SV normal, as we need the buffer
4951 pointer to remain valid until after we've copied it. If we let go too early,
4952 another thread could invalidate it by unsharing last of the same hash key
4953 (which it can do by means other than releasing copy-on-write Svs)
4954 or by changing the other copy-on-write SVs in the loop. */
4956 S_sv_release_COW(pTHX_ register SV *sv, char *pvx, STRLEN cur, STRLEN len,
4957 U32 hash, SV *after)
4959 if (len) { /* this SV was SvIsCOW_normal(sv) */
4960 /* we need to find the SV pointing to us. */
4961 SV *current = SV_COW_NEXT_SV(after);
4963 if (current == sv) {
4964 /* The SV we point to points back to us (there were only two of us
4966 Hence other SV is no longer copy on write either. */
4968 SvREADONLY_off(after);
4970 /* We need to follow the pointers around the loop. */
4972 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4975 /* don't loop forever if the structure is bust, and we have
4976 a pointer into a closed loop. */
4977 assert (current != after);
4978 assert (SvPVX(current) == pvx);
4980 /* Make the SV before us point to the SV after us. */
4981 SV_COW_NEXT_SV_SET(current, after);
4984 unsharepvn(pvx, SvUTF8(sv) ? -(I32)cur : cur, hash);
4989 Perl_sv_release_IVX(pTHX_ register SV *sv)
4992 sv_force_normal_flags(sv, 0);
4998 =for apidoc sv_force_normal_flags
5000 Undo various types of fakery on an SV: if the PV is a shared string, make
5001 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5002 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
5003 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
5004 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5005 SvPOK_off rather than making a copy. (Used where this scalar is about to be
5006 set to some other value.) In addition, the C<flags> parameter gets passed to
5007 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
5008 with flags set to 0.
5014 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
5016 #ifdef PERL_COPY_ON_WRITE
5017 if (SvREADONLY(sv)) {
5018 /* At this point I believe I should acquire a global SV mutex. */
5020 char *pvx = SvPVX(sv);
5021 STRLEN len = SvLEN(sv);
5022 STRLEN cur = SvCUR(sv);
5023 U32 hash = SvUVX(sv);
5024 SV *next = SV_COW_NEXT_SV(sv); /* next COW sv in the loop. */
5026 PerlIO_printf(Perl_debug_log,
5027 "Copy on write: Force normal %ld\n",
5033 /* This SV doesn't own the buffer, so need to New() a new one: */
5034 SvPV_set(sv, (char*)0);
5036 if (flags & SV_COW_DROP_PV) {
5037 /* OK, so we don't need to copy our buffer. */
5040 SvGROW(sv, cur + 1);
5041 Move(pvx,SvPVX(sv),cur,char);
5045 sv_release_COW(sv, pvx, cur, len, hash, next);
5050 else if (IN_PERL_RUNTIME)
5051 Perl_croak(aTHX_ PL_no_modify);
5052 /* At this point I believe that I can drop the global SV mutex. */
5055 if (SvREADONLY(sv)) {
5057 char *pvx = SvPVX(sv);
5058 int is_utf8 = SvUTF8(sv);
5059 STRLEN len = SvCUR(sv);
5060 U32 hash = SvUVX(sv);
5063 SvPV_set(sv, (char*)0);
5065 SvGROW(sv, len + 1);
5066 Move(pvx,SvPVX(sv),len,char);
5068 unsharepvn(pvx, is_utf8 ? -(I32)len : len, hash);
5070 else if (IN_PERL_RUNTIME)
5071 Perl_croak(aTHX_ PL_no_modify);
5075 sv_unref_flags(sv, flags);
5076 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
5081 =for apidoc sv_force_normal
5083 Undo various types of fakery on an SV: if the PV is a shared string, make
5084 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5085 an xpvmg. See also C<sv_force_normal_flags>.
5091 Perl_sv_force_normal(pTHX_ register SV *sv)
5093 sv_force_normal_flags(sv, 0);
5099 Efficient removal of characters from the beginning of the string buffer.
5100 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
5101 the string buffer. The C<ptr> becomes the first character of the adjusted
5102 string. Uses the "OOK hack".
5103 Beware: after this function returns, C<ptr> and SvPVX(sv) may no longer
5104 refer to the same chunk of data.
5110 Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
5112 register STRLEN delta;
5113 if (!ptr || !SvPOKp(sv))
5115 delta = ptr - SvPVX(sv);
5116 SV_CHECK_THINKFIRST(sv);
5117 if (SvTYPE(sv) < SVt_PVIV)
5118 sv_upgrade(sv,SVt_PVIV);
5121 if (!SvLEN(sv)) { /* make copy of shared string */
5122 const char *pvx = SvPVX(sv);
5123 STRLEN len = SvCUR(sv);
5124 SvGROW(sv, len + 1);
5125 Move(pvx,SvPVX(sv),len,char);
5129 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
5130 and we do that anyway inside the SvNIOK_off
5132 SvFLAGS(sv) |= SVf_OOK;
5135 SvLEN_set(sv, SvLEN(sv) - delta);
5136 SvCUR_set(sv, SvCUR(sv) - delta);
5137 SvPV_set(sv, SvPVX(sv) + delta);
5138 SvIV_set(sv, SvIVX(sv) + delta);
5141 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
5142 * this function provided for binary compatibility only
5146 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
5148 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
5152 =for apidoc sv_catpvn
5154 Concatenates the string onto the end of the string which is in the SV. The
5155 C<len> indicates number of bytes to copy. If the SV has the UTF-8
5156 status set, then the bytes appended should be valid UTF-8.
5157 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
5159 =for apidoc sv_catpvn_flags
5161 Concatenates the string onto the end of the string which is in the SV. The
5162 C<len> indicates number of bytes to copy. If the SV has the UTF-8
5163 status set, then the bytes appended should be valid UTF-8.
5164 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
5165 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5166 in terms of this function.
5172 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
5175 const char *dstr = SvPV_force_flags(dsv, dlen, flags);
5177 SvGROW(dsv, dlen + slen + 1);
5180 Move(sstr, SvPVX(dsv) + dlen, slen, char);
5181 SvCUR_set(dsv, SvCUR(dsv) + slen);
5183 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
5188 =for apidoc sv_catpvn_mg
5190 Like C<sv_catpvn>, but also handles 'set' magic.
5196 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
5198 sv_catpvn(sv,ptr,len);
5202 /* sv_catsv() is now a macro using Perl_sv_catsv_flags();
5203 * this function provided for binary compatibility only
5207 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
5209 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
5213 =for apidoc sv_catsv
5215 Concatenates the string from SV C<ssv> onto the end of the string in
5216 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
5217 not 'set' magic. See C<sv_catsv_mg>.
5219 =for apidoc sv_catsv_flags
5221 Concatenates the string from SV C<ssv> onto the end of the string in
5222 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
5223 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
5224 and C<sv_catsv_nomg> are implemented in terms of this function.
5229 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
5235 if ((spv = SvPV(ssv, slen))) {
5236 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
5237 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
5238 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
5239 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
5240 dsv->sv_flags doesn't have that bit set.
5241 Andy Dougherty 12 Oct 2001
5243 I32 sutf8 = DO_UTF8(ssv);
5246 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
5248 dutf8 = DO_UTF8(dsv);
5250 if (dutf8 != sutf8) {
5252 /* Not modifying source SV, so taking a temporary copy. */
5253 SV* csv = sv_2mortal(newSVpvn(spv, slen));
5255 sv_utf8_upgrade(csv);
5256 spv = SvPV(csv, slen);
5259 sv_utf8_upgrade_nomg(dsv);
5261 sv_catpvn_nomg(dsv, spv, slen);
5266 =for apidoc sv_catsv_mg
5268 Like C<sv_catsv>, but also handles 'set' magic.
5274 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
5281 =for apidoc sv_catpv
5283 Concatenates the string onto the end of the string which is in the SV.
5284 If the SV has the UTF-8 status set, then the bytes appended should be
5285 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
5290 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
5292 register STRLEN len;
5298 junk = SvPV_force(sv, tlen);
5300 SvGROW(sv, tlen + len + 1);
5303 Move(ptr,SvPVX(sv)+tlen,len+1,char);
5304 SvCUR_set(sv, SvCUR(sv) + len);
5305 (void)SvPOK_only_UTF8(sv); /* validate pointer */
5310 =for apidoc sv_catpv_mg
5312 Like C<sv_catpv>, but also handles 'set' magic.
5318 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
5327 Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
5328 with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
5335 Perl_newSV(pTHX_ STRLEN len)
5341 sv_upgrade(sv, SVt_PV);
5342 SvGROW(sv, len + 1);
5347 =for apidoc sv_magicext
5349 Adds magic to an SV, upgrading it if necessary. Applies the
5350 supplied vtable and returns a pointer to the magic added.
5352 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5353 In particular, you can add magic to SvREADONLY SVs, and add more than
5354 one instance of the same 'how'.
5356 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5357 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5358 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5359 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5361 (This is now used as a subroutine by C<sv_magic>.)
5366 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, const MGVTBL *vtable,
5367 const char* name, I32 namlen)
5371 if (SvTYPE(sv) < SVt_PVMG) {
5372 (void)SvUPGRADE(sv, SVt_PVMG);
5374 Newz(702,mg, 1, MAGIC);
5375 mg->mg_moremagic = SvMAGIC(sv);
5376 SvMAGIC_set(sv, mg);
5378 /* Sometimes a magic contains a reference loop, where the sv and
5379 object refer to each other. To prevent a reference loop that
5380 would prevent such objects being freed, we look for such loops
5381 and if we find one we avoid incrementing the object refcount.
5383 Note we cannot do this to avoid self-tie loops as intervening RV must
5384 have its REFCNT incremented to keep it in existence.
5387 if (!obj || obj == sv ||
5388 how == PERL_MAGIC_arylen ||
5389 how == PERL_MAGIC_qr ||
5390 how == PERL_MAGIC_symtab ||
5391 (SvTYPE(obj) == SVt_PVGV &&
5392 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
5393 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
5394 GvFORM(obj) == (CV*)sv)))
5399 mg->mg_obj = SvREFCNT_inc(obj);
5400 mg->mg_flags |= MGf_REFCOUNTED;
5403 /* Normal self-ties simply pass a null object, and instead of
5404 using mg_obj directly, use the SvTIED_obj macro to produce a
5405 new RV as needed. For glob "self-ties", we are tieing the PVIO
5406 with an RV obj pointing to the glob containing the PVIO. In
5407 this case, to avoid a reference loop, we need to weaken the
5411 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5412 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
5418 mg->mg_len = namlen;
5421 mg->mg_ptr = savepvn(name, namlen);
5422 else if (namlen == HEf_SVKEY)
5423 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
5425 mg->mg_ptr = (char *) name;
5427 mg->mg_virtual = vtable;
5431 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5436 =for apidoc sv_magic
5438 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5439 then adds a new magic item of type C<how> to the head of the magic list.
5441 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5442 handling of the C<name> and C<namlen> arguments.
5444 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5445 to add more than one instance of the same 'how'.
5451 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
5453 const MGVTBL *vtable = 0;
5456 #ifdef PERL_COPY_ON_WRITE
5458 sv_force_normal_flags(sv, 0);
5460 if (SvREADONLY(sv)) {
5462 && how != PERL_MAGIC_regex_global
5463 && how != PERL_MAGIC_bm
5464 && how != PERL_MAGIC_fm
5465 && how != PERL_MAGIC_sv
5466 && how != PERL_MAGIC_backref
5469 Perl_croak(aTHX_ PL_no_modify);
5472 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5473 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5474 /* sv_magic() refuses to add a magic of the same 'how' as an
5477 if (how == PERL_MAGIC_taint)
5485 vtable = &PL_vtbl_sv;
5487 case PERL_MAGIC_overload:
5488 vtable = &PL_vtbl_amagic;
5490 case PERL_MAGIC_overload_elem:
5491 vtable = &PL_vtbl_amagicelem;
5493 case PERL_MAGIC_overload_table:
5494 vtable = &PL_vtbl_ovrld;
5497 vtable = &PL_vtbl_bm;
5499 case PERL_MAGIC_regdata:
5500 vtable = &PL_vtbl_regdata;
5502 case PERL_MAGIC_regdatum:
5503 vtable = &PL_vtbl_regdatum;
5505 case PERL_MAGIC_env:
5506 vtable = &PL_vtbl_env;
5509 vtable = &PL_vtbl_fm;
5511 case PERL_MAGIC_envelem:
5512 vtable = &PL_vtbl_envelem;
5514 case PERL_MAGIC_regex_global:
5515 vtable = &PL_vtbl_mglob;
5517 case PERL_MAGIC_isa:
5518 vtable = &PL_vtbl_isa;
5520 case PERL_MAGIC_isaelem:
5521 vtable = &PL_vtbl_isaelem;
5523 case PERL_MAGIC_nkeys:
5524 vtable = &PL_vtbl_nkeys;
5526 case PERL_MAGIC_dbfile:
5529 case PERL_MAGIC_dbline:
5530 vtable = &PL_vtbl_dbline;
5532 #ifdef USE_LOCALE_COLLATE
5533 case PERL_MAGIC_collxfrm:
5534 vtable = &PL_vtbl_collxfrm;
5536 #endif /* USE_LOCALE_COLLATE */
5537 case PERL_MAGIC_tied:
5538 vtable = &PL_vtbl_pack;
5540 case PERL_MAGIC_tiedelem:
5541 case PERL_MAGIC_tiedscalar:
5542 vtable = &PL_vtbl_packelem;
5545 vtable = &PL_vtbl_regexp;
5547 case PERL_MAGIC_sig:
5548 vtable = &PL_vtbl_sig;
5550 case PERL_MAGIC_sigelem:
5551 vtable = &PL_vtbl_sigelem;
5553 case PERL_MAGIC_taint:
5554 vtable = &PL_vtbl_taint;
5556 case PERL_MAGIC_uvar:
5557 vtable = &PL_vtbl_uvar;
5559 case PERL_MAGIC_vec:
5560 vtable = &PL_vtbl_vec;
5562 case PERL_MAGIC_rhash:
5563 case PERL_MAGIC_symtab:
5564 case PERL_MAGIC_vstring:
5567 case PERL_MAGIC_utf8:
5568 vtable = &PL_vtbl_utf8;
5570 case PERL_MAGIC_substr:
5571 vtable = &PL_vtbl_substr;
5573 case PERL_MAGIC_defelem:
5574 vtable = &PL_vtbl_defelem;
5576 case PERL_MAGIC_glob:
5577 vtable = &PL_vtbl_glob;
5579 case PERL_MAGIC_arylen:
5580 vtable = &PL_vtbl_arylen;
5582 case PERL_MAGIC_pos:
5583 vtable = &PL_vtbl_pos;
5585 case PERL_MAGIC_backref:
5586 vtable = &PL_vtbl_backref;
5588 case PERL_MAGIC_ext:
5589 /* Reserved for use by extensions not perl internals. */
5590 /* Useful for attaching extension internal data to perl vars. */
5591 /* Note that multiple extensions may clash if magical scalars */
5592 /* etc holding private data from one are passed to another. */
5595 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5598 /* Rest of work is done else where */
5599 mg = sv_magicext(sv,obj,how,(MGVTBL*)vtable,name,namlen);
5602 case PERL_MAGIC_taint:
5605 case PERL_MAGIC_ext:
5606 case PERL_MAGIC_dbfile:
5613 =for apidoc sv_unmagic
5615 Removes all magic of type C<type> from an SV.
5621 Perl_sv_unmagic(pTHX_ SV *sv, int type)
5625 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5628 for (mg = *mgp; mg; mg = *mgp) {
5629 if (mg->mg_type == type) {
5630 const MGVTBL* const vtbl = mg->mg_virtual;
5631 *mgp = mg->mg_moremagic;
5632 if (vtbl && vtbl->svt_free)
5633 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
5634 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5636 Safefree(mg->mg_ptr);
5637 else if (mg->mg_len == HEf_SVKEY)
5638 SvREFCNT_dec((SV*)mg->mg_ptr);
5639 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
5640 Safefree(mg->mg_ptr);
5642 if (mg->mg_flags & MGf_REFCOUNTED)
5643 SvREFCNT_dec(mg->mg_obj);
5647 mgp = &mg->mg_moremagic;
5651 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5658 =for apidoc sv_rvweaken
5660 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5661 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5662 push a back-reference to this RV onto the array of backreferences
5663 associated with that magic.
5669 Perl_sv_rvweaken(pTHX_ SV *sv)
5672 if (!SvOK(sv)) /* let undefs pass */
5675 Perl_croak(aTHX_ "Can't weaken a nonreference");
5676 else if (SvWEAKREF(sv)) {
5677 if (ckWARN(WARN_MISC))
5678 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5682 sv_add_backref(tsv, sv);
5688 /* Give tsv backref magic if it hasn't already got it, then push a
5689 * back-reference to sv onto the array associated with the backref magic.
5693 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
5697 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
5698 av = (AV*)mg->mg_obj;
5701 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
5702 /* av now has a refcnt of 2, which avoids it getting freed
5703 * before us during global cleanup. The extra ref is removed
5704 * by magic_killbackrefs() when tsv is being freed */
5706 if (AvFILLp(av) >= AvMAX(av)) {
5708 SV **svp = AvARRAY(av);
5709 for (i = AvFILLp(av); i >= 0; i--)
5711 svp[i] = sv; /* reuse the slot */
5714 av_extend(av, AvFILLp(av)+1);
5716 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5719 /* delete a back-reference to ourselves from the backref magic associated
5720 * with the SV we point to.
5724 S_sv_del_backref(pTHX_ SV *sv)
5731 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
5732 Perl_croak(aTHX_ "panic: del_backref");
5733 av = (AV *)mg->mg_obj;
5735 for (i = AvFILLp(av); i >= 0; i--)
5736 if (svp[i] == sv) svp[i] = Nullsv;
5740 =for apidoc sv_insert
5742 Inserts a string at the specified offset/length within the SV. Similar to
5743 the Perl substr() function.
5749 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
5753 register char *midend;
5754 register char *bigend;
5760 Perl_croak(aTHX_ "Can't modify non-existent substring");
5761 SvPV_force(bigstr, curlen);
5762 (void)SvPOK_only_UTF8(bigstr);
5763 if (offset + len > curlen) {
5764 SvGROW(bigstr, offset+len+1);
5765 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5766 SvCUR_set(bigstr, offset+len);
5770 i = littlelen - len;
5771 if (i > 0) { /* string might grow */
5772 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5773 mid = big + offset + len;
5774 midend = bigend = big + SvCUR(bigstr);
5777 while (midend > mid) /* shove everything down */
5778 *--bigend = *--midend;
5779 Move(little,big+offset,littlelen,char);
5780 SvCUR_set(bigstr, SvCUR(bigstr) + i);
5785 Move(little,SvPVX(bigstr)+offset,len,char);
5790 big = SvPVX(bigstr);
5793 bigend = big + SvCUR(bigstr);
5795 if (midend > bigend)
5796 Perl_croak(aTHX_ "panic: sv_insert");
5798 if (mid - big > bigend - midend) { /* faster to shorten from end */
5800 Move(little, mid, littlelen,char);
5803 i = bigend - midend;
5805 Move(midend, mid, i,char);
5809 SvCUR_set(bigstr, mid - big);
5812 else if ((i = mid - big)) { /* faster from front */
5813 midend -= littlelen;
5815 sv_chop(bigstr,midend-i);
5820 Move(little, mid, littlelen,char);
5822 else if (littlelen) {
5823 midend -= littlelen;
5824 sv_chop(bigstr,midend);
5825 Move(little,midend,littlelen,char);
5828 sv_chop(bigstr,midend);
5834 =for apidoc sv_replace
5836 Make the first argument a copy of the second, then delete the original.
5837 The target SV physically takes over ownership of the body of the source SV
5838 and inherits its flags; however, the target keeps any magic it owns,
5839 and any magic in the source is discarded.
5840 Note that this is a rather specialist SV copying operation; most of the
5841 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5847 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
5849 const U32 refcnt = SvREFCNT(sv);
5850 SV_CHECK_THINKFIRST_COW_DROP(sv);
5851 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
5852 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Reference miscount in sv_replace()");
5853 if (SvMAGICAL(sv)) {
5857 sv_upgrade(nsv, SVt_PVMG);
5858 SvMAGIC_set(nsv, SvMAGIC(sv));
5859 SvFLAGS(nsv) |= SvMAGICAL(sv);
5861 SvMAGIC_set(sv, NULL);
5865 assert(!SvREFCNT(sv));
5866 #ifdef DEBUG_LEAKING_SCALARS
5867 sv->sv_flags = nsv->sv_flags;
5868 sv->sv_any = nsv->sv_any;
5869 sv->sv_refcnt = nsv->sv_refcnt;
5871 StructCopy(nsv,sv,SV);
5874 #ifdef PERL_COPY_ON_WRITE
5875 if (SvIsCOW_normal(nsv)) {
5876 /* We need to follow the pointers around the loop to make the
5877 previous SV point to sv, rather than nsv. */
5880 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5883 assert(SvPVX(current) == SvPVX(nsv));
5885 /* Make the SV before us point to the SV after us. */
5887 PerlIO_printf(Perl_debug_log, "previous is\n");
5889 PerlIO_printf(Perl_debug_log,
5890 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5891 (UV) SV_COW_NEXT_SV(current), (UV) sv);
5893 SV_COW_NEXT_SV_SET(current, sv);
5896 SvREFCNT(sv) = refcnt;
5897 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
5903 =for apidoc sv_clear
5905 Clear an SV: call any destructors, free up any memory used by the body,
5906 and free the body itself. The SV's head is I<not> freed, although
5907 its type is set to all 1's so that it won't inadvertently be assumed
5908 to be live during global destruction etc.
5909 This function should only be called when REFCNT is zero. Most of the time
5910 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5917 Perl_sv_clear(pTHX_ register SV *sv)
5922 assert(SvREFCNT(sv) == 0);
5925 if (PL_defstash) { /* Still have a symbol table? */
5932 stash = SvSTASH(sv);
5933 destructor = StashHANDLER(stash,DESTROY);
5935 SV* tmpref = newRV(sv);
5936 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
5938 PUSHSTACKi(PERLSI_DESTROY);
5943 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5949 if(SvREFCNT(tmpref) < 2) {
5950 /* tmpref is not kept alive! */
5952 SvRV_set(tmpref, NULL);
5955 SvREFCNT_dec(tmpref);
5957 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5961 if (PL_in_clean_objs)
5962 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5964 /* DESTROY gave object new lease on life */
5970 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
5971 SvOBJECT_off(sv); /* Curse the object. */
5972 if (SvTYPE(sv) != SVt_PVIO)
5973 --PL_sv_objcount; /* XXX Might want something more general */
5976 if (SvTYPE(sv) >= SVt_PVMG) {
5979 if (SvTYPE(sv) == SVt_PVMG && SvFLAGS(sv) & SVpad_TYPED)
5980 SvREFCNT_dec(SvSTASH(sv));
5983 switch (SvTYPE(sv)) {
5986 IoIFP(sv) != PerlIO_stdin() &&
5987 IoIFP(sv) != PerlIO_stdout() &&
5988 IoIFP(sv) != PerlIO_stderr())
5990 io_close((IO*)sv, FALSE);
5992 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5993 PerlDir_close(IoDIRP(sv));
5994 IoDIRP(sv) = (DIR*)NULL;
5995 Safefree(IoTOP_NAME(sv));
5996 Safefree(IoFMT_NAME(sv));
5997 Safefree(IoBOTTOM_NAME(sv));
6012 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6013 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6014 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6015 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6017 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
6018 SvREFCNT_dec(LvTARG(sv));
6022 Safefree(GvNAME(sv));
6023 /* cannot decrease stash refcount yet, as we might recursively delete
6024 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
6025 of stash until current sv is completely gone.
6026 -- JohnPC, 27 Mar 1998 */
6027 stash = GvSTASH(sv);
6033 /* Don't bother with SvOOK_off(sv); as we're only going to free it. */
6035 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
6036 /* Don't even bother with turning off the OOK flag. */
6045 SvREFCNT_dec(SvRV(sv));
6047 #ifdef PERL_COPY_ON_WRITE
6048 else if (SvPVX(sv)) {
6050 /* I believe I need to grab the global SV mutex here and
6051 then recheck the COW status. */
6053 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6056 sv_release_COW(sv, SvPVX(sv), SvCUR(sv), SvLEN(sv),
6057 SvUVX(sv), SV_COW_NEXT_SV(sv));
6058 /* And drop it here. */
6060 } else if (SvLEN(sv)) {
6061 Safefree(SvPVX(sv));
6065 else if (SvPVX(sv) && SvLEN(sv))
6066 Safefree(SvPVX(sv));
6067 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
6068 unsharepvn(SvPVX(sv),
6069 SvUTF8(sv) ? -(I32)SvCUR(sv) : SvCUR(sv),
6083 switch (SvTYPE(sv)) {
6099 del_XPVIV(SvANY(sv));
6102 del_XPVNV(SvANY(sv));
6105 del_XPVMG(SvANY(sv));
6108 del_XPVLV(SvANY(sv));
6111 del_XPVAV(SvANY(sv));
6114 del_XPVHV(SvANY(sv));
6117 del_XPVCV(SvANY(sv));
6120 del_XPVGV(SvANY(sv));
6121 /* code duplication for increased performance. */
6122 SvFLAGS(sv) &= SVf_BREAK;
6123 SvFLAGS(sv) |= SVTYPEMASK;
6124 /* decrease refcount of the stash that owns this GV, if any */
6126 SvREFCNT_dec(stash);
6127 return; /* not break, SvFLAGS reset already happened */
6129 del_XPVBM(SvANY(sv));
6132 del_XPVFM(SvANY(sv));
6135 del_XPVIO(SvANY(sv));
6138 SvFLAGS(sv) &= SVf_BREAK;
6139 SvFLAGS(sv) |= SVTYPEMASK;
6143 =for apidoc sv_newref
6145 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
6152 Perl_sv_newref(pTHX_ SV *sv)
6162 Decrement an SV's reference count, and if it drops to zero, call
6163 C<sv_clear> to invoke destructors and free up any memory used by
6164 the body; finally, deallocate the SV's head itself.
6165 Normally called via a wrapper macro C<SvREFCNT_dec>.
6171 Perl_sv_free(pTHX_ SV *sv)
6176 if (SvREFCNT(sv) == 0) {
6177 if (SvFLAGS(sv) & SVf_BREAK)
6178 /* this SV's refcnt has been artificially decremented to
6179 * trigger cleanup */
6181 if (PL_in_clean_all) /* All is fair */
6183 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6184 /* make sure SvREFCNT(sv)==0 happens very seldom */
6185 SvREFCNT(sv) = (~(U32)0)/2;
6188 if (ckWARN_d(WARN_INTERNAL))
6189 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6190 "Attempt to free unreferenced scalar: SV 0x%"UVxf
6191 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6194 if (--(SvREFCNT(sv)) > 0)
6196 Perl_sv_free2(aTHX_ sv);
6200 Perl_sv_free2(pTHX_ SV *sv)
6205 if (ckWARN_d(WARN_DEBUGGING))
6206 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
6207 "Attempt to free temp prematurely: SV 0x%"UVxf
6208 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6212 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
6213 /* make sure SvREFCNT(sv)==0 happens very seldom */
6214 SvREFCNT(sv) = (~(U32)0)/2;
6225 Returns the length of the string in the SV. Handles magic and type
6226 coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
6232 Perl_sv_len(pTHX_ register SV *sv)
6240 len = mg_length(sv);
6242 (void)SvPV(sv, len);
6247 =for apidoc sv_len_utf8
6249 Returns the number of characters in the string in an SV, counting wide
6250 UTF-8 bytes as a single character. Handles magic and type coercion.
6256 * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the
6257 * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init().
6258 * (Note that the mg_len is not the length of the mg_ptr field.)
6263 Perl_sv_len_utf8(pTHX_ register SV *sv)
6269 return mg_length(sv);
6273 const U8 *s = (U8*)SvPV(sv, len);
6274 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
6276 if (mg && mg->mg_len != -1 && (mg->mg_len > 0 || len == 0)) {
6278 #ifdef PERL_UTF8_CACHE_ASSERT
6279 assert(ulen == Perl_utf8_length(aTHX_ s, s + len));
6283 ulen = Perl_utf8_length(aTHX_ s, s + len);
6284 if (!mg && !SvREADONLY(sv)) {
6285 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
6286 mg = mg_find(sv, PERL_MAGIC_utf8);
6296 /* S_utf8_mg_pos_init() is used to initialize the mg_ptr field of
6297 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
6298 * between UTF-8 and byte offsets. There are two (substr offset and substr
6299 * length, the i offset, PERL_MAGIC_UTF8_CACHESIZE) times two (UTF-8 offset
6300 * and byte offset) cache positions.
6302 * The mg_len field is used by sv_len_utf8(), see its comments.
6303 * Note that the mg_len is not the length of the mg_ptr field.
6307 S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 offsetp, U8 *s, U8 *start)
6311 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
6313 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0, 0);
6317 *cachep = (STRLEN *) (*mgp)->mg_ptr;
6319 Newz(0, *cachep, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6320 (*mgp)->mg_ptr = (char *) *cachep;
6324 (*cachep)[i] = offsetp;
6325 (*cachep)[i+1] = s - start;
6333 * S_utf8_mg_pos() is used to query and update mg_ptr field of
6334 * a PERL_UTF8_magic. The mg_ptr is used to store the mapping
6335 * between UTF-8 and byte offsets. See also the comments of
6336 * S_utf8_mg_pos_init().
6340 S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I32 uoff, U8 **sp, U8 *start, U8 *send)
6344 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
6346 *mgp = mg_find(sv, PERL_MAGIC_utf8);
6347 if (*mgp && (*mgp)->mg_ptr) {
6348 *cachep = (STRLEN *) (*mgp)->mg_ptr;
6349 ASSERT_UTF8_CACHE(*cachep);
6350 if ((*cachep)[i] == (STRLEN)uoff) /* An exact match. */
6352 else { /* We will skip to the right spot. */
6357 /* The assumption is that going backward is half
6358 * the speed of going forward (that's where the
6359 * 2 * backw in the below comes from). (The real
6360 * figure of course depends on the UTF-8 data.) */
6362 if ((*cachep)[i] > (STRLEN)uoff) {
6364 backw = (*cachep)[i] - (STRLEN)uoff;
6366 if (forw < 2 * backw)
6369 p = start + (*cachep)[i+1];
6371 /* Try this only for the substr offset (i == 0),
6372 * not for the substr length (i == 2). */
6373 else if (i == 0) { /* (*cachep)[i] < uoff */
6374 const STRLEN ulen = sv_len_utf8(sv);
6376 if ((STRLEN)uoff < ulen) {
6377 forw = (STRLEN)uoff - (*cachep)[i];
6378 backw = ulen - (STRLEN)uoff;
6380 if (forw < 2 * backw)
6381 p = start + (*cachep)[i+1];
6386 /* If the string is not long enough for uoff,
6387 * we could extend it, but not at this low a level. */
6391 if (forw < 2 * backw) {
6398 while (UTF8_IS_CONTINUATION(*p))
6403 /* Update the cache. */
6404 (*cachep)[i] = (STRLEN)uoff;
6405 (*cachep)[i+1] = p - start;
6407 /* Drop the stale "length" cache */
6416 if (found) { /* Setup the return values. */
6417 *offsetp = (*cachep)[i+1];
6418 *sp = start + *offsetp;
6421 *offsetp = send - start;
6423 else if (*sp < start) {
6429 #ifdef PERL_UTF8_CACHE_ASSERT
6434 while (n-- && s < send)
6438 assert(*offsetp == s - start);
6439 assert((*cachep)[0] == (STRLEN)uoff);
6440 assert((*cachep)[1] == *offsetp);
6442 ASSERT_UTF8_CACHE(*cachep);
6451 =for apidoc sv_pos_u2b
6453 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6454 the start of the string, to a count of the equivalent number of bytes; if
6455 lenp is non-zero, it does the same to lenp, but this time starting from
6456 the offset, rather than from the start of the string. Handles magic and
6463 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6464 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
6465 * byte offsets. See also the comments of S_utf8_mg_pos().
6470 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
6481 start = s = (U8*)SvPV(sv, len);
6483 I32 uoffset = *offsetp;
6488 if (utf8_mg_pos(sv, &mg, &cache, 0, offsetp, *offsetp, &s, start, send))
6490 if (!found && uoffset > 0) {
6491 while (s < send && uoffset--)
6495 if (utf8_mg_pos_init(sv, &mg, &cache, 0, *offsetp, s, start))
6497 *offsetp = s - start;
6502 if (utf8_mg_pos(sv, &mg, &cache, 2, lenp, *lenp, &s, start, send)) {
6506 if (!found && *lenp > 0) {
6509 while (s < send && ulen--)
6513 utf8_mg_pos_init(sv, &mg, &cache, 2, *lenp, s, start);
6517 ASSERT_UTF8_CACHE(cache);
6529 =for apidoc sv_pos_b2u
6531 Converts the value pointed to by offsetp from a count of bytes from the
6532 start of the string, to a count of the equivalent number of UTF-8 chars.
6533 Handles magic and type coercion.
6539 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6540 * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
6541 * byte offsets. See also the comments of S_utf8_mg_pos().
6546 Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
6554 s = (U8*)SvPV(sv, len);
6555 if ((I32)len < *offsetp)
6556 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6558 U8* send = s + *offsetp;
6560 STRLEN *cache = NULL;
6564 if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
6565 mg = mg_find(sv, PERL_MAGIC_utf8);
6566 if (mg && mg->mg_ptr) {
6567 cache = (STRLEN *) mg->mg_ptr;
6568 if (cache[1] == (STRLEN)*offsetp) {
6569 /* An exact match. */
6570 *offsetp = cache[0];
6574 else if (cache[1] < (STRLEN)*offsetp) {
6575 /* We already know part of the way. */
6578 /* Let the below loop do the rest. */
6580 else { /* cache[1] > *offsetp */
6581 /* We already know all of the way, now we may
6582 * be able to walk back. The same assumption
6583 * is made as in S_utf8_mg_pos(), namely that
6584 * walking backward is twice slower than
6585 * walking forward. */
6586 STRLEN forw = *offsetp;
6587 STRLEN backw = cache[1] - *offsetp;
6589 if (!(forw < 2 * backw)) {
6590 U8 *p = s + cache[1];
6597 while (UTF8_IS_CONTINUATION(*p)) {
6605 *offsetp = cache[0];
6607 /* Drop the stale "length" cache */
6615 ASSERT_UTF8_CACHE(cache);
6621 /* Call utf8n_to_uvchr() to validate the sequence
6622 * (unless a simple non-UTF character) */
6623 if (!UTF8_IS_INVARIANT(*s))
6624 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
6633 if (!SvREADONLY(sv)) {
6635 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
6636 mg = mg_find(sv, PERL_MAGIC_utf8);
6641 Newz(0, cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6642 mg->mg_ptr = (char *) cache;
6647 cache[1] = *offsetp;
6648 /* Drop the stale "length" cache */
6661 Returns a boolean indicating whether the strings in the two SVs are
6662 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6663 coerce its args to strings if necessary.
6669 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
6677 SV* svrecode = Nullsv;
6684 pv1 = SvPV(sv1, cur1);
6691 pv2 = SvPV(sv2, cur2);
6693 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6694 /* Differing utf8ness.
6695 * Do not UTF8size the comparands as a side-effect. */
6698 svrecode = newSVpvn(pv2, cur2);
6699 sv_recode_to_utf8(svrecode, PL_encoding);
6700 pv2 = SvPV(svrecode, cur2);
6703 svrecode = newSVpvn(pv1, cur1);
6704 sv_recode_to_utf8(svrecode, PL_encoding);
6705 pv1 = SvPV(svrecode, cur1);
6707 /* Now both are in UTF-8. */
6709 SvREFCNT_dec(svrecode);
6714 bool is_utf8 = TRUE;
6717 /* sv1 is the UTF-8 one,
6718 * if is equal it must be downgrade-able */
6719 char *pv = (char*)bytes_from_utf8((const U8*)pv1,
6725 /* sv2 is the UTF-8 one,
6726 * if is equal it must be downgrade-able */
6727 char *pv = (char *)bytes_from_utf8((const U8*)pv2,
6733 /* Downgrade not possible - cannot be eq */
6741 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6744 SvREFCNT_dec(svrecode);
6755 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
6756 string in C<sv1> is less than, equal to, or greater than the string in
6757 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6758 coerce its args to strings if necessary. See also C<sv_cmp_locale>.
6764 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
6767 const char *pv1, *pv2;
6770 SV *svrecode = Nullsv;
6777 pv1 = SvPV(sv1, cur1);
6784 pv2 = SvPV(sv2, cur2);
6786 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6787 /* Differing utf8ness.
6788 * Do not UTF8size the comparands as a side-effect. */
6791 svrecode = newSVpvn(pv2, cur2);
6792 sv_recode_to_utf8(svrecode, PL_encoding);
6793 pv2 = SvPV(svrecode, cur2);
6796 pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6801 svrecode = newSVpvn(pv1, cur1);
6802 sv_recode_to_utf8(svrecode, PL_encoding);
6803 pv1 = SvPV(svrecode, cur1);
6806 pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6812 cmp = cur2 ? -1 : 0;
6816 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6819 cmp = retval < 0 ? -1 : 1;
6820 } else if (cur1 == cur2) {
6823 cmp = cur1 < cur2 ? -1 : 1;
6828 SvREFCNT_dec(svrecode);
6837 =for apidoc sv_cmp_locale
6839 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6840 'use bytes' aware, handles get magic, and will coerce its args to strings
6841 if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
6847 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
6849 #ifdef USE_LOCALE_COLLATE
6855 if (PL_collation_standard)
6859 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6861 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6863 if (!pv1 || !len1) {
6874 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6877 return retval < 0 ? -1 : 1;
6880 * When the result of collation is equality, that doesn't mean
6881 * that there are no differences -- some locales exclude some
6882 * characters from consideration. So to avoid false equalities,
6883 * we use the raw string as a tiebreaker.
6889 #endif /* USE_LOCALE_COLLATE */
6891 return sv_cmp(sv1, sv2);
6895 #ifdef USE_LOCALE_COLLATE
6898 =for apidoc sv_collxfrm
6900 Add Collate Transform magic to an SV if it doesn't already have it.
6902 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6903 scalar data of the variable, but transformed to such a format that a normal
6904 memory comparison can be used to compare the data according to the locale
6911 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
6915 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6916 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6921 Safefree(mg->mg_ptr);
6923 if ((xf = mem_collxfrm(s, len, &xlen))) {
6924 if (SvREADONLY(sv)) {
6927 return xf + sizeof(PL_collation_ix);
6930 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
6931 mg = mg_find(sv, PERL_MAGIC_collxfrm);
6944 if (mg && mg->mg_ptr) {
6946 return mg->mg_ptr + sizeof(PL_collation_ix);
6954 #endif /* USE_LOCALE_COLLATE */
6959 Get a line from the filehandle and store it into the SV, optionally
6960 appending to the currently-stored string.
6966 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
6970 register STDCHAR rslast;
6971 register STDCHAR *bp;
6977 if (SvTHINKFIRST(sv))
6978 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6979 /* XXX. If you make this PVIV, then copy on write can copy scalars read
6981 However, perlbench says it's slower, because the existing swipe code
6982 is faster than copy on write.
6983 Swings and roundabouts. */
6984 (void)SvUPGRADE(sv, SVt_PV);
6989 if (PerlIO_isutf8(fp)) {
6991 sv_utf8_upgrade_nomg(sv);
6992 sv_pos_u2b(sv,&append,0);
6994 } else if (SvUTF8(sv)) {
6995 SV *tsv = NEWSV(0,0);
6996 sv_gets(tsv, fp, 0);
6997 sv_utf8_upgrade_nomg(tsv);
6998 SvCUR_set(sv,append);
7001 goto return_string_or_null;
7006 if (PerlIO_isutf8(fp))
7009 if (IN_PERL_COMPILETIME) {
7010 /* we always read code in line mode */
7014 else if (RsSNARF(PL_rs)) {
7015 /* If it is a regular disk file use size from stat() as estimate
7016 of amount we are going to read - may result in malloc-ing
7017 more memory than we realy need if layers bellow reduce
7018 size we read (e.g. CRLF or a gzip layer)
7021 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) {
7022 const Off_t offset = PerlIO_tell(fp);
7023 if (offset != (Off_t) -1 && st.st_size + append > offset) {
7024 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7030 else if (RsRECORD(PL_rs)) {
7034 /* Grab the size of the record we're getting */
7035 recsize = SvIV(SvRV(PL_rs));
7036 buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7039 /* VMS wants read instead of fread, because fread doesn't respect */
7040 /* RMS record boundaries. This is not necessarily a good thing to be */
7041 /* doing, but we've got no other real choice - except avoid stdio
7042 as implementation - perhaps write a :vms layer ?
7044 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
7046 bytesread = PerlIO_read(fp, buffer, recsize);
7050 SvCUR_set(sv, bytesread += append);
7051 buffer[bytesread] = '\0';
7052 goto return_string_or_null;
7054 else if (RsPARA(PL_rs)) {
7060 /* Get $/ i.e. PL_rs into same encoding as stream wants */
7061 if (PerlIO_isutf8(fp)) {
7062 rsptr = SvPVutf8(PL_rs, rslen);
7065 if (SvUTF8(PL_rs)) {
7066 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7067 Perl_croak(aTHX_ "Wide character in $/");
7070 rsptr = SvPV(PL_rs, rslen);
7074 rslast = rslen ? rsptr[rslen - 1] : '\0';
7076 if (rspara) { /* have to do this both before and after */
7077 do { /* to make sure file boundaries work right */
7080 i = PerlIO_getc(fp);
7084 PerlIO_ungetc(fp,i);
7090 /* See if we know enough about I/O mechanism to cheat it ! */
7092 /* This used to be #ifdef test - it is made run-time test for ease
7093 of abstracting out stdio interface. One call should be cheap
7094 enough here - and may even be a macro allowing compile
7098 if (PerlIO_fast_gets(fp)) {
7101 * We're going to steal some values from the stdio struct
7102 * and put EVERYTHING in the innermost loop into registers.
7104 register STDCHAR *ptr;
7108 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7109 /* An ungetc()d char is handled separately from the regular
7110 * buffer, so we getc() it back out and stuff it in the buffer.
7112 i = PerlIO_getc(fp);
7113 if (i == EOF) return 0;
7114 *(--((*fp)->_ptr)) = (unsigned char) i;
7118 /* Here is some breathtakingly efficient cheating */
7120 cnt = PerlIO_get_cnt(fp); /* get count into register */
7121 /* make sure we have the room */
7122 if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7123 /* Not room for all of it
7124 if we are looking for a separator and room for some
7126 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7127 /* just process what we have room for */
7128 shortbuffered = cnt - SvLEN(sv) + append + 1;
7129 cnt -= shortbuffered;
7133 /* remember that cnt can be negative */
7134 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7139 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
7140 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7141 DEBUG_P(PerlIO_printf(Perl_debug_log,
7142 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7143 DEBUG_P(PerlIO_printf(Perl_debug_log,
7144 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7145 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7146 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7151 while (cnt > 0) { /* this | eat */
7153 if ((*bp++ = *ptr++) == rslast) /* really | dust */
7154 goto thats_all_folks; /* screams | sed :-) */
7158 Copy(ptr, bp, cnt, char); /* this | eat */
7159 bp += cnt; /* screams | dust */
7160 ptr += cnt; /* louder | sed :-) */
7165 if (shortbuffered) { /* oh well, must extend */
7166 cnt = shortbuffered;
7168 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
7170 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7171 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
7175 DEBUG_P(PerlIO_printf(Perl_debug_log,
7176 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7177 PTR2UV(ptr),(long)cnt));
7178 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7180 DEBUG_P(PerlIO_printf(Perl_debug_log,
7181 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7182 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7183 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7185 /* This used to call 'filbuf' in stdio form, but as that behaves like
7186 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7187 another abstraction. */
7188 i = PerlIO_getc(fp); /* get more characters */
7190 DEBUG_P(PerlIO_printf(Perl_debug_log,
7191 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7192 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7193 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7195 cnt = PerlIO_get_cnt(fp);
7196 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
7197 DEBUG_P(PerlIO_printf(Perl_debug_log,
7198 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7200 if (i == EOF) /* all done for ever? */
7201 goto thats_really_all_folks;
7203 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
7205 SvGROW(sv, bpx + cnt + 2);
7206 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
7208 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */
7210 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
7211 goto thats_all_folks;
7215 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX(sv)) < rslen) ||
7216 memNE((char*)bp - rslen, rsptr, rslen))
7217 goto screamer; /* go back to the fray */
7218 thats_really_all_folks:
7220 cnt += shortbuffered;
7221 DEBUG_P(PerlIO_printf(Perl_debug_log,
7222 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7223 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */
7224 DEBUG_P(PerlIO_printf(Perl_debug_log,
7225 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7226 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7227 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7229 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
7230 DEBUG_P(PerlIO_printf(Perl_debug_log,
7231 "Screamer: done, len=%ld, string=|%.*s|\n",
7232 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
7236 /*The big, slow, and stupid way. */
7237 #ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */
7239 New(0, buf, 8192, STDCHAR);
7247 const register STDCHAR *bpe = buf + sizeof(buf);
7249 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7250 ; /* keep reading */
7254 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7255 /* Accomodate broken VAXC compiler, which applies U8 cast to
7256 * both args of ?: operator, causing EOF to change into 255
7259 i = (U8)buf[cnt - 1];
7265 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */
7267 sv_catpvn(sv, (char *) buf, cnt);
7269 sv_setpvn(sv, (char *) buf, cnt);
7271 if (i != EOF && /* joy */
7273 SvCUR(sv) < rslen ||
7274 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7278 * If we're reading from a TTY and we get a short read,
7279 * indicating that the user hit his EOF character, we need
7280 * to notice it now, because if we try to read from the TTY
7281 * again, the EOF condition will disappear.
7283 * The comparison of cnt to sizeof(buf) is an optimization
7284 * that prevents unnecessary calls to feof().
7288 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
7292 #ifdef USE_HEAP_INSTEAD_OF_STACK
7297 if (rspara) { /* have to do this both before and after */
7298 while (i != EOF) { /* to make sure file boundaries work right */
7299 i = PerlIO_getc(fp);
7301 PerlIO_ungetc(fp,i);
7307 return_string_or_null:
7308 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
7314 Auto-increment of the value in the SV, doing string to numeric conversion
7315 if necessary. Handles 'get' magic.
7321 Perl_sv_inc(pTHX_ register SV *sv)
7330 if (SvTHINKFIRST(sv)) {
7332 sv_force_normal_flags(sv, 0);
7333 if (SvREADONLY(sv)) {
7334 if (IN_PERL_RUNTIME)
7335 Perl_croak(aTHX_ PL_no_modify);
7339 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7341 i = PTR2IV(SvRV(sv));
7346 flags = SvFLAGS(sv);
7347 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7348 /* It's (privately or publicly) a float, but not tested as an
7349 integer, so test it to see. */
7351 flags = SvFLAGS(sv);
7353 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7354 /* It's publicly an integer, or privately an integer-not-float */
7355 #ifdef PERL_PRESERVE_IVUV
7359 if (SvUVX(sv) == UV_MAX)
7360 sv_setnv(sv, UV_MAX_P1);
7362 (void)SvIOK_only_UV(sv);
7363 SvUV_set(sv, SvUVX(sv) + 1);
7365 if (SvIVX(sv) == IV_MAX)
7366 sv_setuv(sv, (UV)IV_MAX + 1);
7368 (void)SvIOK_only(sv);
7369 SvIV_set(sv, SvIVX(sv) + 1);
7374 if (flags & SVp_NOK) {
7375 (void)SvNOK_only(sv);
7376 SvNV_set(sv, SvNVX(sv) + 1.0);
7380 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
7381 if ((flags & SVTYPEMASK) < SVt_PVIV)
7382 sv_upgrade(sv, SVt_IV);
7383 (void)SvIOK_only(sv);
7388 while (isALPHA(*d)) d++;
7389 while (isDIGIT(*d)) d++;
7391 #ifdef PERL_PRESERVE_IVUV
7392 /* Got to punt this as an integer if needs be, but we don't issue
7393 warnings. Probably ought to make the sv_iv_please() that does
7394 the conversion if possible, and silently. */
7395 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
7396 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7397 /* Need to try really hard to see if it's an integer.
7398 9.22337203685478e+18 is an integer.
7399 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7400 so $a="9.22337203685478e+18"; $a+0; $a++
7401 needs to be the same as $a="9.22337203685478e+18"; $a++
7408 /* sv_2iv *should* have made this an NV */
7409 if (flags & SVp_NOK) {
7410 (void)SvNOK_only(sv);
7411 SvNV_set(sv, SvNVX(sv) + 1.0);
7414 /* I don't think we can get here. Maybe I should assert this
7415 And if we do get here I suspect that sv_setnv will croak. NWC
7417 #if defined(USE_LONG_DOUBLE)
7418 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",
7419 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
7421 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7422 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
7425 #endif /* PERL_PRESERVE_IVUV */
7426 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
7430 while (d >= SvPVX(sv)) {
7438 /* MKS: The original code here died if letters weren't consecutive.
7439 * at least it didn't have to worry about non-C locales. The
7440 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7441 * arranged in order (although not consecutively) and that only
7442 * [A-Za-z] are accepted by isALPHA in the C locale.
7444 if (*d != 'z' && *d != 'Z') {
7445 do { ++*d; } while (!isALPHA(*d));
7448 *(d--) -= 'z' - 'a';
7453 *(d--) -= 'z' - 'a' + 1;
7457 /* oh,oh, the number grew */
7458 SvGROW(sv, SvCUR(sv) + 2);
7459 SvCUR_set(sv, SvCUR(sv) + 1);
7460 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
7471 Auto-decrement of the value in the SV, doing string to numeric conversion
7472 if necessary. Handles 'get' magic.
7478 Perl_sv_dec(pTHX_ register SV *sv)
7486 if (SvTHINKFIRST(sv)) {
7488 sv_force_normal_flags(sv, 0);
7489 if (SvREADONLY(sv)) {
7490 if (IN_PERL_RUNTIME)
7491 Perl_croak(aTHX_ PL_no_modify);
7495 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7497 i = PTR2IV(SvRV(sv));
7502 /* Unlike sv_inc we don't have to worry about string-never-numbers
7503 and keeping them magic. But we mustn't warn on punting */
7504 flags = SvFLAGS(sv);
7505 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7506 /* It's publicly an integer, or privately an integer-not-float */
7507 #ifdef PERL_PRESERVE_IVUV
7511 if (SvUVX(sv) == 0) {
7512 (void)SvIOK_only(sv);
7516 (void)SvIOK_only_UV(sv);
7517 SvUV_set(sv, SvUVX(sv) + 1);
7520 if (SvIVX(sv) == IV_MIN)
7521 sv_setnv(sv, (NV)IV_MIN - 1.0);
7523 (void)SvIOK_only(sv);
7524 SvIV_set(sv, SvIVX(sv) - 1);
7529 if (flags & SVp_NOK) {
7530 SvNV_set(sv, SvNVX(sv) - 1.0);
7531 (void)SvNOK_only(sv);
7534 if (!(flags & SVp_POK)) {
7535 if ((flags & SVTYPEMASK) < SVt_PVNV)
7536 sv_upgrade(sv, SVt_NV);
7538 (void)SvNOK_only(sv);
7541 #ifdef PERL_PRESERVE_IVUV
7543 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
7544 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7545 /* Need to try really hard to see if it's an integer.
7546 9.22337203685478e+18 is an integer.
7547 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7548 so $a="9.22337203685478e+18"; $a+0; $a--
7549 needs to be the same as $a="9.22337203685478e+18"; $a--
7556 /* sv_2iv *should* have made this an NV */
7557 if (flags & SVp_NOK) {
7558 (void)SvNOK_only(sv);
7559 SvNV_set(sv, SvNVX(sv) - 1.0);
7562 /* I don't think we can get here. Maybe I should assert this
7563 And if we do get here I suspect that sv_setnv will croak. NWC
7565 #if defined(USE_LONG_DOUBLE)
7566 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",
7567 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
7569 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7570 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
7574 #endif /* PERL_PRESERVE_IVUV */
7575 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
7579 =for apidoc sv_mortalcopy
7581 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
7582 The new SV is marked as mortal. It will be destroyed "soon", either by an
7583 explicit call to FREETMPS, or by an implicit call at places such as
7584 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
7589 /* Make a string that will exist for the duration of the expression
7590 * evaluation. Actually, it may have to last longer than that, but
7591 * hopefully we won't free it until it has been assigned to a
7592 * permanent location. */
7595 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
7600 sv_setsv(sv,oldstr);
7602 PL_tmps_stack[++PL_tmps_ix] = sv;
7608 =for apidoc sv_newmortal
7610 Creates a new null SV which is mortal. The reference count of the SV is
7611 set to 1. It will be destroyed "soon", either by an explicit call to
7612 FREETMPS, or by an implicit call at places such as statement boundaries.
7613 See also C<sv_mortalcopy> and C<sv_2mortal>.
7619 Perl_sv_newmortal(pTHX)
7624 SvFLAGS(sv) = SVs_TEMP;
7626 PL_tmps_stack[++PL_tmps_ix] = sv;
7631 =for apidoc sv_2mortal
7633 Marks an existing SV as mortal. The SV will be destroyed "soon", either
7634 by an explicit call to FREETMPS, or by an implicit call at places such as
7635 statement boundaries. SvTEMP() is turned on which means that the SV's
7636 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7637 and C<sv_mortalcopy>.
7643 Perl_sv_2mortal(pTHX_ register SV *sv)
7648 if (SvREADONLY(sv) && SvIMMORTAL(sv))
7651 PL_tmps_stack[++PL_tmps_ix] = sv;
7659 Creates a new SV and copies a string into it. The reference count for the
7660 SV is set to 1. If C<len> is zero, Perl will compute the length using
7661 strlen(). For efficiency, consider using C<newSVpvn> instead.
7667 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
7674 sv_setpvn(sv,s,len);
7679 =for apidoc newSVpvn
7681 Creates a new SV and copies a string into it. The reference count for the
7682 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
7683 string. You are responsible for ensuring that the source string is at least
7684 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
7690 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
7695 sv_setpvn(sv,s,len);
7700 =for apidoc newSVpvn_share
7702 Creates a new SV with its SvPVX pointing to a shared string in the string
7703 table. If the string does not already exist in the table, it is created
7704 first. Turns on READONLY and FAKE. The string's hash is stored in the UV
7705 slot of the SV; if the C<hash> parameter is non-zero, that value is used;
7706 otherwise the hash is computed. The idea here is that as the string table
7707 is used for shared hash keys these strings will have SvPVX == HeKEY and
7708 hash lookup will avoid string compare.
7714 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7717 bool is_utf8 = FALSE;
7719 STRLEN tmplen = -len;
7721 /* See the note in hv.c:hv_fetch() --jhi */
7722 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7726 PERL_HASH(hash, src, len);
7728 sv_upgrade(sv, SVt_PVIV);
7729 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7742 #if defined(PERL_IMPLICIT_CONTEXT)
7744 /* pTHX_ magic can't cope with varargs, so this is a no-context
7745 * version of the main function, (which may itself be aliased to us).
7746 * Don't access this version directly.
7750 Perl_newSVpvf_nocontext(const char* pat, ...)
7755 va_start(args, pat);
7756 sv = vnewSVpvf(pat, &args);
7763 =for apidoc newSVpvf
7765 Creates a new SV and initializes it with the string formatted like
7772 Perl_newSVpvf(pTHX_ const char* pat, ...)
7776 va_start(args, pat);
7777 sv = vnewSVpvf(pat, &args);
7782 /* backend for newSVpvf() and newSVpvf_nocontext() */
7785 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7789 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7796 Creates a new SV and copies a floating point value into it.
7797 The reference count for the SV is set to 1.
7803 Perl_newSVnv(pTHX_ NV n)
7815 Creates a new SV and copies an integer into it. The reference count for the
7822 Perl_newSViv(pTHX_ IV i)
7834 Creates a new SV and copies an unsigned integer into it.
7835 The reference count for the SV is set to 1.
7841 Perl_newSVuv(pTHX_ UV u)
7851 =for apidoc newRV_noinc
7853 Creates an RV wrapper for an SV. The reference count for the original
7854 SV is B<not> incremented.
7860 Perl_newRV_noinc(pTHX_ SV *tmpRef)
7865 sv_upgrade(sv, SVt_RV);
7867 SvRV_set(sv, tmpRef);
7872 /* newRV_inc is the official function name to use now.
7873 * newRV_inc is in fact #defined to newRV in sv.h
7877 Perl_newRV(pTHX_ SV *tmpRef)
7879 return newRV_noinc(SvREFCNT_inc(tmpRef));
7885 Creates a new SV which is an exact duplicate of the original SV.
7892 Perl_newSVsv(pTHX_ register SV *old)
7898 if (SvTYPE(old) == SVTYPEMASK) {
7899 if (ckWARN_d(WARN_INTERNAL))
7900 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7904 /* SV_GMAGIC is the default for sv_setv()
7905 SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7906 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */
7907 sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7912 =for apidoc sv_reset
7914 Underlying implementation for the C<reset> Perl function.
7915 Note that the perl-level function is vaguely deprecated.
7921 Perl_sv_reset(pTHX_ register const char *s, HV *stash)
7929 char todo[PERL_UCHAR_MAX+1];
7934 if (!*s) { /* reset ?? searches */
7935 MAGIC *mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
7937 PMOP *pm = (PMOP *) mg->mg_obj;
7939 pm->op_pmdynflags &= ~PMdf_USED;
7946 /* reset variables */
7948 if (!HvARRAY(stash))
7951 Zero(todo, 256, char);
7953 i = (unsigned char)*s;
7957 max = (unsigned char)*s++;
7958 for ( ; i <= max; i++) {
7961 for (i = 0; i <= (I32) HvMAX(stash); i++) {
7962 for (entry = HvARRAY(stash)[i];
7964 entry = HeNEXT(entry))
7966 if (!todo[(U8)*HeKEY(entry)])
7968 gv = (GV*)HeVAL(entry);
7970 if (SvTHINKFIRST(sv)) {
7971 if (!SvREADONLY(sv) && SvROK(sv))
7976 if (SvTYPE(sv) >= SVt_PV) {
7978 if (SvPVX(sv) != Nullch)
7985 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7988 #ifdef USE_ENVIRON_ARRAY
7990 # ifdef USE_ITHREADS
7991 && PL_curinterp == aTHX
7995 environ[0] = Nullch;
7998 #endif /* !PERL_MICRO */
8008 Using various gambits, try to get an IO from an SV: the IO slot if its a
8009 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8010 named after the PV if we're a string.
8016 Perl_sv_2io(pTHX_ SV *sv)
8021 switch (SvTYPE(sv)) {
8029 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8033 Perl_croak(aTHX_ PL_no_usym, "filehandle");
8035 return sv_2io(SvRV(sv));
8036 gv = gv_fetchsv(sv, FALSE, SVt_PVIO);
8042 Perl_croak(aTHX_ "Bad filehandle: %"SVf, sv);
8051 Using various gambits, try to get a CV from an SV; in addition, try if
8052 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8058 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
8065 return *gvp = Nullgv, Nullcv;
8066 switch (SvTYPE(sv)) {
8085 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
8086 tryAMAGICunDEREF(to_cv);
8089 if (SvTYPE(sv) == SVt_PVCV) {
8098 Perl_croak(aTHX_ "Not a subroutine reference");
8103 gv = gv_fetchsv(sv, lref, SVt_PVCV);
8109 if (lref && !GvCVu(gv)) {
8112 tmpsv = NEWSV(704,0);
8113 gv_efullname3(tmpsv, gv, Nullch);
8114 /* XXX this is probably not what they think they're getting.
8115 * It has the same effect as "sub name;", i.e. just a forward
8117 newSUB(start_subparse(FALSE, 0),
8118 newSVOP(OP_CONST, 0, tmpsv),
8123 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
8133 Returns true if the SV has a true value by Perl's rules.
8134 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8135 instead use an in-line version.
8141 Perl_sv_true(pTHX_ register SV *sv)
8146 const register XPV* tXpv;
8147 if ((tXpv = (XPV*)SvANY(sv)) &&
8148 (tXpv->xpv_cur > 1 ||
8149 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
8156 return SvIVX(sv) != 0;
8159 return SvNVX(sv) != 0.0;
8161 return sv_2bool(sv);
8169 A private implementation of the C<SvIVx> macro for compilers which can't
8170 cope with complex macro expressions. Always use the macro instead.
8176 Perl_sv_iv(pTHX_ register SV *sv)
8180 return (IV)SvUVX(sv);
8189 A private implementation of the C<SvUVx> macro for compilers which can't
8190 cope with complex macro expressions. Always use the macro instead.
8196 Perl_sv_uv(pTHX_ register SV *sv)
8201 return (UV)SvIVX(sv);
8209 A private implementation of the C<SvNVx> macro for compilers which can't
8210 cope with complex macro expressions. Always use the macro instead.
8216 Perl_sv_nv(pTHX_ register SV *sv)
8223 /* sv_pv() is now a macro using SvPV_nolen();
8224 * this function provided for binary compatibility only
8228 Perl_sv_pv(pTHX_ SV *sv)
8235 return sv_2pv(sv, &n_a);
8241 Use the C<SvPV_nolen> macro instead
8245 A private implementation of the C<SvPV> macro for compilers which can't
8246 cope with complex macro expressions. Always use the macro instead.
8252 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
8258 return sv_2pv(sv, lp);
8263 Perl_sv_pvn_nomg(pTHX_ register SV *sv, STRLEN *lp)
8269 return sv_2pv_flags(sv, lp, 0);
8272 /* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags();
8273 * this function provided for binary compatibility only
8277 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
8279 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
8283 =for apidoc sv_pvn_force
8285 Get a sensible string out of the SV somehow.
8286 A private implementation of the C<SvPV_force> macro for compilers which
8287 can't cope with complex macro expressions. Always use the macro instead.
8289 =for apidoc sv_pvn_force_flags
8291 Get a sensible string out of the SV somehow.
8292 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8293 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8294 implemented in terms of this function.
8295 You normally want to use the various wrapper macros instead: see
8296 C<SvPV_force> and C<SvPV_force_nomg>
8302 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
8305 if (SvTHINKFIRST(sv) && !SvROK(sv))
8306 sv_force_normal_flags(sv, 0);
8313 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
8314 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8318 s = sv_2pv_flags(sv, lp, flags);
8319 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
8320 const STRLEN len = *lp;
8324 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
8325 SvGROW(sv, len + 1);
8326 Move(s,SvPVX(sv),len,char);
8331 SvPOK_on(sv); /* validate pointer */
8333 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8334 PTR2UV(sv),SvPVX(sv)));
8340 /* sv_pvbyte () is now a macro using Perl_sv_2pv_flags();
8341 * this function provided for binary compatibility only
8345 Perl_sv_pvbyte(pTHX_ SV *sv)
8347 sv_utf8_downgrade(sv,0);
8352 =for apidoc sv_pvbyte
8354 Use C<SvPVbyte_nolen> instead.
8356 =for apidoc sv_pvbyten
8358 A private implementation of the C<SvPVbyte> macro for compilers
8359 which can't cope with complex macro expressions. Always use the macro
8366 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
8368 sv_utf8_downgrade(sv,0);
8369 return sv_pvn(sv,lp);
8373 =for apidoc sv_pvbyten_force
8375 A private implementation of the C<SvPVbytex_force> macro for compilers
8376 which can't cope with complex macro expressions. Always use the macro
8383 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
8385 sv_pvn_force(sv,lp);
8386 sv_utf8_downgrade(sv,0);
8391 /* sv_pvutf8 () is now a macro using Perl_sv_2pv_flags();
8392 * this function provided for binary compatibility only
8396 Perl_sv_pvutf8(pTHX_ SV *sv)
8398 sv_utf8_upgrade(sv);
8403 =for apidoc sv_pvutf8
8405 Use the C<SvPVutf8_nolen> macro instead
8407 =for apidoc sv_pvutf8n
8409 A private implementation of the C<SvPVutf8> macro for compilers
8410 which can't cope with complex macro expressions. Always use the macro
8417 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
8419 sv_utf8_upgrade(sv);
8420 return sv_pvn(sv,lp);
8424 =for apidoc sv_pvutf8n_force
8426 A private implementation of the C<SvPVutf8_force> macro for compilers
8427 which can't cope with complex macro expressions. Always use the macro
8434 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
8436 sv_pvn_force(sv,lp);
8437 sv_utf8_upgrade(sv);
8443 =for apidoc sv_reftype
8445 Returns a string describing what the SV is a reference to.
8451 Perl_sv_reftype(pTHX_ const SV *sv, int ob)
8453 /* The fact that I don't need to downcast to char * everywhere, only in ?:
8454 inside return suggests a const propagation bug in g++. */
8455 if (ob && SvOBJECT(sv)) {
8456 char *name = HvNAME_get(SvSTASH(sv));
8457 return name ? name : (char *) "__ANON__";
8460 switch (SvTYPE(sv)) {
8477 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF"
8478 /* tied lvalues should appear to be
8479 * scalars for backwards compatitbility */
8480 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
8481 ? "SCALAR" : "LVALUE");
8482 case SVt_PVAV: return "ARRAY";
8483 case SVt_PVHV: return "HASH";
8484 case SVt_PVCV: return "CODE";
8485 case SVt_PVGV: return "GLOB";
8486 case SVt_PVFM: return "FORMAT";
8487 case SVt_PVIO: return "IO";
8488 default: return "UNKNOWN";
8494 =for apidoc sv_isobject
8496 Returns a boolean indicating whether the SV is an RV pointing to a blessed
8497 object. If the SV is not an RV, or if the object is not blessed, then this
8504 Perl_sv_isobject(pTHX_ SV *sv)
8521 Returns a boolean indicating whether the SV is blessed into the specified
8522 class. This does not check for subtypes; use C<sv_derived_from> to verify
8523 an inheritance relationship.
8529 Perl_sv_isa(pTHX_ SV *sv, const char *name)
8541 hvname = HvNAME_get(SvSTASH(sv));
8545 return strEQ(hvname, name);
8551 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
8552 it will be upgraded to one. If C<classname> is non-null then the new SV will
8553 be blessed in the specified package. The new SV is returned and its
8554 reference count is 1.
8560 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
8566 SV_CHECK_THINKFIRST_COW_DROP(rv);
8569 if (SvTYPE(rv) >= SVt_PVMG) {
8570 const U32 refcnt = SvREFCNT(rv);
8574 SvREFCNT(rv) = refcnt;
8577 if (SvTYPE(rv) < SVt_RV)
8578 sv_upgrade(rv, SVt_RV);
8579 else if (SvTYPE(rv) > SVt_RV) {
8590 HV* stash = gv_stashpv(classname, TRUE);
8591 (void)sv_bless(rv, stash);
8597 =for apidoc sv_setref_pv
8599 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
8600 argument will be upgraded to an RV. That RV will be modified to point to
8601 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8602 into the SV. The C<classname> argument indicates the package for the
8603 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
8604 will have a reference count of 1, and the RV will be returned.
8606 Do not use with other Perl types such as HV, AV, SV, CV, because those
8607 objects will become corrupted by the pointer copy process.
8609 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8615 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
8618 sv_setsv(rv, &PL_sv_undef);
8622 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
8627 =for apidoc sv_setref_iv
8629 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
8630 argument will be upgraded to an RV. That RV will be modified to point to
8631 the new SV. The C<classname> argument indicates the package for the
8632 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
8633 will have a reference count of 1, and the RV will be returned.
8639 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
8641 sv_setiv(newSVrv(rv,classname), iv);
8646 =for apidoc sv_setref_uv
8648 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
8649 argument will be upgraded to an RV. That RV will be modified to point to
8650 the new SV. The C<classname> argument indicates the package for the
8651 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
8652 will have a reference count of 1, and the RV will be returned.
8658 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
8660 sv_setuv(newSVrv(rv,classname), uv);
8665 =for apidoc sv_setref_nv
8667 Copies a double into a new SV, optionally blessing the SV. The C<rv>
8668 argument will be upgraded to an RV. That RV will be modified to point to
8669 the new SV. The C<classname> argument indicates the package for the
8670 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
8671 will have a reference count of 1, and the RV will be returned.
8677 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
8679 sv_setnv(newSVrv(rv,classname), nv);
8684 =for apidoc sv_setref_pvn
8686 Copies a string into a new SV, optionally blessing the SV. The length of the
8687 string must be specified with C<n>. The C<rv> argument will be upgraded to
8688 an RV. That RV will be modified to point to the new SV. The C<classname>
8689 argument indicates the package for the blessing. Set C<classname> to
8690 C<Nullch> to avoid the blessing. The new SV will have a reference count
8691 of 1, and the RV will be returned.
8693 Note that C<sv_setref_pv> copies the pointer while this copies the string.
8699 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
8701 sv_setpvn(newSVrv(rv,classname), pv, n);
8706 =for apidoc sv_bless
8708 Blesses an SV into a specified package. The SV must be an RV. The package
8709 must be designated by its stash (see C<gv_stashpv()>). The reference count
8710 of the SV is unaffected.
8716 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
8720 Perl_croak(aTHX_ "Can't bless non-reference value");
8722 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8723 if (SvREADONLY(tmpRef))
8724 Perl_croak(aTHX_ PL_no_modify);
8725 if (SvOBJECT(tmpRef)) {
8726 if (SvTYPE(tmpRef) != SVt_PVIO)
8728 SvREFCNT_dec(SvSTASH(tmpRef));
8731 SvOBJECT_on(tmpRef);
8732 if (SvTYPE(tmpRef) != SVt_PVIO)
8734 (void)SvUPGRADE(tmpRef, SVt_PVMG);
8735 SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc(stash));
8742 if(SvSMAGICAL(tmpRef))
8743 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8751 /* Downgrades a PVGV to a PVMG.
8755 S_sv_unglob(pTHX_ SV *sv)
8759 assert(SvTYPE(sv) == SVt_PVGV);
8764 SvREFCNT_dec(GvSTASH(sv));
8765 GvSTASH(sv) = Nullhv;
8767 sv_unmagic(sv, PERL_MAGIC_glob);
8768 Safefree(GvNAME(sv));
8771 /* need to keep SvANY(sv) in the right arena */
8772 xpvmg = new_XPVMG();
8773 StructCopy(SvANY(sv), xpvmg, XPVMG);
8774 del_XPVGV(SvANY(sv));
8777 SvFLAGS(sv) &= ~SVTYPEMASK;
8778 SvFLAGS(sv) |= SVt_PVMG;
8782 =for apidoc sv_unref_flags
8784 Unsets the RV status of the SV, and decrements the reference count of
8785 whatever was being referenced by the RV. This can almost be thought of
8786 as a reversal of C<newSVrv>. The C<cflags> argument can contain
8787 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8788 (otherwise the decrementing is conditional on the reference count being
8789 different from one or the reference being a readonly SV).
8796 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
8800 if (SvWEAKREF(sv)) {
8808 /* You can't have a || SvREADONLY(rv) here, as $a = $$a, where $a was
8809 assigned to as BEGIN {$a = \"Foo"} will fail. */
8810 if (SvREFCNT(rv) != 1 || (flags & SV_IMMEDIATE_UNREF))
8812 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8813 sv_2mortal(rv); /* Schedule for freeing later */
8817 =for apidoc sv_unref
8819 Unsets the RV status of the SV, and decrements the reference count of
8820 whatever was being referenced by the RV. This can almost be thought of
8821 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
8822 being zero. See C<SvROK_off>.
8828 Perl_sv_unref(pTHX_ SV *sv)
8830 sv_unref_flags(sv, 0);
8834 =for apidoc sv_taint
8836 Taint an SV. Use C<SvTAINTED_on> instead.
8841 Perl_sv_taint(pTHX_ SV *sv)
8843 sv_magic((sv), Nullsv, PERL_MAGIC_taint, Nullch, 0);
8847 =for apidoc sv_untaint
8849 Untaint an SV. Use C<SvTAINTED_off> instead.
8854 Perl_sv_untaint(pTHX_ SV *sv)
8856 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8857 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8864 =for apidoc sv_tainted
8866 Test an SV for taintedness. Use C<SvTAINTED> instead.
8871 Perl_sv_tainted(pTHX_ SV *sv)
8873 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8874 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8875 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
8882 =for apidoc sv_setpviv
8884 Copies an integer into the given SV, also updating its string value.
8885 Does not handle 'set' magic. See C<sv_setpviv_mg>.
8891 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8893 char buf[TYPE_CHARS(UV)];
8895 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8897 sv_setpvn(sv, ptr, ebuf - ptr);
8901 =for apidoc sv_setpviv_mg
8903 Like C<sv_setpviv>, but also handles 'set' magic.
8909 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8911 char buf[TYPE_CHARS(UV)];
8913 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8915 sv_setpvn(sv, ptr, ebuf - ptr);
8919 #if defined(PERL_IMPLICIT_CONTEXT)
8921 /* pTHX_ magic can't cope with varargs, so this is a no-context
8922 * version of the main function, (which may itself be aliased to us).
8923 * Don't access this version directly.
8927 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8931 va_start(args, pat);
8932 sv_vsetpvf(sv, pat, &args);
8936 /* pTHX_ magic can't cope with varargs, so this is a no-context
8937 * version of the main function, (which may itself be aliased to us).
8938 * Don't access this version directly.
8942 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8946 va_start(args, pat);
8947 sv_vsetpvf_mg(sv, pat, &args);
8953 =for apidoc sv_setpvf
8955 Works like C<sv_catpvf> but copies the text into the SV instead of
8956 appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
8962 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
8965 va_start(args, pat);
8966 sv_vsetpvf(sv, pat, &args);
8971 =for apidoc sv_vsetpvf
8973 Works like C<sv_vcatpvf> but copies the text into the SV instead of
8974 appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
8976 Usually used via its frontend C<sv_setpvf>.
8982 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8984 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8988 =for apidoc sv_setpvf_mg
8990 Like C<sv_setpvf>, but also handles 'set' magic.
8996 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8999 va_start(args, pat);
9000 sv_vsetpvf_mg(sv, pat, &args);
9005 =for apidoc sv_vsetpvf_mg
9007 Like C<sv_vsetpvf>, but also handles 'set' magic.
9009 Usually used via its frontend C<sv_setpvf_mg>.
9015 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
9017 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
9021 #if defined(PERL_IMPLICIT_CONTEXT)
9023 /* pTHX_ magic can't cope with varargs, so this is a no-context
9024 * version of the main function, (which may itself be aliased to us).
9025 * Don't access this version directly.
9029 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
9033 va_start(args, pat);
9034 sv_vcatpvf(sv, pat, &args);
9038 /* pTHX_ magic can't cope with varargs, so this is a no-context
9039 * version of the main function, (which may itself be aliased to us).
9040 * Don't access this version directly.
9044 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
9048 va_start(args, pat);
9049 sv_vcatpvf_mg(sv, pat, &args);
9055 =for apidoc sv_catpvf
9057 Processes its arguments like C<sprintf> and appends the formatted
9058 output to an SV. If the appended data contains "wide" characters
9059 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9060 and characters >255 formatted with %c), the original SV might get
9061 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
9062 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9063 valid UTF-8; if the original SV was bytes, the pattern should be too.
9068 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
9071 va_start(args, pat);
9072 sv_vcatpvf(sv, pat, &args);
9077 =for apidoc sv_vcatpvf
9079 Processes its arguments like C<vsprintf> and appends the formatted output
9080 to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
9082 Usually used via its frontend C<sv_catpvf>.
9088 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
9090 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
9094 =for apidoc sv_catpvf_mg
9096 Like C<sv_catpvf>, but also handles 'set' magic.
9102 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
9105 va_start(args, pat);
9106 sv_vcatpvf_mg(sv, pat, &args);
9111 =for apidoc sv_vcatpvf_mg
9113 Like C<sv_vcatpvf>, but also handles 'set' magic.
9115 Usually used via its frontend C<sv_catpvf_mg>.
9121 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
9123 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
9128 =for apidoc sv_vsetpvfn
9130 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9133 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9139 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
9141 sv_setpvn(sv, "", 0);
9142 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9145 /* private function for use in sv_vcatpvfn via the EXPECT_NUMBER macro */
9148 S_expect_number(pTHX_ char** pattern)
9151 switch (**pattern) {
9152 case '1': case '2': case '3':
9153 case '4': case '5': case '6':
9154 case '7': case '8': case '9':
9155 while (isDIGIT(**pattern))
9156 var = var * 10 + (*(*pattern)++ - '0');
9160 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
9163 F0convert(NV nv, char *endbuf, STRLEN *len)
9165 const int neg = nv < 0;
9174 if (uv & 1 && uv == nv)
9175 uv--; /* Round to even */
9177 const unsigned dig = uv % 10;
9190 =for apidoc sv_vcatpvfn
9192 Processes its arguments like C<vsprintf> and appends the formatted output
9193 to an SV. Uses an array of SVs if the C style variable argument list is
9194 missing (NULL). When running with taint checks enabled, indicates via
9195 C<maybe_tainted> if results are untrustworthy (often due to the use of
9198 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9203 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9206 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
9213 static const char nullstr[] = "(null)";
9215 bool has_utf8; /* has the result utf8? */
9216 bool pat_utf8; /* the pattern is in utf8? */
9218 /* Times 4: a decimal digit takes more than 3 binary digits.
9219 * NV_DIG: mantissa takes than many decimal digits.
9220 * Plus 32: Playing safe. */
9221 char ebuf[IV_DIG * 4 + NV_DIG + 32];
9222 /* large enough for "%#.#f" --chip */
9223 /* what about long double NVs? --jhi */
9225 has_utf8 = pat_utf8 = DO_UTF8(sv);
9227 /* no matter what, this is a string now */
9228 (void)SvPV_force(sv, origlen);
9230 /* special-case "", "%s", and "%-p" (SVf) */
9233 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
9235 const char *s = va_arg(*args, char*);
9236 sv_catpv(sv, s ? s : nullstr);
9238 else if (svix < svmax) {
9239 sv_catsv(sv, *svargs);
9240 if (DO_UTF8(*svargs))
9245 if (patlen == 3 && pat[0] == '%' &&
9246 pat[1] == '-' && pat[2] == 'p') {
9248 argsv = va_arg(*args, SV*);
9249 sv_catsv(sv, argsv);
9256 #ifndef USE_LONG_DOUBLE
9257 /* special-case "%.<number>[gf]" */
9258 if ( patlen <= 5 && pat[0] == '%' && pat[1] == '.'
9259 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9260 unsigned digits = 0;
9264 while (*pp >= '0' && *pp <= '9')
9265 digits = 10 * digits + (*pp++ - '0');
9266 if (pp - pat == (int)patlen - 1) {
9270 nv = (NV)va_arg(*args, double);
9271 else if (svix < svmax)
9276 /* Add check for digits != 0 because it seems that some
9277 gconverts are buggy in this case, and we don't yet have
9278 a Configure test for this. */
9279 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9280 /* 0, point, slack */
9281 Gconvert(nv, (int)digits, 0, ebuf);
9283 if (*ebuf) /* May return an empty string for digits==0 */
9286 } else if (!digits) {
9289 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9290 sv_catpvn(sv, p, l);
9296 #endif /* !USE_LONG_DOUBLE */
9298 if (!args && svix < svmax && DO_UTF8(*svargs))
9301 patend = (char*)pat + patlen;
9302 for (p = (char*)pat; p < patend; p = q) {
9305 bool vectorize = FALSE;
9306 bool vectorarg = FALSE;
9307 bool vec_utf8 = FALSE;
9313 bool has_precis = FALSE;
9316 bool is_utf8 = FALSE; /* is this item utf8? */
9317 #ifdef HAS_LDBL_SPRINTF_BUG
9318 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9319 with sfio - Allen <allens@cpan.org> */
9320 bool fix_ldbl_sprintf_bug = FALSE;
9324 U8 utf8buf[UTF8_MAXBYTES+1];
9325 STRLEN esignlen = 0;
9327 char *eptr = Nullch;
9330 U8 *vecstr = Null(U8*);
9337 /* we need a long double target in case HAS_LONG_DOUBLE but
9340 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9348 const char *dotstr = ".";
9349 STRLEN dotstrlen = 1;
9350 I32 efix = 0; /* explicit format parameter index */
9351 I32 ewix = 0; /* explicit width index */
9352 I32 epix = 0; /* explicit precision index */
9353 I32 evix = 0; /* explicit vector index */
9354 bool asterisk = FALSE;
9356 /* echo everything up to the next format specification */
9357 for (q = p; q < patend && *q != '%'; ++q) ;
9359 if (has_utf8 && !pat_utf8)
9360 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9362 sv_catpvn(sv, p, q - p);
9369 We allow format specification elements in this order:
9370 \d+\$ explicit format parameter index
9372 v|\*(\d+\$)?v vector with optional (optionally specified) arg
9373 0 flag (as above): repeated to allow "v02"
9374 \d+|\*(\d+\$)? width using optional (optionally specified) arg
9375 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9377 [%bcdefginopsux_DFOUX] format (mandatory)
9379 if (EXPECT_NUMBER(q, width)) {
9420 if (EXPECT_NUMBER(q, ewix))
9429 if ((vectorarg = asterisk)) {
9441 EXPECT_NUMBER(q, width);
9446 vecsv = va_arg(*args, SV*);
9448 vecsv = (evix ? evix <= svmax : svix < svmax) ?
9449 svargs[evix ? evix-1 : svix++] : &PL_sv_undef;
9450 dotstr = SvPVx(vecsv, dotstrlen);
9455 vecsv = va_arg(*args, SV*);
9456 vecstr = (U8*)SvPVx(vecsv,veclen);
9457 vec_utf8 = DO_UTF8(vecsv);
9459 else if (efix ? efix <= svmax : svix < svmax) {
9460 vecsv = svargs[efix ? efix-1 : svix++];
9461 vecstr = (U8*)SvPVx(vecsv,veclen);
9462 vec_utf8 = DO_UTF8(vecsv);
9463 /* if this is a version object, we need to return the
9464 * stringified representation (which the SvPVX has
9465 * already done for us), but not vectorize the args
9467 if ( *q == 'd' && sv_derived_from(vecsv,"version") )
9469 q++; /* skip past the rest of the %vd format */
9470 eptr = (char *) vecstr;
9471 elen = strlen(eptr);
9484 i = va_arg(*args, int);
9486 i = (ewix ? ewix <= svmax : svix < svmax) ?
9487 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9489 width = (i < 0) ? -i : i;
9499 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
9501 /* XXX: todo, support specified precision parameter */
9505 i = va_arg(*args, int);
9507 i = (ewix ? ewix <= svmax : svix < svmax)
9508 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9509 precis = (i < 0) ? 0 : i;
9514 precis = precis * 10 + (*q++ - '0');
9523 case 'I': /* Ix, I32x, and I64x */
9525 if (q[1] == '6' && q[2] == '4') {
9531 if (q[1] == '3' && q[2] == '2') {
9541 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9552 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9553 if (*(q + 1) == 'l') { /* lld, llf */
9578 argsv = (efix ? efix <= svmax : svix < svmax) ?
9579 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
9586 uv = (args && !vectorize) ? va_arg(*args, int) : SvIVx(argsv);
9588 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
9590 eptr = (char*)utf8buf;
9591 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
9602 if (args && !vectorize) {
9603 eptr = va_arg(*args, char*);
9605 #ifdef MACOS_TRADITIONAL
9606 /* On MacOS, %#s format is used for Pascal strings */
9611 elen = strlen(eptr);
9613 eptr = (char *)nullstr;
9614 elen = sizeof nullstr - 1;
9618 eptr = SvPVx(argsv, elen);
9619 if (DO_UTF8(argsv)) {
9620 if (has_precis && precis < elen) {
9622 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
9625 if (width) { /* fudge width (can't fudge elen) */
9626 width += elen - sv_len_utf8(argsv);
9634 if (has_precis && elen > precis)
9641 if (left && args) { /* SVf */
9650 argsv = va_arg(*args, SV*);
9651 eptr = SvPVx(argsv, elen);
9656 if (alt || vectorize)
9658 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
9676 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9685 esignbuf[esignlen++] = plus;
9689 case 'h': iv = (short)va_arg(*args, int); break;
9690 case 'l': iv = va_arg(*args, long); break;
9691 case 'V': iv = va_arg(*args, IV); break;
9692 default: iv = va_arg(*args, int); break;
9694 case 'q': iv = va_arg(*args, Quad_t); break;
9699 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
9701 case 'h': iv = (short)tiv; break;
9702 case 'l': iv = (long)tiv; break;
9704 default: iv = tiv; break;
9706 case 'q': iv = (Quad_t)tiv; break;
9710 if ( !vectorize ) /* we already set uv above */
9715 esignbuf[esignlen++] = plus;
9719 esignbuf[esignlen++] = '-';
9762 uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9773 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
9774 case 'l': uv = va_arg(*args, unsigned long); break;
9775 case 'V': uv = va_arg(*args, UV); break;
9776 default: uv = va_arg(*args, unsigned); break;
9778 case 'q': uv = va_arg(*args, Uquad_t); break;
9783 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
9785 case 'h': uv = (unsigned short)tuv; break;
9786 case 'l': uv = (unsigned long)tuv; break;
9788 default: uv = tuv; break;
9790 case 'q': uv = (Uquad_t)tuv; break;
9796 eptr = ebuf + sizeof ebuf;
9802 p = (char*)((c == 'X')
9803 ? "0123456789ABCDEF" : "0123456789abcdef");
9809 esignbuf[esignlen++] = '0';
9810 esignbuf[esignlen++] = c; /* 'x' or 'X' */
9816 *--eptr = '0' + dig;
9818 if (alt && *eptr != '0')
9824 *--eptr = '0' + dig;
9827 esignbuf[esignlen++] = '0';
9828 esignbuf[esignlen++] = 'b';
9831 default: /* it had better be ten or less */
9834 *--eptr = '0' + dig;
9835 } while (uv /= base);
9838 elen = (ebuf + sizeof ebuf) - eptr;
9841 zeros = precis - elen;
9842 else if (precis == 0 && elen == 1 && *eptr == '0')
9847 /* FLOATING POINT */
9850 c = 'f'; /* maybe %F isn't supported here */
9856 /* This is evil, but floating point is even more evil */
9858 /* for SV-style calling, we can only get NV
9859 for C-style calling, we assume %f is double;
9860 for simplicity we allow any of %Lf, %llf, %qf for long double
9864 #if defined(USE_LONG_DOUBLE)
9868 /* [perl #20339] - we should accept and ignore %lf rather than die */
9872 #if defined(USE_LONG_DOUBLE)
9873 intsize = args ? 0 : 'q';
9877 #if defined(HAS_LONG_DOUBLE)
9886 /* now we need (long double) if intsize == 'q', else (double) */
9887 nv = (args && !vectorize) ?
9888 #if LONG_DOUBLESIZE > DOUBLESIZE
9890 va_arg(*args, long double) :
9891 va_arg(*args, double)
9893 va_arg(*args, double)
9899 if (c != 'e' && c != 'E') {
9901 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9902 will cast our (long double) to (double) */
9903 (void)Perl_frexp(nv, &i);
9904 if (i == PERL_INT_MIN)
9905 Perl_die(aTHX_ "panic: frexp");
9907 need = BIT_DIGITS(i);
9909 need += has_precis ? precis : 6; /* known default */
9914 #ifdef HAS_LDBL_SPRINTF_BUG
9915 /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9916 with sfio - Allen <allens@cpan.org> */
9919 # define MY_DBL_MAX DBL_MAX
9920 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9921 # if DOUBLESIZE >= 8
9922 # define MY_DBL_MAX 1.7976931348623157E+308L
9924 # define MY_DBL_MAX 3.40282347E+38L
9928 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9929 # define MY_DBL_MAX_BUG 1L
9931 # define MY_DBL_MAX_BUG MY_DBL_MAX
9935 # define MY_DBL_MIN DBL_MIN
9936 # else /* XXX guessing! -Allen */
9937 # if DOUBLESIZE >= 8
9938 # define MY_DBL_MIN 2.2250738585072014E-308L
9940 # define MY_DBL_MIN 1.17549435E-38L
9944 if ((intsize == 'q') && (c == 'f') &&
9945 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9947 /* it's going to be short enough that
9948 * long double precision is not needed */
9950 if ((nv <= 0L) && (nv >= -0L))
9951 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9953 /* would use Perl_fp_class as a double-check but not
9954 * functional on IRIX - see perl.h comments */
9956 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9957 /* It's within the range that a double can represent */
9958 #if defined(DBL_MAX) && !defined(DBL_MIN)
9959 if ((nv >= ((long double)1/DBL_MAX)) ||
9960 (nv <= (-(long double)1/DBL_MAX)))
9962 fix_ldbl_sprintf_bug = TRUE;
9965 if (fix_ldbl_sprintf_bug == TRUE) {
9975 # undef MY_DBL_MAX_BUG
9978 #endif /* HAS_LDBL_SPRINTF_BUG */
9980 need += 20; /* fudge factor */
9981 if (PL_efloatsize < need) {
9982 Safefree(PL_efloatbuf);
9983 PL_efloatsize = need + 20; /* more fudge */
9984 New(906, PL_efloatbuf, PL_efloatsize, char);
9985 PL_efloatbuf[0] = '\0';
9988 if ( !(width || left || plus || alt) && fill != '0'
9989 && has_precis && intsize != 'q' ) { /* Shortcuts */
9990 /* See earlier comment about buggy Gconvert when digits,
9992 if ( c == 'g' && precis) {
9993 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9994 if (*PL_efloatbuf) /* May return an empty string for digits==0 */
9995 goto float_converted;
9996 } else if ( c == 'f' && !precis) {
9997 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10001 eptr = ebuf + sizeof ebuf;
10004 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10005 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10006 if (intsize == 'q') {
10007 /* Copy the one or more characters in a long double
10008 * format before the 'base' ([efgEFG]) character to
10009 * the format string. */
10010 static char const prifldbl[] = PERL_PRIfldbl;
10011 char const *p = prifldbl + sizeof(prifldbl) - 3;
10012 while (p >= prifldbl) { *--eptr = *p--; }
10017 do { *--eptr = '0' + (base % 10); } while (base /= 10);
10022 do { *--eptr = '0' + (base % 10); } while (base /= 10);
10034 /* No taint. Otherwise we are in the strange situation
10035 * where printf() taints but print($float) doesn't.
10037 #if defined(HAS_LONG_DOUBLE)
10038 if (intsize == 'q')
10039 (void)sprintf(PL_efloatbuf, eptr, nv);
10041 (void)sprintf(PL_efloatbuf, eptr, (double)nv);
10043 (void)sprintf(PL_efloatbuf, eptr, nv);
10046 eptr = PL_efloatbuf;
10047 elen = strlen(PL_efloatbuf);
10053 i = SvCUR(sv) - origlen;
10054 if (args && !vectorize) {
10056 case 'h': *(va_arg(*args, short*)) = i; break;
10057 default: *(va_arg(*args, int*)) = i; break;
10058 case 'l': *(va_arg(*args, long*)) = i; break;
10059 case 'V': *(va_arg(*args, IV*)) = i; break;
10061 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
10066 sv_setuv_mg(argsv, (UV)i);
10068 continue; /* not "break" */
10074 if (!args && ckWARN(WARN_PRINTF) &&
10075 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
10076 SV *msg = sv_newmortal();
10077 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10078 (PL_op->op_type == OP_PRTF) ? "" : "s");
10081 Perl_sv_catpvf(aTHX_ msg,
10082 "\"%%%c\"", c & 0xFF);
10084 Perl_sv_catpvf(aTHX_ msg,
10085 "\"%%\\%03"UVof"\"",
10088 sv_catpv(msg, "end of string");
10089 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, msg); /* yes, this is reentrant */
10092 /* output mangled stuff ... */
10098 /* ... right here, because formatting flags should not apply */
10099 SvGROW(sv, SvCUR(sv) + elen + 1);
10101 Copy(eptr, p, elen, char);
10104 SvCUR_set(sv, p - SvPVX(sv));
10106 continue; /* not "break" */
10109 /* calculate width before utf8_upgrade changes it */
10110 have = esignlen + zeros + elen;
10112 if (is_utf8 != has_utf8) {
10115 sv_utf8_upgrade(sv);
10118 SV *nsv = sv_2mortal(newSVpvn(eptr, elen));
10119 sv_utf8_upgrade(nsv);
10123 SvGROW(sv, SvCUR(sv) + elen + 1);
10128 need = (have > width ? have : width);
10131 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
10133 if (esignlen && fill == '0') {
10134 for (i = 0; i < (int)esignlen; i++)
10135 *p++ = esignbuf[i];
10137 if (gap && !left) {
10138 memset(p, fill, gap);
10141 if (esignlen && fill != '0') {
10142 for (i = 0; i < (int)esignlen; i++)
10143 *p++ = esignbuf[i];
10146 for (i = zeros; i; i--)
10150 Copy(eptr, p, elen, char);
10154 memset(p, ' ', gap);
10159 Copy(dotstr, p, dotstrlen, char);
10163 vectorize = FALSE; /* done iterating over vecstr */
10170 SvCUR_set(sv, p - SvPVX(sv));
10178 /* =========================================================================
10180 =head1 Cloning an interpreter
10182 All the macros and functions in this section are for the private use of
10183 the main function, perl_clone().
10185 The foo_dup() functions make an exact copy of an existing foo thinngy.
10186 During the course of a cloning, a hash table is used to map old addresses
10187 to new addresses. The table is created and manipulated with the
10188 ptr_table_* functions.
10192 ============================================================================*/
10195 #if defined(USE_ITHREADS)
10197 #ifndef GpREFCNT_inc
10198 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10202 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
10203 #define av_dup(s,t) (AV*)sv_dup((SV*)s,t)
10204 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10205 #define hv_dup(s,t) (HV*)sv_dup((SV*)s,t)
10206 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10207 #define cv_dup(s,t) (CV*)sv_dup((SV*)s,t)
10208 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10209 #define io_dup(s,t) (IO*)sv_dup((SV*)s,t)
10210 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
10211 #define gv_dup(s,t) (GV*)sv_dup((SV*)s,t)
10212 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10213 #define SAVEPV(p) (p ? savepv(p) : Nullch)
10214 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
10217 /* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
10218 regcomp.c. AMS 20010712 */
10221 Perl_re_dup(pTHX_ REGEXP *r, CLONE_PARAMS *param)
10226 struct reg_substr_datum *s;
10229 return (REGEXP *)NULL;
10231 if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
10234 len = r->offsets[0];
10235 npar = r->nparens+1;
10237 Newc(0, ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
10238 Copy(r->program, ret->program, len+1, regnode);
10240 New(0, ret->startp, npar, I32);
10241 Copy(r->startp, ret->startp, npar, I32);
10242 New(0, ret->endp, npar, I32);
10243 Copy(r->startp, ret->startp, npar, I32);
10245 New(0, ret->substrs, 1, struct reg_substr_data);
10246 for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
10247 s->min_offset = r->substrs->data[i].min_offset;
10248 s->max_offset = r->substrs->data[i].max_offset;
10249 s->substr = sv_dup_inc(r->substrs->data[i].substr, param);
10250 s->utf8_substr = sv_dup_inc(r->substrs->data[i].utf8_substr, param);
10253 ret->regstclass = NULL;
10255 struct reg_data *d;
10256 const int count = r->data->count;
10258 Newc(0, d, sizeof(struct reg_data) + count*sizeof(void *),
10259 char, struct reg_data);
10260 New(0, d->what, count, U8);
10263 for (i = 0; i < count; i++) {
10264 d->what[i] = r->data->what[i];
10265 switch (d->what[i]) {
10266 /* legal options are one of: sfpont
10267 see also regcomp.h and pregfree() */
10269 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
10272 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
10275 /* This is cheating. */
10276 New(0, d->data[i], 1, struct regnode_charclass_class);
10277 StructCopy(r->data->data[i], d->data[i],
10278 struct regnode_charclass_class);
10279 ret->regstclass = (regnode*)d->data[i];
10282 /* Compiled op trees are readonly, and can thus be
10283 shared without duplication. */
10285 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
10289 d->data[i] = r->data->data[i];
10292 d->data[i] = r->data->data[i];
10294 ((reg_trie_data*)d->data[i])->refcount++;
10298 Perl_croak(aTHX_ "panic: re_dup unknown data code '%c'", r->data->what[i]);
10307 New(0, ret->offsets, 2*len+1, U32);
10308 Copy(r->offsets, ret->offsets, 2*len+1, U32);
10310 ret->precomp = SAVEPVN(r->precomp, r->prelen);
10311 ret->refcnt = r->refcnt;
10312 ret->minlen = r->minlen;
10313 ret->prelen = r->prelen;
10314 ret->nparens = r->nparens;
10315 ret->lastparen = r->lastparen;
10316 ret->lastcloseparen = r->lastcloseparen;
10317 ret->reganch = r->reganch;
10319 ret->sublen = r->sublen;
10321 if (RX_MATCH_COPIED(ret))
10322 ret->subbeg = SAVEPVN(r->subbeg, r->sublen);
10324 ret->subbeg = Nullch;
10325 #ifdef PERL_COPY_ON_WRITE
10326 ret->saved_copy = Nullsv;
10329 ptr_table_store(PL_ptr_table, r, ret);
10333 /* duplicate a file handle */
10336 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
10342 return (PerlIO*)NULL;
10344 /* look for it in the table first */
10345 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10349 /* create anew and remember what it is */
10350 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
10351 ptr_table_store(PL_ptr_table, fp, ret);
10355 /* duplicate a directory handle */
10358 Perl_dirp_dup(pTHX_ DIR *dp)
10366 /* duplicate a typeglob */
10369 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
10374 /* look for it in the table first */
10375 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10379 /* create anew and remember what it is */
10380 Newz(0, ret, 1, GP);
10381 ptr_table_store(PL_ptr_table, gp, ret);
10384 ret->gp_refcnt = 0; /* must be before any other dups! */
10385 ret->gp_sv = sv_dup_inc(gp->gp_sv, param);
10386 ret->gp_io = io_dup_inc(gp->gp_io, param);
10387 ret->gp_form = cv_dup_inc(gp->gp_form, param);
10388 ret->gp_av = av_dup_inc(gp->gp_av, param);
10389 ret->gp_hv = hv_dup_inc(gp->gp_hv, param);
10390 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10391 ret->gp_cv = cv_dup_inc(gp->gp_cv, param);
10392 ret->gp_cvgen = gp->gp_cvgen;
10393 ret->gp_flags = gp->gp_flags;
10394 ret->gp_line = gp->gp_line;
10395 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
10399 /* duplicate a chain of magic */
10402 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
10404 MAGIC *mgprev = (MAGIC*)NULL;
10407 return (MAGIC*)NULL;
10408 /* look for it in the table first */
10409 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
10413 for (; mg; mg = mg->mg_moremagic) {
10415 Newz(0, nmg, 1, MAGIC);
10417 mgprev->mg_moremagic = nmg;
10420 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
10421 nmg->mg_private = mg->mg_private;
10422 nmg->mg_type = mg->mg_type;
10423 nmg->mg_flags = mg->mg_flags;
10424 if (mg->mg_type == PERL_MAGIC_qr) {
10425 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
10427 else if(mg->mg_type == PERL_MAGIC_backref) {
10428 const AV * const av = (AV*) mg->mg_obj;
10431 (void)SvREFCNT_inc(nmg->mg_obj = (SV*)newAV());
10433 for (i = AvFILLp(av); i >= 0; i--) {
10434 if (!svp[i]) continue;
10435 av_push((AV*)nmg->mg_obj,sv_dup(svp[i],param));
10438 else if (mg->mg_type == PERL_MAGIC_symtab) {
10439 nmg->mg_obj = mg->mg_obj;
10442 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
10443 ? sv_dup_inc(mg->mg_obj, param)
10444 : sv_dup(mg->mg_obj, param);
10446 nmg->mg_len = mg->mg_len;
10447 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
10448 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
10449 if (mg->mg_len > 0) {
10450 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
10451 if (mg->mg_type == PERL_MAGIC_overload_table &&
10452 AMT_AMAGIC((AMT*)mg->mg_ptr))
10454 AMT *amtp = (AMT*)mg->mg_ptr;
10455 AMT *namtp = (AMT*)nmg->mg_ptr;
10457 for (i = 1; i < NofAMmeth; i++) {
10458 namtp->table[i] = cv_dup_inc(amtp->table[i], param);
10462 else if (mg->mg_len == HEf_SVKEY)
10463 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
10465 if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
10466 CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10473 /* create a new pointer-mapping table */
10476 Perl_ptr_table_new(pTHX)
10479 Newz(0, tbl, 1, PTR_TBL_t);
10480 tbl->tbl_max = 511;
10481 tbl->tbl_items = 0;
10482 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
10487 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 3)
10489 # define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 2)
10497 struct ptr_tbl_ent* pte;
10498 struct ptr_tbl_ent* pteend;
10499 New(0, pte, PERL_ARENA_SIZE/sizeof(struct ptr_tbl_ent), struct ptr_tbl_ent);
10500 pte->next = PL_pte_arenaroot;
10501 PL_pte_arenaroot = pte;
10503 pteend = &pte[PERL_ARENA_SIZE / sizeof(struct ptr_tbl_ent) - 1];
10504 PL_pte_root = ++pte;
10505 while (pte < pteend) {
10506 pte->next = pte + 1;
10512 STATIC struct ptr_tbl_ent*
10515 struct ptr_tbl_ent* pte;
10519 PL_pte_root = pte->next;
10524 S_del_pte(pTHX_ struct ptr_tbl_ent*p)
10526 p->next = PL_pte_root;
10530 /* map an existing pointer using a table */
10533 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
10535 PTR_TBL_ENT_t *tblent;
10536 const UV hash = PTR_TABLE_HASH(sv);
10538 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10539 for (; tblent; tblent = tblent->next) {
10540 if (tblent->oldval == sv)
10541 return tblent->newval;
10543 return (void*)NULL;
10546 /* add a new entry to a pointer-mapping table */
10549 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
10551 PTR_TBL_ENT_t *tblent, **otblent;
10552 /* XXX this may be pessimal on platforms where pointers aren't good
10553 * hash values e.g. if they grow faster in the most significant
10555 const UV hash = PTR_TABLE_HASH(oldv);
10559 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
10560 for (tblent = *otblent; tblent; empty=0, tblent = tblent->next) {
10561 if (tblent->oldval == oldv) {
10562 tblent->newval = newv;
10566 tblent = S_new_pte(aTHX);
10567 tblent->oldval = oldv;
10568 tblent->newval = newv;
10569 tblent->next = *otblent;
10572 if (!empty && tbl->tbl_items > tbl->tbl_max)
10573 ptr_table_split(tbl);
10576 /* double the hash bucket size of an existing ptr table */
10579 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
10581 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
10582 const UV oldsize = tbl->tbl_max + 1;
10583 UV newsize = oldsize * 2;
10586 Renew(ary, newsize, PTR_TBL_ENT_t*);
10587 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10588 tbl->tbl_max = --newsize;
10589 tbl->tbl_ary = ary;
10590 for (i=0; i < oldsize; i++, ary++) {
10591 PTR_TBL_ENT_t **curentp, **entp, *ent;
10594 curentp = ary + oldsize;
10595 for (entp = ary, ent = *ary; ent; ent = *entp) {
10596 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
10598 ent->next = *curentp;
10608 /* remove all the entries from a ptr table */
10611 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
10613 register PTR_TBL_ENT_t **array;
10614 register PTR_TBL_ENT_t *entry;
10618 if (!tbl || !tbl->tbl_items) {
10622 array = tbl->tbl_ary;
10624 max = tbl->tbl_max;
10628 PTR_TBL_ENT_t *oentry = entry;
10629 entry = entry->next;
10630 S_del_pte(aTHX_ oentry);
10633 if (++riter > max) {
10636 entry = array[riter];
10640 tbl->tbl_items = 0;
10643 /* clear and free a ptr table */
10646 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
10651 ptr_table_clear(tbl);
10652 Safefree(tbl->tbl_ary);
10656 /* attempt to make everything in the typeglob readonly */
10659 S_gv_share(pTHX_ SV *sstr, CLONE_PARAMS *param)
10661 GV *gv = (GV*)sstr;
10662 SV *sv = ¶m->proto_perl->Isv_no; /* just need SvREADONLY-ness */
10664 if (GvIO(gv) || GvFORM(gv)) {
10665 GvUNIQUE_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
10667 else if (!GvCV(gv)) {
10668 GvCV(gv) = (CV*)sv;
10671 /* CvPADLISTs cannot be shared */
10672 if (!SvREADONLY(GvCV(gv)) && !CvXSUB(GvCV(gv))) {
10677 if (!GvUNIQUE(gv)) {
10679 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
10680 HvNAME_get(GvSTASH(gv)), GvNAME(gv));
10686 * write attempts will die with
10687 * "Modification of a read-only value attempted"
10693 SvREADONLY_on(GvSV(gv));
10697 GvAV(gv) = (AV*)sv;
10700 SvREADONLY_on(GvAV(gv));
10704 GvHV(gv) = (HV*)sv;
10707 SvREADONLY_on(GvHV(gv));
10710 return sstr; /* he_dup() will SvREFCNT_inc() */
10713 /* duplicate an SV of any type (including AV, HV etc) */
10716 Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param)
10719 SvRV_set(dstr, SvWEAKREF(sstr)
10720 ? sv_dup(SvRV(sstr), param)
10721 : sv_dup_inc(SvRV(sstr), param));
10724 else if (SvPVX(sstr)) {
10725 /* Has something there */
10727 /* Normal PV - clone whole allocated space */
10728 SvPV_set(dstr, SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1));
10729 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10730 /* Not that normal - actually sstr is copy on write.
10731 But we are a true, independant SV, so: */
10732 SvREADONLY_off(dstr);
10737 /* Special case - not normally malloced for some reason */
10738 if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10739 /* A "shared" PV - clone it as unshared string */
10740 if(SvPADTMP(sstr)) {
10741 /* However, some of them live in the pad
10742 and they should not have these flags
10745 SvPV_set(dstr, sharepvn(SvPVX(sstr), SvCUR(sstr),
10747 SvUV_set(dstr, SvUVX(sstr));
10750 SvPV_set(dstr, SAVEPVN(SvPVX(sstr), SvCUR(sstr)));
10752 SvREADONLY_off(dstr);
10756 /* Some other special case - random pointer */
10757 SvPV_set(dstr, SvPVX(sstr));
10762 /* Copy the Null */
10763 if (SvTYPE(dstr) == SVt_RV)
10764 SvRV_set(dstr, NULL);
10771 Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param)
10776 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
10778 /* look for it in the table first */
10779 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
10783 if(param->flags & CLONEf_JOIN_IN) {
10784 /** We are joining here so we don't want do clone
10785 something that is bad **/
10786 const char *hvname;
10788 if(SvTYPE(sstr) == SVt_PVHV &&
10789 (hvname = HvNAME_get(sstr))) {
10790 /** don't clone stashes if they already exist **/
10791 HV* old_stash = gv_stashpv(hvname,0);
10792 return (SV*) old_stash;
10796 /* create anew and remember what it is */
10799 #ifdef DEBUG_LEAKING_SCALARS
10800 dstr->sv_debug_optype = sstr->sv_debug_optype;
10801 dstr->sv_debug_line = sstr->sv_debug_line;
10802 dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10803 dstr->sv_debug_cloned = 1;
10805 dstr->sv_debug_file = savepv(sstr->sv_debug_file);
10807 dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
10811 ptr_table_store(PL_ptr_table, sstr, dstr);
10814 SvFLAGS(dstr) = SvFLAGS(sstr);
10815 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
10816 SvREFCNT(dstr) = 0; /* must be before any other dups! */
10819 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
10820 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10821 PL_watch_pvx, SvPVX(sstr));
10824 /* don't clone objects whose class has asked us not to */
10825 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10826 SvFLAGS(dstr) &= ~SVTYPEMASK;
10827 SvOBJECT_off(dstr);
10831 switch (SvTYPE(sstr)) {
10833 SvANY(dstr) = NULL;
10836 SvANY(dstr) = new_XIV();
10837 SvIV_set(dstr, SvIVX(sstr));
10840 SvANY(dstr) = new_XNV();
10841 SvNV_set(dstr, SvNVX(sstr));
10844 SvANY(dstr) = new_XRV();
10845 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10848 SvANY(dstr) = new_XPV();
10849 SvCUR_set(dstr, SvCUR(sstr));
10850 SvLEN_set(dstr, SvLEN(sstr));
10851 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10854 SvANY(dstr) = new_XPVIV();
10855 SvCUR_set(dstr, SvCUR(sstr));
10856 SvLEN_set(dstr, SvLEN(sstr));
10857 SvIV_set(dstr, SvIVX(sstr));
10858 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10861 SvANY(dstr) = new_XPVNV();
10862 SvCUR_set(dstr, SvCUR(sstr));
10863 SvLEN_set(dstr, SvLEN(sstr));
10864 SvIV_set(dstr, SvIVX(sstr));
10865 SvNV_set(dstr, SvNVX(sstr));
10866 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10869 SvANY(dstr) = new_XPVMG();
10870 SvCUR_set(dstr, SvCUR(sstr));
10871 SvLEN_set(dstr, SvLEN(sstr));
10872 SvIV_set(dstr, SvIVX(sstr));
10873 SvNV_set(dstr, SvNVX(sstr));
10874 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10875 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10876 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10879 SvANY(dstr) = new_XPVBM();
10880 SvCUR_set(dstr, SvCUR(sstr));
10881 SvLEN_set(dstr, SvLEN(sstr));
10882 SvIV_set(dstr, SvIVX(sstr));
10883 SvNV_set(dstr, SvNVX(sstr));
10884 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10885 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10886 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10887 BmRARE(dstr) = BmRARE(sstr);
10888 BmUSEFUL(dstr) = BmUSEFUL(sstr);
10889 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
10892 SvANY(dstr) = new_XPVLV();
10893 SvCUR_set(dstr, SvCUR(sstr));
10894 SvLEN_set(dstr, SvLEN(sstr));
10895 SvIV_set(dstr, SvIVX(sstr));
10896 SvNV_set(dstr, SvNVX(sstr));
10897 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10898 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10899 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10900 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
10901 LvTARGLEN(dstr) = LvTARGLEN(sstr);
10902 if (LvTYPE(sstr) == 't') /* for tie: unrefcnted fake (SV**) */
10903 LvTARG(dstr) = dstr;
10904 else if (LvTYPE(sstr) == 'T') /* for tie: fake HE */
10905 LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(sstr), 0, param);
10907 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr), param);
10908 LvTYPE(dstr) = LvTYPE(sstr);
10911 if (GvUNIQUE((GV*)sstr)) {
10913 if ((share = gv_share(sstr, param))) {
10916 ptr_table_store(PL_ptr_table, sstr, dstr);
10918 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
10919 HvNAME_get(GvSTASH(share)), GvNAME(share));
10924 SvANY(dstr) = new_XPVGV();
10925 SvCUR_set(dstr, SvCUR(sstr));
10926 SvLEN_set(dstr, SvLEN(sstr));
10927 SvIV_set(dstr, SvIVX(sstr));
10928 SvNV_set(dstr, SvNVX(sstr));
10929 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10930 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10931 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10932 GvNAMELEN(dstr) = GvNAMELEN(sstr);
10933 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
10934 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr), param);
10935 GvFLAGS(dstr) = GvFLAGS(sstr);
10936 GvGP(dstr) = gp_dup(GvGP(sstr), param);
10937 (void)GpREFCNT_inc(GvGP(dstr));
10940 SvANY(dstr) = new_XPVIO();
10941 SvCUR_set(dstr, SvCUR(sstr));
10942 SvLEN_set(dstr, SvLEN(sstr));
10943 SvIV_set(dstr, SvIVX(sstr));
10944 SvNV_set(dstr, SvNVX(sstr));
10945 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10946 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10947 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10948 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr), param);
10949 if (IoOFP(sstr) == IoIFP(sstr))
10950 IoOFP(dstr) = IoIFP(dstr);
10952 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr), param);
10953 /* PL_rsfp_filters entries have fake IoDIRP() */
10954 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
10955 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
10957 IoDIRP(dstr) = IoDIRP(sstr);
10958 IoLINES(dstr) = IoLINES(sstr);
10959 IoPAGE(dstr) = IoPAGE(sstr);
10960 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
10961 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
10962 if(IoFLAGS(sstr) & IOf_FAKE_DIRP) {
10963 /* I have no idea why fake dirp (rsfps)
10964 should be treaded differently but otherwise
10965 we end up with leaks -- sky*/
10966 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(sstr), param);
10967 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(sstr), param);
10968 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(sstr), param);
10970 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr), param);
10971 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr), param);
10972 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr), param);
10974 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
10975 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
10976 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
10977 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
10978 IoTYPE(dstr) = IoTYPE(sstr);
10979 IoFLAGS(dstr) = IoFLAGS(sstr);
10982 SvANY(dstr) = new_XPVAV();
10983 SvCUR_set(dstr, SvCUR(sstr));
10984 SvLEN_set(dstr, SvLEN(sstr));
10985 SvIV_set(dstr, SvIVX(sstr));
10986 SvNV_set(dstr, SvNVX(sstr));
10987 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10988 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10989 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param);
10990 if (AvARRAY((AV*)sstr)) {
10991 SV **dst_ary, **src_ary;
10992 SSize_t items = AvFILLp((AV*)sstr) + 1;
10994 src_ary = AvARRAY((AV*)sstr);
10995 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
10996 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10997 SvPV_set(dstr, (char*)dst_ary);
10998 AvALLOC((AV*)dstr) = dst_ary;
10999 if (AvREAL((AV*)sstr)) {
11000 while (items-- > 0)
11001 *dst_ary++ = sv_dup_inc(*src_ary++, param);
11004 while (items-- > 0)
11005 *dst_ary++ = sv_dup(*src_ary++, param);
11007 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
11008 while (items-- > 0) {
11009 *dst_ary++ = &PL_sv_undef;
11013 SvPV_set(dstr, Nullch);
11014 AvALLOC((AV*)dstr) = (SV**)NULL;
11018 SvANY(dstr) = new_XPVHV();
11019 SvCUR_set(dstr, SvCUR(sstr));
11020 SvLEN_set(dstr, SvLEN(sstr));
11021 SvIV_set(dstr, SvIVX(sstr));
11022 SvNV_set(dstr, SvNVX(sstr));
11023 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
11024 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
11026 const char *hvname = HvNAME_get((HV*)sstr);
11027 struct xpvhv_aux *aux = ((XPVHV *)SvANY(sstr))->xhv_aux;
11030 New(0, ((XPVHV *)SvANY(dstr))->xhv_aux, 1, struct xpvhv_aux);
11031 HvRITER_set((HV*)dstr, HvRITER_get((HV*)sstr));
11032 /* FIXME strlen HvNAME */
11033 Perl_hv_name_set(aTHX_ (HV*) dstr, hvname,
11034 hvname ? strlen(hvname) : 0,
11037 ((XPVHV *)SvANY(dstr))->xhv_aux = 0;
11039 if (HvARRAY((HV*)sstr)) {
11041 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
11042 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
11043 Newz(0, dxhv->xhv_array,
11044 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
11045 while (i <= sxhv->xhv_max) {
11046 ((HE**)dxhv->xhv_array)[i]
11047 = he_dup(((HE**)sxhv->xhv_array)[i],
11048 (bool)!!HvSHAREKEYS(sstr), param);
11051 HvEITER_set(dstr, he_dup(HvEITER_get(sstr),
11052 (bool)!!HvSHAREKEYS(sstr), param));
11055 SvPV_set(dstr, Nullch);
11056 HvEITER_set((HV*)dstr, (HE*)NULL);
11058 /* Record stashes for possible cloning in Perl_clone(). */
11060 av_push(param->stashes, dstr);
11064 SvANY(dstr) = new_XPVFM();
11065 FmLINES(dstr) = FmLINES(sstr);
11069 SvANY(dstr) = new_XPVCV();
11071 SvCUR_set(dstr, SvCUR(sstr));
11072 SvLEN_set(dstr, SvLEN(sstr));
11073 SvIV_set(dstr, SvIVX(sstr));
11074 SvNV_set(dstr, SvNVX(sstr));
11075 SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
11076 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
11077 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11078 CvSTASH(dstr) = hv_dup(CvSTASH(sstr), param); /* NOTE: not refcounted */
11079 CvSTART(dstr) = CvSTART(sstr);
11081 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
11083 CvXSUB(dstr) = CvXSUB(sstr);
11084 CvXSUBANY(dstr) = CvXSUBANY(sstr);
11085 if (CvCONST(sstr)) {
11086 CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(sstr)) ?
11087 SvREFCNT_inc(CvXSUBANY(sstr).any_ptr) :
11088 sv_dup_inc((SV *)CvXSUBANY(sstr).any_ptr, param);
11090 /* don't dup if copying back - CvGV isn't refcounted, so the
11091 * duped GV may never be freed. A bit of a hack! DAPM */
11092 CvGV(dstr) = (param->flags & CLONEf_JOIN_IN) ?
11093 Nullgv : gv_dup(CvGV(sstr), param) ;
11094 if (param->flags & CLONEf_COPY_STACKS) {
11095 CvDEPTH(dstr) = CvDEPTH(sstr);
11099 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
11100 CvOUTSIDE_SEQ(dstr) = CvOUTSIDE_SEQ(sstr);
11102 CvWEAKOUTSIDE(sstr)
11103 ? cv_dup( CvOUTSIDE(sstr), param)
11104 : cv_dup_inc(CvOUTSIDE(sstr), param);
11105 CvFLAGS(dstr) = CvFLAGS(sstr);
11106 CvFILE(dstr) = CvXSUB(sstr) ? CvFILE(sstr) : SAVEPV(CvFILE(sstr));
11109 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11113 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
11119 /* duplicate a context */
11122 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
11124 PERL_CONTEXT *ncxs;
11127 return (PERL_CONTEXT*)NULL;
11129 /* look for it in the table first */
11130 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
11134 /* create anew and remember what it is */
11135 Newz(56, ncxs, max + 1, PERL_CONTEXT);
11136 ptr_table_store(PL_ptr_table, cxs, ncxs);
11139 PERL_CONTEXT *cx = &cxs[ix];
11140 PERL_CONTEXT *ncx = &ncxs[ix];
11141 ncx->cx_type = cx->cx_type;
11142 if (CxTYPE(cx) == CXt_SUBST) {
11143 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
11146 ncx->blk_oldsp = cx->blk_oldsp;
11147 ncx->blk_oldcop = cx->blk_oldcop;
11148 ncx->blk_oldmarksp = cx->blk_oldmarksp;
11149 ncx->blk_oldscopesp = cx->blk_oldscopesp;
11150 ncx->blk_oldpm = cx->blk_oldpm;
11151 ncx->blk_gimme = cx->blk_gimme;
11152 switch (CxTYPE(cx)) {
11154 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
11155 ? cv_dup_inc(cx->blk_sub.cv, param)
11156 : cv_dup(cx->blk_sub.cv,param));
11157 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
11158 ? av_dup_inc(cx->blk_sub.argarray, param)
11160 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray, param);
11161 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
11162 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
11163 ncx->blk_sub.lval = cx->blk_sub.lval;
11164 ncx->blk_sub.retop = cx->blk_sub.retop;
11167 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
11168 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
11169 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
11170 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
11171 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text, param);
11172 ncx->blk_eval.retop = cx->blk_eval.retop;
11175 ncx->blk_loop.label = cx->blk_loop.label;
11176 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
11177 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
11178 ncx->blk_loop.next_op = cx->blk_loop.next_op;
11179 ncx->blk_loop.last_op = cx->blk_loop.last_op;
11180 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
11181 ? cx->blk_loop.iterdata
11182 : gv_dup((GV*)cx->blk_loop.iterdata, param));
11183 ncx->blk_loop.oldcomppad
11184 = (PAD*)ptr_table_fetch(PL_ptr_table,
11185 cx->blk_loop.oldcomppad);
11186 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave, param);
11187 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval, param);
11188 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary, param);
11189 ncx->blk_loop.iterix = cx->blk_loop.iterix;
11190 ncx->blk_loop.itermax = cx->blk_loop.itermax;
11193 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv, param);
11194 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv, param);
11195 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv, param);
11196 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
11197 ncx->blk_sub.retop = cx->blk_sub.retop;
11209 /* duplicate a stack info structure */
11212 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
11217 return (PERL_SI*)NULL;
11219 /* look for it in the table first */
11220 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
11224 /* create anew and remember what it is */
11225 Newz(56, nsi, 1, PERL_SI);
11226 ptr_table_store(PL_ptr_table, si, nsi);
11228 nsi->si_stack = av_dup_inc(si->si_stack, param);
11229 nsi->si_cxix = si->si_cxix;
11230 nsi->si_cxmax = si->si_cxmax;
11231 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
11232 nsi->si_type = si->si_type;
11233 nsi->si_prev = si_dup(si->si_prev, param);
11234 nsi->si_next = si_dup(si->si_next, param);
11235 nsi->si_markoff = si->si_markoff;
11240 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
11241 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
11242 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
11243 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
11244 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
11245 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
11246 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool)
11247 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool)
11248 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
11249 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
11250 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
11251 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
11252 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11253 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11256 #define pv_dup_inc(p) SAVEPV(p)
11257 #define pv_dup(p) SAVEPV(p)
11258 #define svp_dup_inc(p,pp) any_dup(p,pp)
11260 /* map any object to the new equivent - either something in the
11261 * ptr table, or something in the interpreter structure
11265 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
11270 return (void*)NULL;
11272 /* look for it in the table first */
11273 ret = ptr_table_fetch(PL_ptr_table, v);
11277 /* see if it is part of the interpreter structure */
11278 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
11279 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
11287 /* duplicate the save stack */
11290 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
11292 ANY *ss = proto_perl->Tsavestack;
11293 I32 ix = proto_perl->Tsavestack_ix;
11294 I32 max = proto_perl->Tsavestack_max;
11307 void (*dptr) (void*);
11308 void (*dxptr) (pTHX_ void*);
11311 Newz(54, nss, max, ANY);
11315 TOPINT(nss,ix) = i;
11317 case SAVEt_ITEM: /* normal string */
11318 sv = (SV*)POPPTR(ss,ix);
11319 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11320 sv = (SV*)POPPTR(ss,ix);
11321 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11323 case SAVEt_SV: /* scalar reference */
11324 sv = (SV*)POPPTR(ss,ix);
11325 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11326 gv = (GV*)POPPTR(ss,ix);
11327 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11329 case SAVEt_GENERIC_PVREF: /* generic char* */
11330 c = (char*)POPPTR(ss,ix);
11331 TOPPTR(nss,ix) = pv_dup(c);
11332 ptr = POPPTR(ss,ix);
11333 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11335 case SAVEt_SHARED_PVREF: /* char* in shared space */
11336 c = (char*)POPPTR(ss,ix);
11337 TOPPTR(nss,ix) = savesharedpv(c);
11338 ptr = POPPTR(ss,ix);
11339 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11341 case SAVEt_GENERIC_SVREF: /* generic sv */
11342 case SAVEt_SVREF: /* scalar reference */
11343 sv = (SV*)POPPTR(ss,ix);
11344 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11345 ptr = POPPTR(ss,ix);
11346 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11348 case SAVEt_AV: /* array reference */
11349 av = (AV*)POPPTR(ss,ix);
11350 TOPPTR(nss,ix) = av_dup_inc(av, param);
11351 gv = (GV*)POPPTR(ss,ix);
11352 TOPPTR(nss,ix) = gv_dup(gv, param);
11354 case SAVEt_HV: /* hash reference */
11355 hv = (HV*)POPPTR(ss,ix);
11356 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11357 gv = (GV*)POPPTR(ss,ix);
11358 TOPPTR(nss,ix) = gv_dup(gv, param);
11360 case SAVEt_INT: /* int reference */
11361 ptr = POPPTR(ss,ix);
11362 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11363 intval = (int)POPINT(ss,ix);
11364 TOPINT(nss,ix) = intval;
11366 case SAVEt_LONG: /* long reference */
11367 ptr = POPPTR(ss,ix);
11368 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11369 longval = (long)POPLONG(ss,ix);
11370 TOPLONG(nss,ix) = longval;
11372 case SAVEt_I32: /* I32 reference */
11373 case SAVEt_I16: /* I16 reference */
11374 case SAVEt_I8: /* I8 reference */
11375 ptr = POPPTR(ss,ix);
11376 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11378 TOPINT(nss,ix) = i;
11380 case SAVEt_IV: /* IV reference */
11381 ptr = POPPTR(ss,ix);
11382 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11384 TOPIV(nss,ix) = iv;
11386 case SAVEt_SPTR: /* SV* reference */
11387 ptr = POPPTR(ss,ix);
11388 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11389 sv = (SV*)POPPTR(ss,ix);
11390 TOPPTR(nss,ix) = sv_dup(sv, param);
11392 case SAVEt_VPTR: /* random* reference */
11393 ptr = POPPTR(ss,ix);
11394 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11395 ptr = POPPTR(ss,ix);
11396 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11398 case SAVEt_PPTR: /* char* reference */
11399 ptr = POPPTR(ss,ix);
11400 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11401 c = (char*)POPPTR(ss,ix);
11402 TOPPTR(nss,ix) = pv_dup(c);
11404 case SAVEt_HPTR: /* HV* reference */
11405 ptr = POPPTR(ss,ix);
11406 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11407 hv = (HV*)POPPTR(ss,ix);
11408 TOPPTR(nss,ix) = hv_dup(hv, param);
11410 case SAVEt_APTR: /* AV* reference */
11411 ptr = POPPTR(ss,ix);
11412 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11413 av = (AV*)POPPTR(ss,ix);
11414 TOPPTR(nss,ix) = av_dup(av, param);
11417 gv = (GV*)POPPTR(ss,ix);
11418 TOPPTR(nss,ix) = gv_dup(gv, param);
11420 case SAVEt_GP: /* scalar reference */
11421 gp = (GP*)POPPTR(ss,ix);
11422 TOPPTR(nss,ix) = gp = gp_dup(gp, param);
11423 (void)GpREFCNT_inc(gp);
11424 gv = (GV*)POPPTR(ss,ix);
11425 TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11426 c = (char*)POPPTR(ss,ix);
11427 TOPPTR(nss,ix) = pv_dup(c);
11429 TOPIV(nss,ix) = iv;
11431 TOPIV(nss,ix) = iv;
11434 case SAVEt_MORTALIZESV:
11435 sv = (SV*)POPPTR(ss,ix);
11436 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11439 ptr = POPPTR(ss,ix);
11440 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11441 /* these are assumed to be refcounted properly */
11442 switch (((OP*)ptr)->op_type) {
11444 case OP_LEAVESUBLV:
11448 case OP_LEAVEWRITE:
11449 TOPPTR(nss,ix) = ptr;
11454 TOPPTR(nss,ix) = Nullop;
11459 TOPPTR(nss,ix) = Nullop;
11462 c = (char*)POPPTR(ss,ix);
11463 TOPPTR(nss,ix) = pv_dup_inc(c);
11465 case SAVEt_CLEARSV:
11466 longval = POPLONG(ss,ix);
11467 TOPLONG(nss,ix) = longval;
11470 hv = (HV*)POPPTR(ss,ix);
11471 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11472 c = (char*)POPPTR(ss,ix);
11473 TOPPTR(nss,ix) = pv_dup_inc(c);
11475 TOPINT(nss,ix) = i;
11477 case SAVEt_DESTRUCTOR:
11478 ptr = POPPTR(ss,ix);
11479 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11480 dptr = POPDPTR(ss,ix);
11481 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
11483 case SAVEt_DESTRUCTOR_X:
11484 ptr = POPPTR(ss,ix);
11485 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
11486 dxptr = POPDXPTR(ss,ix);
11487 TOPDXPTR(nss,ix) = (void (*)(pTHX_ void*))any_dup((void *)dxptr, proto_perl);
11489 case SAVEt_REGCONTEXT:
11492 TOPINT(nss,ix) = i;
11495 case SAVEt_STACK_POS: /* Position on Perl stack */
11497 TOPINT(nss,ix) = i;
11499 case SAVEt_AELEM: /* array element */
11500 sv = (SV*)POPPTR(ss,ix);
11501 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11503 TOPINT(nss,ix) = i;
11504 av = (AV*)POPPTR(ss,ix);
11505 TOPPTR(nss,ix) = av_dup_inc(av, param);
11507 case SAVEt_HELEM: /* hash element */
11508 sv = (SV*)POPPTR(ss,ix);
11509 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11510 sv = (SV*)POPPTR(ss,ix);
11511 TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11512 hv = (HV*)POPPTR(ss,ix);
11513 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11516 ptr = POPPTR(ss,ix);
11517 TOPPTR(nss,ix) = ptr;
11521 TOPINT(nss,ix) = i;
11523 case SAVEt_COMPPAD:
11524 av = (AV*)POPPTR(ss,ix);
11525 TOPPTR(nss,ix) = av_dup(av, param);
11528 longval = (long)POPLONG(ss,ix);
11529 TOPLONG(nss,ix) = longval;
11530 ptr = POPPTR(ss,ix);
11531 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11532 sv = (SV*)POPPTR(ss,ix);
11533 TOPPTR(nss,ix) = sv_dup(sv, param);
11536 ptr = POPPTR(ss,ix);
11537 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11538 longval = (long)POPBOOL(ss,ix);
11539 TOPBOOL(nss,ix) = (bool)longval;
11541 case SAVEt_SET_SVFLAGS:
11543 TOPINT(nss,ix) = i;
11545 TOPINT(nss,ix) = i;
11546 sv = (SV*)POPPTR(ss,ix);
11547 TOPPTR(nss,ix) = sv_dup(sv, param);
11550 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
11558 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11559 * flag to the result. This is done for each stash before cloning starts,
11560 * so we know which stashes want their objects cloned */
11563 do_mark_cloneable_stash(pTHX_ SV *sv)
11565 const char *hvname = HvNAME_get((HV*)sv);
11567 GV* cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
11568 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11569 if (cloner && GvCV(cloner)) {
11576 XPUSHs(sv_2mortal(newSVpv(hvname, 0)));
11578 call_sv((SV*)GvCV(cloner), G_SCALAR);
11585 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11593 =for apidoc perl_clone
11595 Create and return a new interpreter by cloning the current one.
11597 perl_clone takes these flags as parameters:
11599 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11600 without it we only clone the data and zero the stacks,
11601 with it we copy the stacks and the new perl interpreter is
11602 ready to run at the exact same point as the previous one.
11603 The pseudo-fork code uses COPY_STACKS while the
11604 threads->new doesn't.
11606 CLONEf_KEEP_PTR_TABLE
11607 perl_clone keeps a ptr_table with the pointer of the old
11608 variable as a key and the new variable as a value,
11609 this allows it to check if something has been cloned and not
11610 clone it again but rather just use the value and increase the
11611 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11612 the ptr_table using the function
11613 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11614 reason to keep it around is if you want to dup some of your own
11615 variable who are outside the graph perl scans, example of this
11616 code is in threads.xs create
11619 This is a win32 thing, it is ignored on unix, it tells perls
11620 win32host code (which is c++) to clone itself, this is needed on
11621 win32 if you want to run two threads at the same time,
11622 if you just want to do some stuff in a separate perl interpreter
11623 and then throw it away and return to the original one,
11624 you don't need to do anything.
11629 /* XXX the above needs expanding by someone who actually understands it ! */
11630 EXTERN_C PerlInterpreter *
11631 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11634 perl_clone(PerlInterpreter *proto_perl, UV flags)
11637 #ifdef PERL_IMPLICIT_SYS
11639 /* perlhost.h so we need to call into it
11640 to clone the host, CPerlHost should have a c interface, sky */
11642 if (flags & CLONEf_CLONE_HOST) {
11643 return perl_clone_host(proto_perl,flags);
11645 return perl_clone_using(proto_perl, flags,
11647 proto_perl->IMemShared,
11648 proto_perl->IMemParse,
11650 proto_perl->IStdIO,
11654 proto_perl->IProc);
11658 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11659 struct IPerlMem* ipM, struct IPerlMem* ipMS,
11660 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11661 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11662 struct IPerlDir* ipD, struct IPerlSock* ipS,
11663 struct IPerlProc* ipP)
11665 /* XXX many of the string copies here can be optimized if they're
11666 * constants; they need to be allocated as common memory and just
11667 * their pointers copied. */
11670 CLONE_PARAMS clone_params;
11671 CLONE_PARAMS* param = &clone_params;
11673 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
11674 /* for each stash, determine whether its objects should be cloned */
11675 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11676 PERL_SET_THX(my_perl);
11679 Poison(my_perl, 1, PerlInterpreter);
11681 PL_curcop = (COP *)Nullop;
11685 PL_savestack_ix = 0;
11686 PL_savestack_max = -1;
11687 PL_sig_pending = 0;
11688 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11689 # else /* !DEBUGGING */
11690 Zero(my_perl, 1, PerlInterpreter);
11691 # endif /* DEBUGGING */
11693 /* host pointers */
11695 PL_MemShared = ipMS;
11696 PL_MemParse = ipMP;
11703 #else /* !PERL_IMPLICIT_SYS */
11705 CLONE_PARAMS clone_params;
11706 CLONE_PARAMS* param = &clone_params;
11707 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
11708 /* for each stash, determine whether its objects should be cloned */
11709 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11710 PERL_SET_THX(my_perl);
11713 Poison(my_perl, 1, PerlInterpreter);
11715 PL_curcop = (COP *)Nullop;
11719 PL_savestack_ix = 0;
11720 PL_savestack_max = -1;
11721 PL_sig_pending = 0;
11722 Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11723 # else /* !DEBUGGING */
11724 Zero(my_perl, 1, PerlInterpreter);
11725 # endif /* DEBUGGING */
11726 #endif /* PERL_IMPLICIT_SYS */
11727 param->flags = flags;
11728 param->proto_perl = proto_perl;
11731 PL_xiv_arenaroot = NULL;
11732 PL_xiv_root = NULL;
11733 PL_xnv_arenaroot = NULL;
11734 PL_xnv_root = NULL;
11735 PL_xrv_arenaroot = NULL;
11736 PL_xrv_root = NULL;
11737 PL_xpv_arenaroot = NULL;
11738 PL_xpv_root = NULL;
11739 PL_xpviv_arenaroot = NULL;
11740 PL_xpviv_root = NULL;
11741 PL_xpvnv_arenaroot = NULL;
11742 PL_xpvnv_root = NULL;
11743 PL_xpvcv_arenaroot = NULL;
11744 PL_xpvcv_root = NULL;
11745 PL_xpvav_arenaroot = NULL;
11746 PL_xpvav_root = NULL;
11747 PL_xpvhv_arenaroot = NULL;
11748 PL_xpvhv_root = NULL;
11749 PL_xpvmg_arenaroot = NULL;
11750 PL_xpvmg_root = NULL;
11751 PL_xpvgv_arenaroot = NULL;
11752 PL_xpvgv_root = NULL;
11753 PL_xpvlv_arenaroot = NULL;
11754 PL_xpvlv_root = NULL;
11755 PL_xpvbm_arenaroot = NULL;
11756 PL_xpvbm_root = NULL;
11757 PL_he_arenaroot = NULL;
11759 #if defined(USE_ITHREADS)
11760 PL_pte_arenaroot = NULL;
11761 PL_pte_root = NULL;
11763 PL_nice_chunk = NULL;
11764 PL_nice_chunk_size = 0;
11766 PL_sv_objcount = 0;
11767 PL_sv_root = Nullsv;
11768 PL_sv_arenaroot = Nullsv;
11770 PL_debug = proto_perl->Idebug;
11772 #ifdef USE_REENTRANT_API
11773 /* XXX: things like -Dm will segfault here in perlio, but doing
11774 * PERL_SET_CONTEXT(proto_perl);
11775 * breaks too many other things
11777 Perl_reentrant_init(aTHX);
11780 /* create SV map for pointer relocation */
11781 PL_ptr_table = ptr_table_new();
11783 /* initialize these special pointers as early as possible */
11784 SvANY(&PL_sv_undef) = NULL;
11785 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
11786 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
11787 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11789 SvANY(&PL_sv_no) = new_XPVNV();
11790 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
11791 SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11792 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11793 SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
11794 SvCUR_set(&PL_sv_no, 0);
11795 SvLEN_set(&PL_sv_no, 1);
11796 SvIV_set(&PL_sv_no, 0);
11797 SvNV_set(&PL_sv_no, 0);
11798 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
11800 SvANY(&PL_sv_yes) = new_XPVNV();
11801 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
11802 SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11803 |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11804 SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
11805 SvCUR_set(&PL_sv_yes, 1);
11806 SvLEN_set(&PL_sv_yes, 2);
11807 SvIV_set(&PL_sv_yes, 1);
11808 SvNV_set(&PL_sv_yes, 1);
11809 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11811 /* create (a non-shared!) shared string table */
11812 PL_strtab = newHV();
11813 HvSHAREKEYS_off(PL_strtab);
11814 hv_ksplit(PL_strtab, 512);
11815 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11817 PL_compiling = proto_perl->Icompiling;
11819 /* These two PVs will be free'd special way so must set them same way op.c does */
11820 PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11821 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11823 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file);
11824 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11826 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11827 if (!specialWARN(PL_compiling.cop_warnings))
11828 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
11829 if (!specialCopIO(PL_compiling.cop_io))
11830 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
11831 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
11833 /* pseudo environmental stuff */
11834 PL_origargc = proto_perl->Iorigargc;
11835 PL_origargv = proto_perl->Iorigargv;
11837 param->stashes = newAV(); /* Setup array of objects to call clone on */
11839 #ifdef PERLIO_LAYERS
11840 /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11841 PerlIO_clone(aTHX_ proto_perl, param);
11844 PL_envgv = gv_dup(proto_perl->Ienvgv, param);
11845 PL_incgv = gv_dup(proto_perl->Iincgv, param);
11846 PL_hintgv = gv_dup(proto_perl->Ihintgv, param);
11847 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
11848 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
11849 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param);
11852 PL_minus_c = proto_perl->Iminus_c;
11853 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param);
11854 PL_localpatches = proto_perl->Ilocalpatches;
11855 PL_splitstr = proto_perl->Isplitstr;
11856 PL_preprocess = proto_perl->Ipreprocess;
11857 PL_minus_n = proto_perl->Iminus_n;
11858 PL_minus_p = proto_perl->Iminus_p;
11859 PL_minus_l = proto_perl->Iminus_l;
11860 PL_minus_a = proto_perl->Iminus_a;
11861 PL_minus_F = proto_perl->Iminus_F;
11862 PL_doswitches = proto_perl->Idoswitches;
11863 PL_dowarn = proto_perl->Idowarn;
11864 PL_doextract = proto_perl->Idoextract;
11865 PL_sawampersand = proto_perl->Isawampersand;
11866 PL_unsafe = proto_perl->Iunsafe;
11867 PL_inplace = SAVEPV(proto_perl->Iinplace);
11868 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param);
11869 PL_perldb = proto_perl->Iperldb;
11870 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11871 PL_exit_flags = proto_perl->Iexit_flags;
11873 /* magical thingies */
11874 /* XXX time(&PL_basetime) when asked for? */
11875 PL_basetime = proto_perl->Ibasetime;
11876 PL_formfeed = sv_dup(proto_perl->Iformfeed, param);
11878 PL_maxsysfd = proto_perl->Imaxsysfd;
11879 PL_multiline = proto_perl->Imultiline;
11880 PL_statusvalue = proto_perl->Istatusvalue;
11882 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
11884 PL_encoding = sv_dup(proto_perl->Iencoding, param);
11886 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
11887 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
11888 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
11890 /* Clone the regex array */
11891 PL_regex_padav = newAV();
11893 const I32 len = av_len((AV*)proto_perl->Iregex_padav);
11894 SV** regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
11895 av_push(PL_regex_padav,
11896 sv_dup_inc(regexen[0],param));
11897 for(i = 1; i <= len; i++) {
11898 if(SvREPADTMP(regexen[i])) {
11899 av_push(PL_regex_padav, sv_dup_inc(regexen[i], param));
11901 av_push(PL_regex_padav,
11903 newSViv(PTR2IV(re_dup(INT2PTR(REGEXP *,
11904 SvIVX(regexen[i])), param)))
11909 PL_regex_pad = AvARRAY(PL_regex_padav);
11911 /* shortcuts to various I/O objects */
11912 PL_stdingv = gv_dup(proto_perl->Istdingv, param);
11913 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param);
11914 PL_defgv = gv_dup(proto_perl->Idefgv, param);
11915 PL_argvgv = gv_dup(proto_perl->Iargvgv, param);
11916 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param);
11917 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param);
11919 /* shortcuts to regexp stuff */
11920 PL_replgv = gv_dup(proto_perl->Ireplgv, param);
11922 /* shortcuts to misc objects */
11923 PL_errgv = gv_dup(proto_perl->Ierrgv, param);
11925 /* shortcuts to debugging objects */
11926 PL_DBgv = gv_dup(proto_perl->IDBgv, param);
11927 PL_DBline = gv_dup(proto_perl->IDBline, param);
11928 PL_DBsub = gv_dup(proto_perl->IDBsub, param);
11929 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param);
11930 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param);
11931 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param);
11932 PL_DBassertion = sv_dup(proto_perl->IDBassertion, param);
11933 PL_lineary = av_dup(proto_perl->Ilineary, param);
11934 PL_dbargs = av_dup(proto_perl->Idbargs, param);
11936 /* symbol tables */
11937 PL_defstash = hv_dup_inc(proto_perl->Tdefstash, param);
11938 PL_curstash = hv_dup(proto_perl->Tcurstash, param);
11939 PL_debstash = hv_dup(proto_perl->Idebstash, param);
11940 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param);
11941 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param);
11943 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param);
11944 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param);
11945 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param);
11946 PL_endav = av_dup_inc(proto_perl->Iendav, param);
11947 PL_checkav = av_dup_inc(proto_perl->Icheckav, param);
11948 PL_initav = av_dup_inc(proto_perl->Iinitav, param);
11950 PL_sub_generation = proto_perl->Isub_generation;
11952 /* funky return mechanisms */
11953 PL_forkprocess = proto_perl->Iforkprocess;
11955 /* subprocess state */
11956 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param);
11958 /* internal state */
11959 PL_tainting = proto_perl->Itainting;
11960 PL_taint_warn = proto_perl->Itaint_warn;
11961 PL_maxo = proto_perl->Imaxo;
11962 if (proto_perl->Iop_mask)
11963 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11965 PL_op_mask = Nullch;
11966 /* PL_asserting = proto_perl->Iasserting; */
11968 /* current interpreter roots */
11969 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param);
11970 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
11971 PL_main_start = proto_perl->Imain_start;
11972 PL_eval_root = proto_perl->Ieval_root;
11973 PL_eval_start = proto_perl->Ieval_start;
11975 /* runtime control stuff */
11976 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11977 PL_copline = proto_perl->Icopline;
11979 PL_filemode = proto_perl->Ifilemode;
11980 PL_lastfd = proto_perl->Ilastfd;
11981 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
11984 PL_gensym = proto_perl->Igensym;
11985 PL_preambled = proto_perl->Ipreambled;
11986 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param);
11987 PL_laststatval = proto_perl->Ilaststatval;
11988 PL_laststype = proto_perl->Ilaststype;
11989 PL_mess_sv = Nullsv;
11991 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param);
11992 PL_ofmt = SAVEPV(proto_perl->Iofmt);
11994 /* interpreter atexit processing */
11995 PL_exitlistlen = proto_perl->Iexitlistlen;
11996 if (PL_exitlistlen) {
11997 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11998 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12001 PL_exitlist = (PerlExitListEntry*)NULL;
12002 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param);
12003 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param);
12004 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param);
12006 PL_profiledata = NULL;
12007 PL_rsfp = fp_dup(proto_perl->Irsfp, '<', param);
12008 /* PL_rsfp_filters entries have fake IoDIRP() */
12009 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters, param);
12011 PL_compcv = cv_dup(proto_perl->Icompcv, param);
12013 PAD_CLONE_VARS(proto_perl, param);
12015 #ifdef HAVE_INTERP_INTERN
12016 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
12019 /* more statics moved here */
12020 PL_generation = proto_perl->Igeneration;
12021 PL_DBcv = cv_dup(proto_perl->IDBcv, param);
12023 PL_in_clean_objs = proto_perl->Iin_clean_objs;
12024 PL_in_clean_all = proto_perl->Iin_clean_all;
12026 PL_uid = proto_perl->Iuid;
12027 PL_euid = proto_perl->Ieuid;
12028 PL_gid = proto_perl->Igid;
12029 PL_egid = proto_perl->Iegid;
12030 PL_nomemok = proto_perl->Inomemok;
12031 PL_an = proto_perl->Ian;
12032 PL_evalseq = proto_perl->Ievalseq;
12033 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
12034 PL_origalen = proto_perl->Iorigalen;
12035 PL_pidstatus = newHV(); /* XXX flag for cloning? */
12036 PL_osname = SAVEPV(proto_perl->Iosname);
12037 PL_sh_path_compat = proto_perl->Ish_path_compat; /* XXX never deallocated */
12038 PL_sighandlerp = proto_perl->Isighandlerp;
12041 PL_runops = proto_perl->Irunops;
12043 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
12046 PL_cshlen = proto_perl->Icshlen;
12047 PL_cshname = proto_perl->Icshname; /* XXX never deallocated */
12050 PL_lex_state = proto_perl->Ilex_state;
12051 PL_lex_defer = proto_perl->Ilex_defer;
12052 PL_lex_expect = proto_perl->Ilex_expect;
12053 PL_lex_formbrack = proto_perl->Ilex_formbrack;
12054 PL_lex_dojoin = proto_perl->Ilex_dojoin;
12055 PL_lex_starts = proto_perl->Ilex_starts;
12056 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff, param);
12057 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl, param);
12058 PL_lex_op = proto_perl->Ilex_op;
12059 PL_lex_inpat = proto_perl->Ilex_inpat;
12060 PL_lex_inwhat = proto_perl->Ilex_inwhat;
12061 PL_lex_brackets = proto_perl->Ilex_brackets;
12062 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
12063 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
12064 PL_lex_casemods = proto_perl->Ilex_casemods;
12065 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
12066 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
12068 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
12069 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
12070 PL_nexttoke = proto_perl->Inexttoke;
12072 /* XXX This is probably masking the deeper issue of why
12073 * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
12074 * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
12075 * (A little debugging with a watchpoint on it may help.)
12077 if (SvANY(proto_perl->Ilinestr)) {
12078 PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param);
12079 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
12080 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
12081 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
12082 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
12083 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
12084 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
12085 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
12086 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
12089 PL_linestr = NEWSV(65,79);
12090 sv_upgrade(PL_linestr,SVt_PVIV);
12091 sv_setpvn(PL_linestr,"",0);
12092 PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
12094 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
12095 PL_pending_ident = proto_perl->Ipending_ident;
12096 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
12098 PL_expect = proto_perl->Iexpect;
12100 PL_multi_start = proto_perl->Imulti_start;
12101 PL_multi_end = proto_perl->Imulti_end;
12102 PL_multi_open = proto_perl->Imulti_open;
12103 PL_multi_close = proto_perl->Imulti_close;
12105 PL_error_count = proto_perl->Ierror_count;
12106 PL_subline = proto_perl->Isubline;
12107 PL_subname = sv_dup_inc(proto_perl->Isubname, param);
12109 /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
12110 if (SvANY(proto_perl->Ilinestr)) {
12111 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
12112 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
12113 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
12114 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
12115 PL_last_lop_op = proto_perl->Ilast_lop_op;
12118 PL_last_uni = SvPVX(PL_linestr);
12119 PL_last_lop = SvPVX(PL_linestr);
12120 PL_last_lop_op = 0;
12122 PL_in_my = proto_perl->Iin_my;
12123 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash, param);
12125 PL_cryptseen = proto_perl->Icryptseen;
12128 PL_hints = proto_perl->Ihints;
12130 PL_amagic_generation = proto_perl->Iamagic_generation;
12132 #ifdef USE_LOCALE_COLLATE
12133 PL_collation_ix = proto_perl->Icollation_ix;
12134 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
12135 PL_collation_standard = proto_perl->Icollation_standard;
12136 PL_collxfrm_base = proto_perl->Icollxfrm_base;
12137 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
12138 #endif /* USE_LOCALE_COLLATE */
12140 #ifdef USE_LOCALE_NUMERIC
12141 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
12142 PL_numeric_standard = proto_perl->Inumeric_standard;
12143 PL_numeric_local = proto_perl->Inumeric_local;
12144 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
12145 #endif /* !USE_LOCALE_NUMERIC */
12147 /* utf8 character classes */
12148 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param);
12149 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
12150 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii, param);
12151 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param);
12152 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param);
12153 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
12154 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph, param);
12155 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit, param);
12156 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper, param);
12157 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower, param);
12158 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print, param);
12159 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct, param);
12160 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
12161 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
12162 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
12163 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
12164 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
12165 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
12166 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
12167 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
12169 /* Did the locale setup indicate UTF-8? */
12170 PL_utf8locale = proto_perl->Iutf8locale;
12171 /* Unicode features (see perlrun/-C) */
12172 PL_unicode = proto_perl->Iunicode;
12174 /* Pre-5.8 signals control */
12175 PL_signals = proto_perl->Isignals;
12177 /* times() ticks per second */
12178 PL_clocktick = proto_perl->Iclocktick;
12180 /* Recursion stopper for PerlIO_find_layer */
12181 PL_in_load_module = proto_perl->Iin_load_module;
12183 /* sort() routine */
12184 PL_sort_RealCmp = proto_perl->Isort_RealCmp;
12186 /* Not really needed/useful since the reenrant_retint is "volatile",
12187 * but do it for consistency's sake. */
12188 PL_reentrant_retint = proto_perl->Ireentrant_retint;
12190 /* Hooks to shared SVs and locks. */
12191 PL_sharehook = proto_perl->Isharehook;
12192 PL_lockhook = proto_perl->Ilockhook;
12193 PL_unlockhook = proto_perl->Iunlockhook;
12194 PL_threadhook = proto_perl->Ithreadhook;
12196 PL_runops_std = proto_perl->Irunops_std;
12197 PL_runops_dbg = proto_perl->Irunops_dbg;
12199 #ifdef THREADS_HAVE_PIDS
12200 PL_ppid = proto_perl->Ippid;
12204 PL_last_swash_hv = Nullhv; /* reinits on demand */
12205 PL_last_swash_klen = 0;
12206 PL_last_swash_key[0]= '\0';
12207 PL_last_swash_tmps = (U8*)NULL;
12208 PL_last_swash_slen = 0;
12210 PL_glob_index = proto_perl->Iglob_index;
12211 PL_srand_called = proto_perl->Isrand_called;
12212 PL_hash_seed = proto_perl->Ihash_seed;
12213 PL_rehash_seed = proto_perl->Irehash_seed;
12214 PL_uudmap['M'] = 0; /* reinits on demand */
12215 PL_bitcount = Nullch; /* reinits on demand */
12217 if (proto_perl->Ipsig_pend) {
12218 Newz(0, PL_psig_pend, SIG_SIZE, int);
12221 PL_psig_pend = (int*)NULL;
12224 if (proto_perl->Ipsig_ptr) {
12225 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
12226 Newz(0, PL_psig_name, SIG_SIZE, SV*);
12227 for (i = 1; i < SIG_SIZE; i++) {
12228 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
12229 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
12233 PL_psig_ptr = (SV**)NULL;
12234 PL_psig_name = (SV**)NULL;
12237 /* thrdvar.h stuff */
12239 if (flags & CLONEf_COPY_STACKS) {
12240 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
12241 PL_tmps_ix = proto_perl->Ttmps_ix;
12242 PL_tmps_max = proto_perl->Ttmps_max;
12243 PL_tmps_floor = proto_perl->Ttmps_floor;
12244 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
12246 while (i <= PL_tmps_ix) {
12247 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
12251 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
12252 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
12253 Newz(54, PL_markstack, i, I32);
12254 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
12255 - proto_perl->Tmarkstack);
12256 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
12257 - proto_perl->Tmarkstack);
12258 Copy(proto_perl->Tmarkstack, PL_markstack,
12259 PL_markstack_ptr - PL_markstack + 1, I32);
12261 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12262 * NOTE: unlike the others! */
12263 PL_scopestack_ix = proto_perl->Tscopestack_ix;
12264 PL_scopestack_max = proto_perl->Tscopestack_max;
12265 Newz(54, PL_scopestack, PL_scopestack_max, I32);
12266 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
12268 /* NOTE: si_dup() looks at PL_markstack */
12269 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo, param);
12271 /* PL_curstack = PL_curstackinfo->si_stack; */
12272 PL_curstack = av_dup(proto_perl->Tcurstack, param);
12273 PL_mainstack = av_dup(proto_perl->Tmainstack, param);
12275 /* next PUSHs() etc. set *(PL_stack_sp+1) */
12276 PL_stack_base = AvARRAY(PL_curstack);
12277 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
12278 - proto_perl->Tstack_base);
12279 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
12281 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
12282 * NOTE: unlike the others! */
12283 PL_savestack_ix = proto_perl->Tsavestack_ix;
12284 PL_savestack_max = proto_perl->Tsavestack_max;
12285 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
12286 PL_savestack = ss_dup(proto_perl, param);
12290 ENTER; /* perl_destruct() wants to LEAVE; */
12293 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
12294 PL_top_env = &PL_start_env;
12296 PL_op = proto_perl->Top;
12299 PL_Xpv = (XPV*)NULL;
12300 PL_na = proto_perl->Tna;
12302 PL_statbuf = proto_perl->Tstatbuf;
12303 PL_statcache = proto_perl->Tstatcache;
12304 PL_statgv = gv_dup(proto_perl->Tstatgv, param);
12305 PL_statname = sv_dup_inc(proto_perl->Tstatname, param);
12307 PL_timesbuf = proto_perl->Ttimesbuf;
12310 PL_tainted = proto_perl->Ttainted;
12311 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
12312 PL_rs = sv_dup_inc(proto_perl->Trs, param);
12313 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv, param);
12314 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv, param);
12315 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv, param);
12316 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
12317 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget, param);
12318 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget, param);
12319 PL_formtarget = sv_dup(proto_perl->Tformtarget, param);
12321 PL_restartop = proto_perl->Trestartop;
12322 PL_in_eval = proto_perl->Tin_eval;
12323 PL_delaymagic = proto_perl->Tdelaymagic;
12324 PL_dirty = proto_perl->Tdirty;
12325 PL_localizing = proto_perl->Tlocalizing;
12327 PL_errors = sv_dup_inc(proto_perl->Terrors, param);
12328 PL_hv_fetch_ent_mh = Nullhe;
12329 PL_modcount = proto_perl->Tmodcount;
12330 PL_lastgotoprobe = Nullop;
12331 PL_dumpindent = proto_perl->Tdumpindent;
12333 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
12334 PL_sortstash = hv_dup(proto_perl->Tsortstash, param);
12335 PL_firstgv = gv_dup(proto_perl->Tfirstgv, param);
12336 PL_secondgv = gv_dup(proto_perl->Tsecondgv, param);
12337 PL_sortcxix = proto_perl->Tsortcxix;
12338 PL_efloatbuf = Nullch; /* reinits on demand */
12339 PL_efloatsize = 0; /* reinits on demand */
12343 PL_screamfirst = NULL;
12344 PL_screamnext = NULL;
12345 PL_maxscream = -1; /* reinits on demand */
12346 PL_lastscream = Nullsv;
12348 PL_watchaddr = NULL;
12349 PL_watchok = Nullch;
12351 PL_regdummy = proto_perl->Tregdummy;
12352 PL_regprecomp = Nullch;
12355 PL_colorset = 0; /* reinits PL_colors[] */
12356 /*PL_colors[6] = {0,0,0,0,0,0};*/
12357 PL_reginput = Nullch;
12358 PL_regbol = Nullch;
12359 PL_regeol = Nullch;
12360 PL_regstartp = (I32*)NULL;
12361 PL_regendp = (I32*)NULL;
12362 PL_reglastparen = (U32*)NULL;
12363 PL_reglastcloseparen = (U32*)NULL;
12364 PL_regtill = Nullch;
12365 PL_reg_start_tmp = (char**)NULL;
12366 PL_reg_start_tmpl = 0;
12367 PL_regdata = (struct reg_data*)NULL;
12370 PL_reg_eval_set = 0;
12372 PL_regprogram = (regnode*)NULL;
12374 PL_regcc = (CURCUR*)NULL;
12375 PL_reg_call_cc = (struct re_cc_state*)NULL;
12376 PL_reg_re = (regexp*)NULL;
12377 PL_reg_ganch = Nullch;
12378 PL_reg_sv = Nullsv;
12379 PL_reg_match_utf8 = FALSE;
12380 PL_reg_magic = (MAGIC*)NULL;
12382 PL_reg_oldcurpm = (PMOP*)NULL;
12383 PL_reg_curpm = (PMOP*)NULL;
12384 PL_reg_oldsaved = Nullch;
12385 PL_reg_oldsavedlen = 0;
12386 #ifdef PERL_COPY_ON_WRITE
12389 PL_reg_maxiter = 0;
12390 PL_reg_leftiter = 0;
12391 PL_reg_poscache = Nullch;
12392 PL_reg_poscache_size= 0;
12394 /* RE engine - function pointers */
12395 PL_regcompp = proto_perl->Tregcompp;
12396 PL_regexecp = proto_perl->Tregexecp;
12397 PL_regint_start = proto_perl->Tregint_start;
12398 PL_regint_string = proto_perl->Tregint_string;
12399 PL_regfree = proto_perl->Tregfree;
12401 PL_reginterp_cnt = 0;
12402 PL_reg_starttry = 0;
12404 /* Pluggable optimizer */
12405 PL_peepp = proto_perl->Tpeepp;
12407 PL_stashcache = newHV();
12409 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12410 ptr_table_free(PL_ptr_table);
12411 PL_ptr_table = NULL;
12414 /* Call the ->CLONE method, if it exists, for each of the stashes
12415 identified by sv_dup() above.
12417 while(av_len(param->stashes) != -1) {
12418 HV* stash = (HV*) av_shift(param->stashes);
12419 GV* cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12420 if (cloner && GvCV(cloner)) {
12425 XPUSHs(sv_2mortal(newSVpv(HvNAME_get(stash), 0)));
12427 call_sv((SV*)GvCV(cloner), G_DISCARD);
12433 SvREFCNT_dec(param->stashes);
12435 /* orphaned? eg threads->new inside BEGIN or use */
12436 if (PL_compcv && ! SvREFCNT(PL_compcv)) {
12437 (void)SvREFCNT_inc(PL_compcv);
12438 SAVEFREESV(PL_compcv);
12444 #endif /* USE_ITHREADS */
12447 =head1 Unicode Support
12449 =for apidoc sv_recode_to_utf8
12451 The encoding is assumed to be an Encode object, on entry the PV
12452 of the sv is assumed to be octets in that encoding, and the sv
12453 will be converted into Unicode (and UTF-8).
12455 If the sv already is UTF-8 (or if it is not POK), or if the encoding
12456 is not a reference, nothing is done to the sv. If the encoding is not
12457 an C<Encode::XS> Encoding object, bad things will happen.
12458 (See F<lib/encoding.pm> and L<Encode>).
12460 The PV of the sv is returned.
12465 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12468 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12482 Passing sv_yes is wrong - it needs to be or'ed set of constants
12483 for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12484 remove converted chars from source.
12486 Both will default the value - let them.
12488 XPUSHs(&PL_sv_yes);
12491 call_method("decode", G_SCALAR);
12495 s = SvPV(uni, len);
12496 if (s != SvPVX(sv)) {
12497 SvGROW(sv, len + 1);
12498 Move(s, SvPVX(sv), len, char);
12499 SvCUR_set(sv, len);
12500 SvPVX(sv)[len] = 0;
12507 return SvPOKp(sv) ? SvPVX(sv) : NULL;
12511 =for apidoc sv_cat_decode
12513 The encoding is assumed to be an Encode object, the PV of the ssv is
12514 assumed to be octets in that encoding and decoding the input starts
12515 from the position which (PV + *offset) pointed to. The dsv will be
12516 concatenated the decoded UTF-8 string from ssv. Decoding will terminate
12517 when the string tstr appears in decoding output or the input ends on
12518 the PV of the ssv. The value which the offset points will be modified
12519 to the last input position on the ssv.
12521 Returns TRUE if the terminator was found, else returns FALSE.
12526 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12527 SV *ssv, int *offset, char *tstr, int tlen)
12531 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12542 XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
12543 XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
12545 call_method("cat_decode", G_SCALAR);
12547 ret = SvTRUE(TOPs);
12548 *offset = SvIV(offsv);
12554 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12560 * c-indentation-style: bsd
12561 * c-basic-offset: 4
12562 * indent-tabs-mode: t
12565 * ex: set ts=8 sts=4 sw=4 noet: