8f3524124a9a01a4ecbc5a18fde226ca8be72937
[p5sagit/p5-mst-13.2.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 2004, 2005, by Larry Wall and others
5  *
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.
8  *
9  * "I wonder what the Entish is for 'yes' and 'no'," he thought.
10  *
11  *
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
17  * in the pp*.c files.
18  */
19
20 #include "EXTERN.h"
21 #define PERL_IN_SV_C
22 #include "perl.h"
23 #include "regcomp.h"
24
25 #define FCALL *f
26
27 #ifdef __Lynx__
28 /* Missing proto on LynxOS */
29   char *gconvert(double, int, int,  char *);
30 #endif
31
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
42  * --jhi
43  */
44 #define ASSERT_UTF8_CACHE(cache) \
45         STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
46 #else
47 #define ASSERT_UTF8_CACHE(cache) NOOP
48 #endif
49
50 #ifdef PERL_OLD_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-
54    on-write.  */
55 #endif
56
57 /* ============================================================================
58
59 =head1 Allocation and deallocation of SVs.
60
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.
65
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.
73
74 The following global variables are associated with arenas:
75
76     PL_sv_arenaroot     pointer to list of SV arenas
77     PL_sv_root          pointer to list of free SV structures
78
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.
82
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.
90
91 The SV arena serves the secondary purpose of allowing still-live SVs
92 to be located and destroyed during final cleanup.
93
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.
99
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.
106
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.
111
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.
115
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]):
121
122     sv_report_used() / do_report_used()
123                         dump all remaining SVs (debugging aid)
124
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()
131                         below.
132
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.
142
143 =head2 Summary
144
145 Private API to rest of sv.c
146
147     new_SV(),  del_SV(),
148
149     new_XIV(), del_XIV(),
150     new_XNV(), del_XNV(),
151     etc
152
153 Public API:
154
155     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
156
157
158 =cut
159
160 ============================================================================ */
161
162
163
164 /*
165  * "A time to plant, and a time to uproot what was planted..."
166  */
167
168
169 #ifdef DEBUG_LEAKING_SCALARS
170 #  ifdef NETWARE
171 #    define FREE_SV_DEBUG_FILE(sv) PerlMemfree((sv)->sv_debug_file)
172 #  else
173 #    define FREE_SV_DEBUG_FILE(sv) PerlMemShared_free((sv)->sv_debug_file)
174 #  endif
175 #else
176 #  define FREE_SV_DEBUG_FILE(sv)
177 #endif
178
179 #define plant_SV(p) \
180     STMT_START {                                        \
181         FREE_SV_DEBUG_FILE(p);                          \
182         SvANY(p) = (void *)PL_sv_root;                  \
183         SvFLAGS(p) = SVTYPEMASK;                        \
184         PL_sv_root = (p);                               \
185         --PL_sv_count;                                  \
186     } STMT_END
187
188 /* sv_mutex must be held while calling uproot_SV() */
189 #define uproot_SV(p) \
190     STMT_START {                                        \
191         (p) = PL_sv_root;                               \
192         PL_sv_root = (SV*)SvANY(p);                     \
193         ++PL_sv_count;                                  \
194     } STMT_END
195
196
197 /* make some more SVs by adding another arena */
198
199 /* sv_mutex must be held while calling more_sv() */
200 STATIC SV*
201 S_more_sv(pTHX)
202 {
203     SV* sv;
204
205     if (PL_nice_chunk) {
206         sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
207         PL_nice_chunk = Nullch;
208         PL_nice_chunk_size = 0;
209     }
210     else {
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);
214     }
215     uproot_SV(sv);
216     return sv;
217 }
218
219 /* new_SV(): return a new, empty SV head */
220
221 #ifdef DEBUG_LEAKING_SCALARS
222 /* provide a real function for a debugger to play with */
223 STATIC SV*
224 S_new_SV(pTHX)
225 {
226     SV* sv;
227
228     LOCK_SV_MUTEX;
229     if (PL_sv_root)
230         uproot_SV(sv);
231     else
232         sv = S_more_sv(aTHX);
233     UNLOCK_SV_MUTEX;
234     SvANY(sv) = 0;
235     SvREFCNT(sv) = 1;
236     SvFLAGS(sv) = 0;
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;
242 #  ifdef NETWARE
243     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
244 #  else
245     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
246 #  endif
247     
248     return sv;
249 }
250 #  define new_SV(p) (p)=S_new_SV(aTHX)
251
252 #else
253 #  define new_SV(p) \
254     STMT_START {                                        \
255         LOCK_SV_MUTEX;                                  \
256         if (PL_sv_root)                                 \
257             uproot_SV(p);                               \
258         else                                            \
259             (p) = S_more_sv(aTHX);                      \
260         UNLOCK_SV_MUTEX;                                \
261         SvANY(p) = 0;                                   \
262         SvREFCNT(p) = 1;                                \
263         SvFLAGS(p) = 0;                                 \
264     } STMT_END
265 #endif
266
267
268 /* del_SV(): return an empty SV head to the free list */
269
270 #ifdef DEBUGGING
271
272 #define del_SV(p) \
273     STMT_START {                                        \
274         LOCK_SV_MUTEX;                                  \
275         if (DEBUG_D_TEST)                               \
276             del_sv(p);                                  \
277         else                                            \
278             plant_SV(p);                                \
279         UNLOCK_SV_MUTEX;                                \
280     } STMT_END
281
282 STATIC void
283 S_del_sv(pTHX_ SV *p)
284 {
285     if (DEBUG_D_TEST) {
286         SV* sva;
287         bool ok = 0;
288         for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
289             SV *sv = sva + 1;
290             SV *svend = &sva[SvREFCNT(sva)];
291             if (p >= sv && p < svend) {
292                 ok = 1;
293                 break;
294             }
295         }
296         if (!ok) {
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);
301             return;
302         }
303     }
304     plant_SV(p);
305 }
306
307 #else /* ! DEBUGGING */
308
309 #define del_SV(p)   plant_SV(p)
310
311 #endif /* DEBUGGING */
312
313
314 /*
315 =head1 SV Manipulation Functions
316
317 =for apidoc sv_add_arena
318
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.
321
322 =cut
323 */
324
325 void
326 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
327 {
328     SV* sva = (SV*)ptr;
329     register SV* sv;
330     register SV* svend;
331
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 */
336
337     PL_sv_arenaroot = sva;
338     PL_sv_root = sva + 1;
339
340     svend = &sva[SvREFCNT(sva) - 1];
341     sv = sva + 1;
342     while (sv < svend) {
343         SvANY(sv) = (void *)(SV*)(sv + 1);
344 #ifdef DEBUGGING
345         SvREFCNT(sv) = 0;
346 #endif
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;
350         sv++;
351     }
352     SvANY(sv) = 0;
353 #ifdef DEBUGGING
354     SvREFCNT(sv) = 0;
355 #endif
356     SvFLAGS(sv) = SVTYPEMASK;
357 }
358
359 /* visit(): call the named function for each non-free SV in the arenas
360  * whose flags field matches the flags/mask args. */
361
362 STATIC I32
363 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
364 {
365     SV* sva;
366     I32 visited = 0;
367
368     for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
369         register SV * const svend = &sva[SvREFCNT(sva)];
370         register SV* sv;
371         for (sv = sva + 1; sv < svend; ++sv) {
372             if (SvTYPE(sv) != SVTYPEMASK
373                     && (sv->sv_flags & mask) == flags
374                     && SvREFCNT(sv))
375             {
376                 (FCALL)(aTHX_ sv);
377                 ++visited;
378             }
379         }
380     }
381     return visited;
382 }
383
384 #ifdef DEBUGGING
385
386 /* called by sv_report_used() for each live SV */
387
388 static void
389 do_report_used(pTHX_ SV *sv)
390 {
391     if (SvTYPE(sv) != SVTYPEMASK) {
392         PerlIO_printf(Perl_debug_log, "****\n");
393         sv_dump(sv);
394     }
395 }
396 #endif
397
398 /*
399 =for apidoc sv_report_used
400
401 Dump the contents of all SVs not yet freed. (Debugging aid).
402
403 =cut
404 */
405
406 void
407 Perl_sv_report_used(pTHX)
408 {
409 #ifdef DEBUGGING
410     visit(do_report_used, 0, 0);
411 #endif
412 }
413
414 /* called by sv_clean_objs() for each live SV */
415
416 static void
417 do_clean_objs(pTHX_ SV *sv)
418 {
419     SV* rv;
420
421     if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
422         DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
423         if (SvWEAKREF(sv)) {
424             sv_del_backref(sv);
425             SvWEAKREF_off(sv);
426             SvRV_set(sv, NULL);
427         } else {
428             SvROK_off(sv);
429             SvRV_set(sv, NULL);
430             SvREFCNT_dec(rv);
431         }
432     }
433
434     /* XXX Might want to check arrays, etc. */
435 }
436
437 /* called by sv_clean_objs() for each live SV */
438
439 #ifndef DISABLE_DESTRUCTOR_KLUDGE
440 static void
441 do_clean_named_objs(pTHX_ SV *sv)
442 {
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))) )
449         {
450             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
451             SvFLAGS(sv) |= SVf_BREAK;
452             SvREFCNT_dec(sv);
453         }
454     }
455 }
456 #endif
457
458 /*
459 =for apidoc sv_clean_objs
460
461 Attempt to destroy all objects not yet freed
462
463 =cut
464 */
465
466 void
467 Perl_sv_clean_objs(pTHX)
468 {
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);
474 #endif
475     PL_in_clean_objs = FALSE;
476 }
477
478 /* called by sv_clean_all() for each live SV */
479
480 static void
481 do_clean_all(pTHX_ SV *sv)
482 {
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) {
486         PL_comppad = Nullav;
487         PL_curpad = Null(SV**);
488     }
489     SvREFCNT_dec(sv);
490 }
491
492 /*
493 =for apidoc sv_clean_all
494
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.
498
499 =cut
500 */
501
502 I32
503 Perl_sv_clean_all(pTHX)
504 {
505     I32 cleaned;
506     PL_in_clean_all = TRUE;
507     cleaned = visit(do_clean_all, 0,0);
508     PL_in_clean_all = FALSE;
509     return cleaned;
510 }
511
512 /*
513 =for apidoc sv_free_arenas
514
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.
517
518 =cut
519 */
520
521 void
522 Perl_sv_free_arenas(pTHX)
523 {
524     SV* sva;
525     SV* svanext;
526     void *arena, *arenanext;
527
528     /* Free arenas here, but be careful about fake ones.  (We assume
529        contiguity of the fake ones with the corresponding real ones.) */
530
531     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
532         svanext = (SV*) SvANY(sva);
533         while (svanext && SvFAKE(svanext))
534             svanext = (SV*) SvANY(svanext);
535
536         if (!SvFAKE(sva))
537             Safefree(sva);
538     }
539
540     for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
541         arenanext = *(void **)arena;
542         Safefree(arena);
543     }
544     PL_xnv_arenaroot = 0;
545     PL_xnv_root = 0;
546
547     for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
548         arenanext = *(void **)arena;
549         Safefree(arena);
550     }
551     PL_xpv_arenaroot = 0;
552     PL_xpv_root = 0;
553
554     for (arena = PL_xpviv_arenaroot; arena; arena = arenanext) {
555         arenanext = *(void **)arena;
556         Safefree(arena);
557     }
558     PL_xpviv_arenaroot = 0;
559     PL_xpviv_root = 0;
560
561     for (arena = PL_xpvnv_arenaroot; arena; arena = arenanext) {
562         arenanext = *(void **)arena;
563         Safefree(arena);
564     }
565     PL_xpvnv_arenaroot = 0;
566     PL_xpvnv_root = 0;
567
568     for (arena = PL_xpvcv_arenaroot; arena; arena = arenanext) {
569         arenanext = *(void **)arena;
570         Safefree(arena);
571     }
572     PL_xpvcv_arenaroot = 0;
573     PL_xpvcv_root = 0;
574
575     for (arena = PL_xpvav_arenaroot; arena; arena = arenanext) {
576         arenanext = *(void **)arena;
577         Safefree(arena);
578     }
579     PL_xpvav_arenaroot = 0;
580     PL_xpvav_root = 0;
581
582     for (arena = PL_xpvhv_arenaroot; arena; arena = arenanext) {
583         arenanext = *(void **)arena;
584         Safefree(arena);
585     }
586     PL_xpvhv_arenaroot = 0;
587     PL_xpvhv_root = 0;
588
589     for (arena = PL_xpvmg_arenaroot; arena; arena = arenanext) {
590         arenanext = *(void **)arena;
591         Safefree(arena);
592     }
593     PL_xpvmg_arenaroot = 0;
594     PL_xpvmg_root = 0;
595
596     for (arena = PL_xpvgv_arenaroot; arena; arena = arenanext) {
597         arenanext = *(void **)arena;
598         Safefree(arena);
599     }
600     PL_xpvgv_arenaroot = 0;
601     PL_xpvgv_root = 0;
602
603     for (arena = PL_xpvlv_arenaroot; arena; arena = arenanext) {
604         arenanext = *(void **)arena;
605         Safefree(arena);
606     }
607     PL_xpvlv_arenaroot = 0;
608     PL_xpvlv_root = 0;
609
610     for (arena = PL_xpvbm_arenaroot; arena; arena = arenanext) {
611         arenanext = *(void **)arena;
612         Safefree(arena);
613     }
614     PL_xpvbm_arenaroot = 0;
615     PL_xpvbm_root = 0;
616
617     {
618         HE *he;
619         HE *he_next;
620         for (he = PL_he_arenaroot; he; he = he_next) {
621             he_next = HeNEXT(he);
622             Safefree(he);
623         }
624     }
625     PL_he_arenaroot = 0;
626     PL_he_root = 0;
627
628 #if defined(USE_ITHREADS)
629     {
630         struct ptr_tbl_ent *pte;
631         struct ptr_tbl_ent *pte_next;
632         for (pte = PL_pte_arenaroot; pte; pte = pte_next) {
633             pte_next = pte->next;
634             Safefree(pte);
635         }
636     }
637     PL_pte_arenaroot = 0;
638     PL_pte_root = 0;
639 #endif
640
641     if (PL_nice_chunk)
642         Safefree(PL_nice_chunk);
643     PL_nice_chunk = Nullch;
644     PL_nice_chunk_size = 0;
645     PL_sv_arenaroot = 0;
646     PL_sv_root = 0;
647 }
648
649 /* ---------------------------------------------------------------------
650  *
651  * support functions for report_uninit()
652  */
653
654 /* the maxiumum size of array or hash where we will scan looking
655  * for the undefined element that triggered the warning */
656
657 #define FUV_MAX_SEARCH_SIZE 1000
658
659 /* Look for an entry in the hash whose value has the same SV as val;
660  * If so, return a mortal copy of the key. */
661
662 STATIC SV*
663 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
664 {
665     dVAR;
666     register HE **array;
667     I32 i;
668
669     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
670                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
671         return Nullsv;
672
673     array = HvARRAY(hv);
674
675     for (i=HvMAX(hv); i>0; i--) {
676         register HE *entry;
677         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
678             if (HeVAL(entry) != val)
679                 continue;
680             if (    HeVAL(entry) == &PL_sv_undef ||
681                     HeVAL(entry) == &PL_sv_placeholder)
682                 continue;
683             if (!HeKEY(entry))
684                 return Nullsv;
685             if (HeKLEN(entry) == HEf_SVKEY)
686                 return sv_mortalcopy(HeKEY_sv(entry));
687             return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
688         }
689     }
690     return Nullsv;
691 }
692
693 /* Look for an entry in the array whose value has the same SV as val;
694  * If so, return the index, otherwise return -1. */
695
696 STATIC I32
697 S_find_array_subscript(pTHX_ AV *av, SV* val)
698 {
699     SV** svp;
700     I32 i;
701     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
702                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
703         return -1;
704
705     svp = AvARRAY(av);
706     for (i=AvFILLp(av); i>=0; i--) {
707         if (svp[i] == val && svp[i] != &PL_sv_undef)
708             return i;
709     }
710     return -1;
711 }
712
713 /* S_varname(): return the name of a variable, optionally with a subscript.
714  * If gv is non-zero, use the name of that global, along with gvtype (one
715  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
716  * targ.  Depending on the value of the subscript_type flag, return:
717  */
718
719 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
720 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
721 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
722 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
723
724 STATIC SV*
725 S_varname(pTHX_ GV *gv, const char *gvtype, PADOFFSET targ,
726         SV* keyname, I32 aindex, int subscript_type)
727 {
728     AV *av;
729     SV *sv;
730
731     SV * const name = sv_newmortal();
732     if (gv) {
733
734         /* simulate gv_fullname4(), but add literal '^' for $^FOO names
735          * XXX get rid of all this if gv_fullnameX() ever supports this
736          * directly */
737
738         const char *p;
739         HV *hv = GvSTASH(gv);
740         sv_setpv(name, gvtype);
741         if (!hv)
742             p = "???";
743         else if (!(p=HvNAME_get(hv)))
744             p = "__ANON__";
745         if (strNE(p, "main")) {
746             sv_catpv(name,p);
747             sv_catpvn(name,"::", 2);
748         }
749         if (GvNAMELEN(gv)>= 1 &&
750             ((unsigned int)*GvNAME(gv)) <= 26)
751         { /* handle $^FOO */
752             Perl_sv_catpvf(aTHX_ name,"^%c", *GvNAME(gv) + 'A' - 1);
753             sv_catpvn(name,GvNAME(gv)+1,GvNAMELEN(gv)-1);
754         }
755         else
756             sv_catpvn(name,GvNAME(gv),GvNAMELEN(gv));
757     }
758     else {
759         U32 u;
760         CV *cv = find_runcv(&u);
761         if (!cv || !CvPADLIST(cv))
762             return Nullsv;;
763         av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
764         sv = *av_fetch(av, targ, FALSE);
765         /* SvLEN in a pad name is not to be trusted */
766         sv_setpv(name, SvPV_nolen_const(sv));
767     }
768
769     if (subscript_type == FUV_SUBSCRIPT_HASH) {
770         *SvPVX(name) = '$';
771         sv = NEWSV(0,0);
772         Perl_sv_catpvf(aTHX_ name, "{%s}",
773             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
774         SvREFCNT_dec(sv);
775     }
776     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
777         *SvPVX(name) = '$';
778         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
779     }
780     else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
781         sv_insert(name, 0, 0,  "within ", 7);
782
783     return name;
784 }
785
786
787 /*
788 =for apidoc find_uninit_var
789
790 Find the name of the undefined variable (if any) that caused the operator o
791 to issue a "Use of uninitialized value" warning.
792 If match is true, only return a name if it's value matches uninit_sv.
793 So roughly speaking, if a unary operator (such as OP_COS) generates a
794 warning, then following the direct child of the op may yield an
795 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
796 other hand, with OP_ADD there are two branches to follow, so we only print
797 the variable name if we get an exact match.
798
799 The name is returned as a mortal SV.
800
801 Assumes that PL_op is the op that originally triggered the error, and that
802 PL_comppad/PL_curpad points to the currently executing pad.
803
804 =cut
805 */
806
807 STATIC SV *
808 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
809 {
810     dVAR;
811     SV *sv;
812     AV *av;
813     SV **svp;
814     GV *gv;
815     OP *o, *o2, *kid;
816
817     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
818                             uninit_sv == &PL_sv_placeholder)))
819         return Nullsv;
820
821     switch (obase->op_type) {
822
823     case OP_RV2AV:
824     case OP_RV2HV:
825     case OP_PADAV:
826     case OP_PADHV:
827       {
828         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
829         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
830         I32 index = 0;
831         SV *keysv = Nullsv;
832         int subscript_type = FUV_SUBSCRIPT_WITHIN;
833
834         if (pad) { /* @lex, %lex */
835             sv = PAD_SVl(obase->op_targ);
836             gv = Nullgv;
837         }
838         else {
839             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
840             /* @global, %global */
841                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
842                 if (!gv)
843                     break;
844                 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
845             }
846             else /* @{expr}, %{expr} */
847                 return find_uninit_var(cUNOPx(obase)->op_first,
848                                                     uninit_sv, match);
849         }
850
851         /* attempt to find a match within the aggregate */
852         if (hash) {
853             keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
854             if (keysv)
855                 subscript_type = FUV_SUBSCRIPT_HASH;
856         }
857         else {
858             index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
859             if (index >= 0)
860                 subscript_type = FUV_SUBSCRIPT_ARRAY;
861         }
862
863         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
864             break;
865
866         return S_varname(aTHX_ gv, hash ? "%" : "@", obase->op_targ,
867                                     keysv, index, subscript_type);
868       }
869
870     case OP_PADSV:
871         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
872             break;
873         return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
874                                     Nullsv, 0, FUV_SUBSCRIPT_NONE);
875
876     case OP_GVSV:
877         gv = cGVOPx_gv(obase);
878         if (!gv || (match && GvSV(gv) != uninit_sv))
879             break;
880         return S_varname(aTHX_ gv, "$", 0, Nullsv, 0, FUV_SUBSCRIPT_NONE);
881
882     case OP_AELEMFAST:
883         if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
884             if (match) {
885                 av = (AV*)PAD_SV(obase->op_targ);
886                 if (!av || SvRMAGICAL(av))
887                     break;
888                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
889                 if (!svp || *svp != uninit_sv)
890                     break;
891             }
892             return S_varname(aTHX_ Nullgv, "$", obase->op_targ,
893                     Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
894         }
895         else {
896             gv = cGVOPx_gv(obase);
897             if (!gv)
898                 break;
899             if (match) {
900                 av = GvAV(gv);
901                 if (!av || SvRMAGICAL(av))
902                     break;
903                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
904                 if (!svp || *svp != uninit_sv)
905                     break;
906             }
907             return S_varname(aTHX_ gv, "$", 0,
908                     Nullsv, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
909         }
910         break;
911
912     case OP_EXISTS:
913         o = cUNOPx(obase)->op_first;
914         if (!o || o->op_type != OP_NULL ||
915                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
916             break;
917         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
918
919     case OP_AELEM:
920     case OP_HELEM:
921         if (PL_op == obase)
922             /* $a[uninit_expr] or $h{uninit_expr} */
923             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
924
925         gv = Nullgv;
926         o = cBINOPx(obase)->op_first;
927         kid = cBINOPx(obase)->op_last;
928
929         /* get the av or hv, and optionally the gv */
930         sv = Nullsv;
931         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
932             sv = PAD_SV(o->op_targ);
933         }
934         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
935                 && cUNOPo->op_first->op_type == OP_GV)
936         {
937             gv = cGVOPx_gv(cUNOPo->op_first);
938             if (!gv)
939                 break;
940             sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
941         }
942         if (!sv)
943             break;
944
945         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
946             /* index is constant */
947             if (match) {
948                 if (SvMAGICAL(sv))
949                     break;
950                 if (obase->op_type == OP_HELEM) {
951                     HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
952                     if (!he || HeVAL(he) != uninit_sv)
953                         break;
954                 }
955                 else {
956                     svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
957                     if (!svp || *svp != uninit_sv)
958                         break;
959                 }
960             }
961             if (obase->op_type == OP_HELEM)
962                 return S_varname(aTHX_ gv, "%", o->op_targ,
963                             cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
964             else
965                 return S_varname(aTHX_ gv, "@", o->op_targ, Nullsv,
966                             SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
967             ;
968         }
969         else  {
970             /* index is an expression;
971              * attempt to find a match within the aggregate */
972             if (obase->op_type == OP_HELEM) {
973                 SV *keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
974                 if (keysv)
975                     return S_varname(aTHX_ gv, "%", o->op_targ,
976                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
977             }
978             else {
979                 const I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
980                 if (index >= 0)
981                     return S_varname(aTHX_ gv, "@", o->op_targ,
982                                         Nullsv, index, FUV_SUBSCRIPT_ARRAY);
983             }
984             if (match)
985                 break;
986             return S_varname(aTHX_ gv,
987                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
988                 ? "@" : "%",
989                 o->op_targ, Nullsv, 0, FUV_SUBSCRIPT_WITHIN);
990         }
991
992         break;
993
994     case OP_AASSIGN:
995         /* only examine RHS */
996         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
997
998     case OP_OPEN:
999         o = cUNOPx(obase)->op_first;
1000         if (o->op_type == OP_PUSHMARK)
1001             o = o->op_sibling;
1002
1003         if (!o->op_sibling) {
1004             /* one-arg version of open is highly magical */
1005
1006             if (o->op_type == OP_GV) { /* open FOO; */
1007                 gv = cGVOPx_gv(o);
1008                 if (match && GvSV(gv) != uninit_sv)
1009                     break;
1010                 return S_varname(aTHX_ gv, "$", 0,
1011                             Nullsv, 0, FUV_SUBSCRIPT_NONE);
1012             }
1013             /* other possibilities not handled are:
1014              * open $x; or open my $x;  should return '${*$x}'
1015              * open expr;               should return '$'.expr ideally
1016              */
1017              break;
1018         }
1019         goto do_op;
1020
1021     /* ops where $_ may be an implicit arg */
1022     case OP_TRANS:
1023     case OP_SUBST:
1024     case OP_MATCH:
1025         if ( !(obase->op_flags & OPf_STACKED)) {
1026             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
1027                                  ? PAD_SVl(obase->op_targ)
1028                                  : DEFSV))
1029             {
1030                 sv = sv_newmortal();
1031                 sv_setpvn(sv, "$_", 2);
1032                 return sv;
1033             }
1034         }
1035         goto do_op;
1036
1037     case OP_PRTF:
1038     case OP_PRINT:
1039         /* skip filehandle as it can't produce 'undef' warning  */
1040         o = cUNOPx(obase)->op_first;
1041         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
1042             o = o->op_sibling->op_sibling;
1043         goto do_op2;
1044
1045
1046     case OP_RV2SV:
1047     case OP_CUSTOM:
1048     case OP_ENTERSUB:
1049         match = 1; /* XS or custom code could trigger random warnings */
1050         goto do_op;
1051
1052     case OP_SCHOMP:
1053     case OP_CHOMP:
1054         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
1055             return sv_2mortal(newSVpv("${$/}", 0));
1056         /* FALL THROUGH */
1057
1058     default:
1059     do_op:
1060         if (!(obase->op_flags & OPf_KIDS))
1061             break;
1062         o = cUNOPx(obase)->op_first;
1063         
1064     do_op2:
1065         if (!o)
1066             break;
1067
1068         /* if all except one arg are constant, or have no side-effects,
1069          * or are optimized away, then it's unambiguous */
1070         o2 = Nullop;
1071         for (kid=o; kid; kid = kid->op_sibling) {
1072             if (kid &&
1073                 (    (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
1074                   || (kid->op_type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
1075                   || (kid->op_type == OP_PUSHMARK)
1076                 )
1077             )
1078                 continue;
1079             if (o2) { /* more than one found */
1080                 o2 = Nullop;
1081                 break;
1082             }
1083             o2 = kid;
1084         }
1085         if (o2)
1086             return find_uninit_var(o2, uninit_sv, match);
1087
1088         /* scan all args */
1089         while (o) {
1090             sv = find_uninit_var(o, uninit_sv, 1);
1091             if (sv)
1092                 return sv;
1093             o = o->op_sibling;
1094         }
1095         break;
1096     }
1097     return Nullsv;
1098 }
1099
1100
1101 /*
1102 =for apidoc report_uninit
1103
1104 Print appropriate "Use of uninitialized variable" warning
1105
1106 =cut
1107 */
1108
1109 void
1110 Perl_report_uninit(pTHX_ SV* uninit_sv)
1111 {
1112     if (PL_op) {
1113         SV* varname = Nullsv;
1114         if (uninit_sv) {
1115             varname = find_uninit_var(PL_op, uninit_sv,0);
1116             if (varname)
1117                 sv_insert(varname, 0, 0, " ", 1);
1118         }
1119         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1120                 varname ? SvPV_nolen_const(varname) : "",
1121                 " in ", OP_DESC(PL_op));
1122     }
1123     else
1124         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
1125                     "", "", "");
1126 }
1127
1128 STATIC void *
1129 S_more_bodies (pTHX_ void **arena_root, void **root, size_t size)
1130 {
1131     char *start;
1132     const char *end;
1133     size_t count = PERL_ARENA_SIZE/size;
1134     New(0, start, count*size, char);
1135     *((void **) start) = *arena_root;
1136     *arena_root = (void *)start;
1137
1138     end = start + (count-1) * size;
1139
1140     /* The initial slot is used to link the arenas together, so it isn't to be
1141        linked into the list of ready-to-use bodies.  */
1142
1143     start += size;
1144
1145     *root = (void *)start;
1146
1147     while (start < end) {
1148         char *next = start + size;
1149         *(void**) start = (void *)next;
1150         start = next;
1151     }
1152     *(void **)start = 0;
1153
1154     return *root;
1155 }
1156
1157 #define more_thingy(TYPE,lctype)                                \
1158     S_more_bodies(aTHX_ (void**)&PL_## lctype ## _arenaroot,    \
1159                   (void**)&PL_ ## lctype ## _root,              \
1160                   sizeof(TYPE))
1161
1162 #define more_thingy_allocated(lctype)                           \
1163     S_more_bodies(aTHX_ (void**)&PL_## lctype ## _arenaroot,    \
1164                   (void**)&PL_ ## lctype ## _root,              \
1165                   sizeof(lctype ## _allocated))
1166
1167
1168 #define more_xnv()      more_thingy(NV, xnv)
1169 #define more_xpv()      more_thingy_allocated(xpv)
1170 #define more_xpviv()    more_thingy_allocated(xpviv)
1171 #define more_xpvnv()    more_thingy(XPVNV, xpvnv)
1172 #define more_xpvcv()    more_thingy(XPVCV, xpvcv)
1173 #define more_xpvav()    more_thingy_allocated(xpvav)
1174 #define more_xpvhv()    more_thingy_allocated(xpvhv)
1175 #define more_xpvgv()    more_thingy(XPVGV, xpvgv)
1176 #define more_xpvmg()    more_thingy(XPVMG, xpvmg)
1177 #define more_xpvbm()    more_thingy(XPVBM, xpvbm)
1178 #define more_xpvlv()    more_thingy(XPVLV, xpvlv)
1179
1180
1181 /* grab a new NV body from the free list, allocating more if necessary */
1182
1183 STATIC XPVNV*
1184 S_new_xnv(pTHX)
1185 {
1186     NV* xnv;
1187     LOCK_SV_MUTEX;
1188     xnv = PL_xnv_root ? PL_xnv_root : more_xnv();
1189     PL_xnv_root = *(NV**)xnv;
1190     UNLOCK_SV_MUTEX;
1191     return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
1192 }
1193
1194 /* return an NV body to the free list */
1195
1196 STATIC void
1197 S_del_xnv(pTHX_ XPVNV *p)
1198 {
1199     NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
1200     LOCK_SV_MUTEX;
1201     *(NV**)xnv = PL_xnv_root;
1202     PL_xnv_root = xnv;
1203     UNLOCK_SV_MUTEX;
1204 }
1205
1206 /* grab a new struct xpv from the free list, allocating more if necessary */
1207
1208 STATIC XPV*
1209 S_new_xpv(pTHX)
1210 {
1211     xpv_allocated* xpv;
1212     LOCK_SV_MUTEX;
1213     xpv = PL_xpv_root ? PL_xpv_root : more_xpv();
1214     PL_xpv_root = *(xpv_allocated**)xpv;
1215     UNLOCK_SV_MUTEX;
1216     /* If xpv_allocated is the same structure as XPV then the two OFFSETs
1217        sum to zero, and the pointer is unchanged. If the allocated structure
1218        is smaller (no initial IV actually allocated) then the net effect is
1219        to subtract the size of the IV from the pointer, to return a new pointer
1220        as if an initial IV were actually allocated.  */
1221     return (XPV*)((char*)xpv - STRUCT_OFFSET(XPV, xpv_cur)
1222                   + STRUCT_OFFSET(xpv_allocated, xpv_cur));
1223 }
1224
1225 /* return a struct xpv to the free list */
1226
1227 STATIC void
1228 S_del_xpv(pTHX_ XPV *p)
1229 {
1230     xpv_allocated* xpv
1231         = (xpv_allocated*)((char*)(p) + STRUCT_OFFSET(XPV, xpv_cur)
1232                            - STRUCT_OFFSET(xpv_allocated, xpv_cur));
1233     LOCK_SV_MUTEX;
1234     *(xpv_allocated**)xpv = PL_xpv_root;
1235     PL_xpv_root = xpv;
1236     UNLOCK_SV_MUTEX;
1237 }
1238
1239 /* grab a new struct xpviv from the free list, allocating more if necessary */
1240
1241 STATIC XPVIV*
1242 S_new_xpviv(pTHX)
1243 {
1244     xpviv_allocated* xpviv;
1245     LOCK_SV_MUTEX;
1246     xpviv = PL_xpviv_root ? PL_xpviv_root : more_xpviv();
1247     PL_xpviv_root = *(xpviv_allocated**)xpviv;
1248     UNLOCK_SV_MUTEX;
1249     /* If xpviv_allocated is the same structure as XPVIV then the two OFFSETs
1250        sum to zero, and the pointer is unchanged. If the allocated structure
1251        is smaller (no initial IV actually allocated) then the net effect is
1252        to subtract the size of the IV from the pointer, to return a new pointer
1253        as if an initial IV were actually allocated.  */
1254     return (XPVIV*)((char*)xpviv - STRUCT_OFFSET(XPVIV, xpv_cur)
1255                   + STRUCT_OFFSET(xpviv_allocated, xpv_cur));
1256 }
1257
1258 /* return a struct xpviv to the free list */
1259
1260 STATIC void
1261 S_del_xpviv(pTHX_ XPVIV *p)
1262 {
1263     xpviv_allocated* xpviv
1264         = (xpviv_allocated*)((char*)(p) + STRUCT_OFFSET(XPVIV, xpv_cur)
1265                            - STRUCT_OFFSET(xpviv_allocated, xpv_cur));
1266     LOCK_SV_MUTEX;
1267     *(xpviv_allocated**)xpviv = PL_xpviv_root;
1268     PL_xpviv_root = xpviv;
1269     UNLOCK_SV_MUTEX;
1270 }
1271
1272 /* grab a new struct xpvnv from the free list, allocating more if necessary */
1273
1274 STATIC XPVNV*
1275 S_new_xpvnv(pTHX)
1276 {
1277     XPVNV* xpvnv;
1278     LOCK_SV_MUTEX;
1279     xpvnv = PL_xpvnv_root ? PL_xpvnv_root : more_xpvnv();
1280     PL_xpvnv_root = *(XPVNV**)xpvnv;
1281     UNLOCK_SV_MUTEX;
1282     return xpvnv;
1283 }
1284
1285 /* return a struct xpvnv to the free list */
1286
1287 STATIC void
1288 S_del_xpvnv(pTHX_ XPVNV *p)
1289 {
1290     LOCK_SV_MUTEX;
1291     *(XPVNV**)p = PL_xpvnv_root;
1292     PL_xpvnv_root = p;
1293     UNLOCK_SV_MUTEX;
1294 }
1295
1296 /* grab a new struct xpvcv from the free list, allocating more if necessary */
1297
1298 STATIC XPVCV*
1299 S_new_xpvcv(pTHX)
1300 {
1301     XPVCV* xpvcv;
1302     LOCK_SV_MUTEX;
1303     xpvcv = PL_xpvcv_root ? PL_xpvcv_root : more_xpvcv();
1304     PL_xpvcv_root = *(XPVCV**)xpvcv;
1305     UNLOCK_SV_MUTEX;
1306     return xpvcv;
1307 }
1308
1309 /* return a struct xpvcv to the free list */
1310
1311 STATIC void
1312 S_del_xpvcv(pTHX_ XPVCV *p)
1313 {
1314     LOCK_SV_MUTEX;
1315     *(XPVCV**)p = PL_xpvcv_root;
1316     PL_xpvcv_root = p;
1317     UNLOCK_SV_MUTEX;
1318 }
1319
1320 /* grab a new struct xpvav from the free list, allocating more if necessary */
1321
1322 STATIC XPVAV*
1323 S_new_xpvav(pTHX)
1324 {
1325     xpvav_allocated* xpvav;
1326     LOCK_SV_MUTEX;
1327     xpvav = PL_xpvav_root ? PL_xpvav_root : more_xpvav();
1328     PL_xpvav_root = *(xpvav_allocated**)xpvav;
1329     UNLOCK_SV_MUTEX;
1330     return (XPVAV*)((char*)xpvav - STRUCT_OFFSET(XPVAV, xav_fill)
1331                     + STRUCT_OFFSET(xpvav_allocated, xav_fill));
1332 }
1333
1334 /* return a struct xpvav to the free list */
1335
1336 STATIC void
1337 S_del_xpvav(pTHX_ XPVAV *p)
1338 {
1339     xpvav_allocated* xpvav
1340         = (xpvav_allocated*)((char*)(p) + STRUCT_OFFSET(XPVAV, xav_fill)
1341                              - STRUCT_OFFSET(xpvav_allocated, xav_fill));
1342     LOCK_SV_MUTEX;
1343     *(xpvav_allocated**)xpvav = PL_xpvav_root;
1344     PL_xpvav_root = xpvav;
1345     UNLOCK_SV_MUTEX;
1346 }
1347
1348 /* grab a new struct xpvhv from the free list, allocating more if necessary */
1349
1350 STATIC XPVHV*
1351 S_new_xpvhv(pTHX)
1352 {
1353     xpvhv_allocated* xpvhv;
1354     LOCK_SV_MUTEX;
1355     xpvhv = PL_xpvhv_root ? PL_xpvhv_root : more_xpvhv();
1356     PL_xpvhv_root = *(xpvhv_allocated**)xpvhv;
1357     UNLOCK_SV_MUTEX;
1358     return (XPVHV*)((char*)xpvhv - STRUCT_OFFSET(XPVHV, xhv_fill)
1359                     + STRUCT_OFFSET(xpvhv_allocated, xhv_fill));
1360 }
1361
1362 /* return a struct xpvhv to the free list */
1363
1364 STATIC void
1365 S_del_xpvhv(pTHX_ XPVHV *p)
1366 {
1367     xpvhv_allocated* xpvhv
1368         = (xpvhv_allocated*)((char*)(p) + STRUCT_OFFSET(XPVHV, xhv_fill)
1369                              - STRUCT_OFFSET(xpvhv_allocated, xhv_fill));
1370     LOCK_SV_MUTEX;
1371     *(xpvhv_allocated**)xpvhv = PL_xpvhv_root;
1372     PL_xpvhv_root = xpvhv;
1373     UNLOCK_SV_MUTEX;
1374 }
1375
1376 /* grab a new struct xpvmg from the free list, allocating more if necessary */
1377
1378 STATIC XPVMG*
1379 S_new_xpvmg(pTHX)
1380 {
1381     XPVMG* xpvmg;
1382     LOCK_SV_MUTEX;
1383     xpvmg = PL_xpvmg_root ? PL_xpvmg_root : more_xpvmg();
1384     PL_xpvmg_root = *(XPVMG**)xpvmg;
1385     UNLOCK_SV_MUTEX;
1386     return xpvmg;
1387 }
1388
1389 /* return a struct xpvmg to the free list */
1390
1391 STATIC void
1392 S_del_xpvmg(pTHX_ XPVMG *p)
1393 {
1394     LOCK_SV_MUTEX;
1395     *(XPVMG**)p = PL_xpvmg_root;
1396     PL_xpvmg_root = p;
1397     UNLOCK_SV_MUTEX;
1398 }
1399
1400 /* grab a new struct xpvgv from the free list, allocating more if necessary */
1401
1402 STATIC XPVGV*
1403 S_new_xpvgv(pTHX)
1404 {
1405     XPVGV* xpvgv;
1406     LOCK_SV_MUTEX;
1407     xpvgv = PL_xpvgv_root ? PL_xpvgv_root : more_xpvgv();
1408     PL_xpvgv_root = *(XPVGV**)xpvgv;
1409     UNLOCK_SV_MUTEX;
1410     return xpvgv;
1411 }
1412
1413 /* return a struct xpvgv to the free list */
1414
1415 STATIC void
1416 S_del_xpvgv(pTHX_ XPVGV *p)
1417 {
1418     LOCK_SV_MUTEX;
1419     *(XPVGV**)p = PL_xpvgv_root;
1420     PL_xpvgv_root = p;
1421     UNLOCK_SV_MUTEX;
1422 }
1423
1424 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1425
1426 STATIC XPVLV*
1427 S_new_xpvlv(pTHX)
1428 {
1429     XPVLV* xpvlv;
1430     LOCK_SV_MUTEX;
1431     xpvlv = PL_xpvlv_root ? PL_xpvlv_root : more_xpvlv();
1432     PL_xpvlv_root = *(XPVLV**)xpvlv;
1433     UNLOCK_SV_MUTEX;
1434     return xpvlv;
1435 }
1436
1437 /* return a struct xpvlv to the free list */
1438
1439 STATIC void
1440 S_del_xpvlv(pTHX_ XPVLV *p)
1441 {
1442     LOCK_SV_MUTEX;
1443     *(XPVLV**)p = PL_xpvlv_root;
1444     PL_xpvlv_root = p;
1445     UNLOCK_SV_MUTEX;
1446 }
1447
1448 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1449
1450 STATIC XPVBM*
1451 S_new_xpvbm(pTHX)
1452 {
1453     XPVBM* xpvbm;
1454     LOCK_SV_MUTEX;
1455     xpvbm = PL_xpvbm_root ? PL_xpvbm_root : more_xpvbm();
1456     PL_xpvbm_root = *(XPVBM**)xpvbm;
1457     UNLOCK_SV_MUTEX;
1458     return xpvbm;
1459 }
1460
1461 /* return a struct xpvbm to the free list */
1462
1463 STATIC void
1464 S_del_xpvbm(pTHX_ XPVBM *p)
1465 {
1466     LOCK_SV_MUTEX;
1467     *(XPVBM**)p = PL_xpvbm_root;
1468     PL_xpvbm_root = p;
1469     UNLOCK_SV_MUTEX;
1470 }
1471
1472 #define my_safemalloc(s)        (void*)safemalloc(s)
1473 #define my_safefree(p)  safefree((char*)p)
1474
1475 #ifdef PURIFY
1476
1477 #define new_XNV()       my_safemalloc(sizeof(XPVNV))
1478 #define del_XNV(p)      my_safefree(p)
1479
1480 #define new_XPV()       my_safemalloc(sizeof(XPV))
1481 #define del_XPV(p)      my_safefree(p)
1482
1483 #define new_XPVIV()     my_safemalloc(sizeof(XPVIV))
1484 #define del_XPVIV(p)    my_safefree(p)
1485
1486 #define new_XPVNV()     my_safemalloc(sizeof(XPVNV))
1487 #define del_XPVNV(p)    my_safefree(p)
1488
1489 #define new_XPVCV()     my_safemalloc(sizeof(XPVCV))
1490 #define del_XPVCV(p)    my_safefree(p)
1491
1492 #define new_XPVAV()     my_safemalloc(sizeof(XPVAV))
1493 #define del_XPVAV(p)    my_safefree(p)
1494
1495 #define new_XPVHV()     my_safemalloc(sizeof(XPVHV))
1496 #define del_XPVHV(p)    my_safefree(p)
1497
1498 #define new_XPVMG()     my_safemalloc(sizeof(XPVMG))
1499 #define del_XPVMG(p)    my_safefree(p)
1500
1501 #define new_XPVGV()     my_safemalloc(sizeof(XPVGV))
1502 #define del_XPVGV(p)    my_safefree(p)
1503
1504 #define new_XPVLV()     my_safemalloc(sizeof(XPVLV))
1505 #define del_XPVLV(p)    my_safefree(p)
1506
1507 #define new_XPVBM()     my_safemalloc(sizeof(XPVBM))
1508 #define del_XPVBM(p)    my_safefree(p)
1509
1510 #else /* !PURIFY */
1511
1512 #define new_XNV()       (void*)new_xnv()
1513 #define del_XNV(p)      del_xnv((XPVNV*) p)
1514
1515 #define new_XPV()       (void*)new_xpv()
1516 #define del_XPV(p)      del_xpv((XPV *)p)
1517
1518 #define new_XPVIV()     (void*)new_xpviv()
1519 #define del_XPVIV(p)    del_xpviv((XPVIV *)p)
1520
1521 #define new_XPVNV()     (void*)new_xpvnv()
1522 #define del_XPVNV(p)    del_xpvnv((XPVNV *)p)
1523
1524 #define new_XPVCV()     (void*)new_xpvcv()
1525 #define del_XPVCV(p)    del_xpvcv((XPVCV *)p)
1526
1527 #define new_XPVAV()     (void*)new_xpvav()
1528 #define del_XPVAV(p)    del_xpvav((XPVAV *)p)
1529
1530 #define new_XPVHV()     (void*)new_xpvhv()
1531 #define del_XPVHV(p)    del_xpvhv((XPVHV *)p)
1532
1533 #define new_XPVMG()     (void*)new_xpvmg()
1534 #define del_XPVMG(p)    del_xpvmg((XPVMG *)p)
1535
1536 #define new_XPVGV()     (void*)new_xpvgv()
1537 #define del_XPVGV(p)    del_xpvgv((XPVGV *)p)
1538
1539 #define new_XPVLV()     (void*)new_xpvlv()
1540 #define del_XPVLV(p)    del_xpvlv((XPVLV *)p)
1541
1542 #define new_XPVBM()     (void*)new_xpvbm()
1543 #define del_XPVBM(p)    del_xpvbm((XPVBM *)p)
1544
1545 #endif /* PURIFY */
1546
1547 #define new_XPVFM()     my_safemalloc(sizeof(XPVFM))
1548 #define del_XPVFM(p)    my_safefree(p)
1549
1550 #define new_XPVIO()     my_safemalloc(sizeof(XPVIO))
1551 #define del_XPVIO(p)    my_safefree(p)
1552
1553 /*
1554 =for apidoc sv_upgrade
1555
1556 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1557 SV, then copies across as much information as possible from the old body.
1558 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1559
1560 =cut
1561 */
1562
1563 void
1564 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1565 {
1566
1567     char*       pv;
1568     U32         cur;
1569     U32         len;
1570     IV          iv;
1571     NV          nv;
1572     MAGIC*      magic;
1573     HV*         stash;
1574
1575     if (mt != SVt_PV && SvIsCOW(sv)) {
1576         sv_force_normal_flags(sv, 0);
1577     }
1578
1579     if (SvTYPE(sv) == mt)
1580         return;
1581
1582     pv = NULL;
1583     cur = 0;
1584     len = 0;
1585     iv = 0;
1586     nv = 0.0;
1587     magic = NULL;
1588     stash = Nullhv;
1589
1590     switch (SvTYPE(sv)) {
1591     case SVt_NULL:
1592         break;
1593     case SVt_IV:
1594         iv      = SvIVX(sv);
1595         if (mt == SVt_NV)
1596             mt = SVt_PVNV;
1597         else if (mt < SVt_PVIV)
1598             mt = SVt_PVIV;
1599         break;
1600     case SVt_NV:
1601         nv      = SvNVX(sv);
1602         del_XNV(SvANY(sv));
1603         if (mt < SVt_PVNV)
1604             mt = SVt_PVNV;
1605         break;
1606     case SVt_RV:
1607         pv      = (char*)SvRV(sv);
1608         break;
1609     case SVt_PV:
1610         pv      = SvPVX_mutable(sv);
1611         cur     = SvCUR(sv);
1612         len     = SvLEN(sv);
1613         del_XPV(SvANY(sv));
1614         if (mt <= SVt_IV)
1615             mt = SVt_PVIV;
1616         else if (mt == SVt_NV)
1617             mt = SVt_PVNV;
1618         break;
1619     case SVt_PVIV:
1620         pv      = SvPVX_mutable(sv);
1621         cur     = SvCUR(sv);
1622         len     = SvLEN(sv);
1623         iv      = SvIVX(sv);
1624         del_XPVIV(SvANY(sv));
1625         break;
1626     case SVt_PVNV:
1627         pv      = SvPVX_mutable(sv);
1628         cur     = SvCUR(sv);
1629         len     = SvLEN(sv);
1630         iv      = SvIVX(sv);
1631         nv      = SvNVX(sv);
1632         del_XPVNV(SvANY(sv));
1633         break;
1634     case SVt_PVMG:
1635         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1636            there's no way that it can be safely upgraded, because perl.c
1637            expects to Safefree(SvANY(PL_mess_sv))  */
1638         assert(sv != PL_mess_sv);
1639         /* This flag bit is used to mean other things in other scalar types.
1640            Given that it only has meaning inside the pad, it shouldn't be set
1641            on anything that can get upgraded.  */
1642         assert((SvFLAGS(sv) & SVpad_TYPED) == 0);
1643         pv      = SvPVX_mutable(sv);
1644         cur     = SvCUR(sv);
1645         len     = SvLEN(sv);
1646         iv      = SvIVX(sv);
1647         nv      = SvNVX(sv);
1648         magic   = SvMAGIC(sv);
1649         stash   = SvSTASH(sv);
1650         del_XPVMG(SvANY(sv));
1651         break;
1652     default:
1653         Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1654     }
1655
1656     SvFLAGS(sv) &= ~SVTYPEMASK;
1657     SvFLAGS(sv) |= mt;
1658
1659     switch (mt) {
1660     case SVt_NULL:
1661         Perl_croak(aTHX_ "Can't upgrade to undef");
1662     case SVt_IV:
1663         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1664         SvIV_set(sv, iv);
1665         break;
1666     case SVt_NV:
1667         SvANY(sv) = new_XNV();
1668         SvNV_set(sv, nv);
1669         break;
1670     case SVt_RV:
1671         SvANY(sv) = &sv->sv_u.svu_rv;
1672         SvRV_set(sv, (SV*)pv);
1673         break;
1674     case SVt_PVHV:
1675         SvANY(sv) = new_XPVHV();
1676         HvFILL(sv)      = 0;
1677         HvMAX(sv)       = 0;
1678         HvTOTALKEYS(sv) = 0;
1679
1680         /* Fall through...  */
1681         if (0) {
1682         case SVt_PVAV:
1683             SvANY(sv) = new_XPVAV();
1684             AvMAX(sv)   = -1;
1685             AvFILLp(sv) = -1;
1686             AvALLOC(sv) = 0;
1687             AvREAL_only(sv);
1688         }
1689         /* to here.  */
1690         /* XXX? Only SVt_NULL is ever upgraded to AV or HV?  */
1691         assert(!pv);
1692         /* FIXME. Should be able to remove all this if()... if the above
1693            assertion is genuinely always true.  */
1694         if(SvOOK(sv)) {
1695             pv -= iv;
1696             SvFLAGS(sv) &= ~SVf_OOK;
1697         }
1698         Safefree(pv);
1699         SvPV_set(sv, (char*)0);
1700         SvMAGIC_set(sv, magic);
1701         SvSTASH_set(sv, stash);
1702         break;
1703
1704     case SVt_PVIO:
1705         SvANY(sv) = new_XPVIO();
1706         Zero(SvANY(sv), 1, XPVIO);
1707         IoPAGE_LEN(sv)  = 60;
1708         goto set_magic_common;
1709     case SVt_PVFM:
1710         SvANY(sv) = new_XPVFM();
1711         Zero(SvANY(sv), 1, XPVFM);
1712         goto set_magic_common;
1713     case SVt_PVBM:
1714         SvANY(sv) = new_XPVBM();
1715         BmRARE(sv)      = 0;
1716         BmUSEFUL(sv)    = 0;
1717         BmPREVIOUS(sv)  = 0;
1718         goto set_magic_common;
1719     case SVt_PVGV:
1720         SvANY(sv) = new_XPVGV();
1721         GvGP(sv)        = 0;
1722         GvNAME(sv)      = 0;
1723         GvNAMELEN(sv)   = 0;
1724         GvSTASH(sv)     = 0;
1725         GvFLAGS(sv)     = 0;
1726         goto set_magic_common;
1727     case SVt_PVCV:
1728         SvANY(sv) = new_XPVCV();
1729         Zero(SvANY(sv), 1, XPVCV);
1730         goto set_magic_common;
1731     case SVt_PVLV:
1732         SvANY(sv) = new_XPVLV();
1733         LvTARGOFF(sv)   = 0;
1734         LvTARGLEN(sv)   = 0;
1735         LvTARG(sv)      = 0;
1736         LvTYPE(sv)      = 0;
1737         GvGP(sv)        = 0;
1738         GvNAME(sv)      = 0;
1739         GvNAMELEN(sv)   = 0;
1740         GvSTASH(sv)     = 0;
1741         GvFLAGS(sv)     = 0;
1742         /* Fall through.  */
1743         if (0) {
1744         case SVt_PVMG:
1745             SvANY(sv) = new_XPVMG();
1746         }
1747     set_magic_common:
1748         SvMAGIC_set(sv, magic);
1749         SvSTASH_set(sv, stash);
1750         /* Fall through.  */
1751         if (0) {
1752         case SVt_PVNV:
1753             SvANY(sv) = new_XPVNV();
1754         }
1755         SvNV_set(sv, nv);
1756         /* Fall through.  */
1757         if (0) {
1758         case SVt_PVIV:
1759             SvANY(sv) = new_XPVIV();
1760             if (SvNIOK(sv))
1761                 (void)SvIOK_on(sv);
1762             SvNOK_off(sv);
1763         }
1764         SvIV_set(sv, iv);
1765         /* Fall through.  */
1766         if (0) {
1767         case SVt_PV:
1768             SvANY(sv) = new_XPV();
1769         }
1770         SvPV_set(sv, pv);
1771         SvCUR_set(sv, cur);
1772         SvLEN_set(sv, len);
1773         break;
1774     }
1775 }
1776
1777 /*
1778 =for apidoc sv_backoff
1779
1780 Remove any string offset. You should normally use the C<SvOOK_off> macro
1781 wrapper instead.
1782
1783 =cut
1784 */
1785
1786 int
1787 Perl_sv_backoff(pTHX_ register SV *sv)
1788 {
1789     assert(SvOOK(sv));
1790     assert(SvTYPE(sv) != SVt_PVHV);
1791     assert(SvTYPE(sv) != SVt_PVAV);
1792     if (SvIVX(sv)) {
1793         const char *s = SvPVX_const(sv);
1794         SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1795         SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1796         SvIV_set(sv, 0);
1797         Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1798     }
1799     SvFLAGS(sv) &= ~SVf_OOK;
1800     return 0;
1801 }
1802
1803 /*
1804 =for apidoc sv_grow
1805
1806 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1807 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1808 Use the C<SvGROW> wrapper instead.
1809
1810 =cut
1811 */
1812
1813 char *
1814 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1815 {
1816     register char *s;
1817
1818 #ifdef HAS_64K_LIMIT
1819     if (newlen >= 0x10000) {
1820         PerlIO_printf(Perl_debug_log,
1821                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1822         my_exit(1);
1823     }
1824 #endif /* HAS_64K_LIMIT */
1825     if (SvROK(sv))
1826         sv_unref(sv);
1827     if (SvTYPE(sv) < SVt_PV) {
1828         sv_upgrade(sv, SVt_PV);
1829         s = SvPVX_mutable(sv);
1830     }
1831     else if (SvOOK(sv)) {       /* pv is offset? */
1832         sv_backoff(sv);
1833         s = SvPVX_mutable(sv);
1834         if (newlen > SvLEN(sv))
1835             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1836 #ifdef HAS_64K_LIMIT
1837         if (newlen >= 0x10000)
1838             newlen = 0xFFFF;
1839 #endif
1840     }
1841     else
1842         s = SvPVX_mutable(sv);
1843
1844     if (newlen > SvLEN(sv)) {           /* need more room? */
1845         newlen = PERL_STRLEN_ROUNDUP(newlen);
1846         if (SvLEN(sv) && s) {
1847 #ifdef MYMALLOC
1848             const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1849             if (newlen <= l) {
1850                 SvLEN_set(sv, l);
1851                 return s;
1852             } else
1853 #endif
1854             s = saferealloc(s, newlen);
1855         }
1856         else {
1857             s = safemalloc(newlen);
1858             if (SvPVX_const(sv) && SvCUR(sv)) {
1859                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1860             }
1861         }
1862         SvPV_set(sv, s);
1863         SvLEN_set(sv, newlen);
1864     }
1865     return s;
1866 }
1867
1868 /*
1869 =for apidoc sv_setiv
1870
1871 Copies an integer into the given SV, upgrading first if necessary.
1872 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1873
1874 =cut
1875 */
1876
1877 void
1878 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1879 {
1880     SV_CHECK_THINKFIRST_COW_DROP(sv);
1881     switch (SvTYPE(sv)) {
1882     case SVt_NULL:
1883         sv_upgrade(sv, SVt_IV);
1884         break;
1885     case SVt_NV:
1886         sv_upgrade(sv, SVt_PVNV);
1887         break;
1888     case SVt_RV:
1889     case SVt_PV:
1890         sv_upgrade(sv, SVt_PVIV);
1891         break;
1892
1893     case SVt_PVGV:
1894     case SVt_PVAV:
1895     case SVt_PVHV:
1896     case SVt_PVCV:
1897     case SVt_PVFM:
1898     case SVt_PVIO:
1899         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1900                    OP_DESC(PL_op));
1901     }
1902     (void)SvIOK_only(sv);                       /* validate number */
1903     SvIV_set(sv, i);
1904     SvTAINT(sv);
1905 }
1906
1907 /*
1908 =for apidoc sv_setiv_mg
1909
1910 Like C<sv_setiv>, but also handles 'set' magic.
1911
1912 =cut
1913 */
1914
1915 void
1916 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1917 {
1918     sv_setiv(sv,i);
1919     SvSETMAGIC(sv);
1920 }
1921
1922 /*
1923 =for apidoc sv_setuv
1924
1925 Copies an unsigned integer into the given SV, upgrading first if necessary.
1926 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1927
1928 =cut
1929 */
1930
1931 void
1932 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1933 {
1934     /* With these two if statements:
1935        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1936
1937        without
1938        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1939
1940        If you wish to remove them, please benchmark to see what the effect is
1941     */
1942     if (u <= (UV)IV_MAX) {
1943        sv_setiv(sv, (IV)u);
1944        return;
1945     }
1946     sv_setiv(sv, 0);
1947     SvIsUV_on(sv);
1948     SvUV_set(sv, u);
1949 }
1950
1951 /*
1952 =for apidoc sv_setuv_mg
1953
1954 Like C<sv_setuv>, but also handles 'set' magic.
1955
1956 =cut
1957 */
1958
1959 void
1960 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1961 {
1962     /* With these two if statements:
1963        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1964
1965        without
1966        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1967
1968        If you wish to remove them, please benchmark to see what the effect is
1969     */
1970     if (u <= (UV)IV_MAX) {
1971        sv_setiv(sv, (IV)u);
1972     } else {
1973        sv_setiv(sv, 0);
1974        SvIsUV_on(sv);
1975        sv_setuv(sv,u);
1976     }
1977     SvSETMAGIC(sv);
1978 }
1979
1980 /*
1981 =for apidoc sv_setnv
1982
1983 Copies a double into the given SV, upgrading first if necessary.
1984 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1985
1986 =cut
1987 */
1988
1989 void
1990 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1991 {
1992     SV_CHECK_THINKFIRST_COW_DROP(sv);
1993     switch (SvTYPE(sv)) {
1994     case SVt_NULL:
1995     case SVt_IV:
1996         sv_upgrade(sv, SVt_NV);
1997         break;
1998     case SVt_RV:
1999     case SVt_PV:
2000     case SVt_PVIV:
2001         sv_upgrade(sv, SVt_PVNV);
2002         break;
2003
2004     case SVt_PVGV:
2005     case SVt_PVAV:
2006     case SVt_PVHV:
2007     case SVt_PVCV:
2008     case SVt_PVFM:
2009     case SVt_PVIO:
2010         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
2011                    OP_NAME(PL_op));
2012     }
2013     SvNV_set(sv, num);
2014     (void)SvNOK_only(sv);                       /* validate number */
2015     SvTAINT(sv);
2016 }
2017
2018 /*
2019 =for apidoc sv_setnv_mg
2020
2021 Like C<sv_setnv>, but also handles 'set' magic.
2022
2023 =cut
2024 */
2025
2026 void
2027 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
2028 {
2029     sv_setnv(sv,num);
2030     SvSETMAGIC(sv);
2031 }
2032
2033 /* Print an "isn't numeric" warning, using a cleaned-up,
2034  * printable version of the offending string
2035  */
2036
2037 STATIC void
2038 S_not_a_number(pTHX_ SV *sv)
2039 {
2040      SV *dsv;
2041      char tmpbuf[64];
2042      char *pv;
2043
2044      if (DO_UTF8(sv)) {
2045           dsv = sv_2mortal(newSVpv("", 0));
2046           pv = sv_uni_display(dsv, sv, 10, 0);
2047      } else {
2048           char *d = tmpbuf;
2049           char *limit = tmpbuf + sizeof(tmpbuf) - 8;
2050           /* each *s can expand to 4 chars + "...\0",
2051              i.e. need room for 8 chars */
2052         
2053           const char *s, *end;
2054           for (s = SvPVX_const(sv), end = s + SvCUR(sv); s < end && d < limit;
2055                s++) {
2056                int ch = *s & 0xFF;
2057                if (ch & 128 && !isPRINT_LC(ch)) {
2058                     *d++ = 'M';
2059                     *d++ = '-';
2060                     ch &= 127;
2061                }
2062                if (ch == '\n') {
2063                     *d++ = '\\';
2064                     *d++ = 'n';
2065                }
2066                else if (ch == '\r') {
2067                     *d++ = '\\';
2068                     *d++ = 'r';
2069                }
2070                else if (ch == '\f') {
2071                     *d++ = '\\';
2072                     *d++ = 'f';
2073                }
2074                else if (ch == '\\') {
2075                     *d++ = '\\';
2076                     *d++ = '\\';
2077                }
2078                else if (ch == '\0') {
2079                     *d++ = '\\';
2080                     *d++ = '0';
2081                }
2082                else if (isPRINT_LC(ch))
2083                     *d++ = ch;
2084                else {
2085                     *d++ = '^';
2086                     *d++ = toCTRL(ch);
2087                }
2088           }
2089           if (s < end) {
2090                *d++ = '.';
2091                *d++ = '.';
2092                *d++ = '.';
2093           }
2094           *d = '\0';
2095           pv = tmpbuf;
2096     }
2097
2098     if (PL_op)
2099         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2100                     "Argument \"%s\" isn't numeric in %s", pv,
2101                     OP_DESC(PL_op));
2102     else
2103         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2104                     "Argument \"%s\" isn't numeric", pv);
2105 }
2106
2107 /*
2108 =for apidoc looks_like_number
2109
2110 Test if the content of an SV looks like a number (or is a number).
2111 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
2112 non-numeric warning), even if your atof() doesn't grok them.
2113
2114 =cut
2115 */
2116
2117 I32
2118 Perl_looks_like_number(pTHX_ SV *sv)
2119 {
2120     register const char *sbegin;
2121     STRLEN len;
2122
2123     if (SvPOK(sv)) {
2124         sbegin = SvPVX_const(sv);
2125         len = SvCUR(sv);
2126     }
2127     else if (SvPOKp(sv))
2128         sbegin = SvPV_const(sv, len);
2129     else
2130         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
2131     return grok_number(sbegin, len, NULL);
2132 }
2133
2134 /* Actually, ISO C leaves conversion of UV to IV undefined, but
2135    until proven guilty, assume that things are not that bad... */
2136
2137 /*
2138    NV_PRESERVES_UV:
2139
2140    As 64 bit platforms often have an NV that doesn't preserve all bits of
2141    an IV (an assumption perl has been based on to date) it becomes necessary
2142    to remove the assumption that the NV always carries enough precision to
2143    recreate the IV whenever needed, and that the NV is the canonical form.
2144    Instead, IV/UV and NV need to be given equal rights. So as to not lose
2145    precision as a side effect of conversion (which would lead to insanity
2146    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
2147    1) to distinguish between IV/UV/NV slots that have cached a valid
2148       conversion where precision was lost and IV/UV/NV slots that have a
2149       valid conversion which has lost no precision
2150    2) to ensure that if a numeric conversion to one form is requested that
2151       would lose precision, the precise conversion (or differently
2152       imprecise conversion) is also performed and cached, to prevent
2153       requests for different numeric formats on the same SV causing
2154       lossy conversion chains. (lossless conversion chains are perfectly
2155       acceptable (still))
2156
2157
2158    flags are used:
2159    SvIOKp is true if the IV slot contains a valid value
2160    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
2161    SvNOKp is true if the NV slot contains a valid value
2162    SvNOK  is true only if the NV value is accurate
2163
2164    so
2165    while converting from PV to NV, check to see if converting that NV to an
2166    IV(or UV) would lose accuracy over a direct conversion from PV to
2167    IV(or UV). If it would, cache both conversions, return NV, but mark
2168    SV as IOK NOKp (ie not NOK).
2169
2170    While converting from PV to IV, check to see if converting that IV to an
2171    NV would lose accuracy over a direct conversion from PV to NV. If it
2172    would, cache both conversions, flag similarly.
2173
2174    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2175    correctly because if IV & NV were set NV *always* overruled.
2176    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2177    changes - now IV and NV together means that the two are interchangeable:
2178    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2179
2180    The benefit of this is that operations such as pp_add know that if
2181    SvIOK is true for both left and right operands, then integer addition
2182    can be used instead of floating point (for cases where the result won't
2183    overflow). Before, floating point was always used, which could lead to
2184    loss of precision compared with integer addition.
2185
2186    * making IV and NV equal status should make maths accurate on 64 bit
2187      platforms
2188    * may speed up maths somewhat if pp_add and friends start to use
2189      integers when possible instead of fp. (Hopefully the overhead in
2190      looking for SvIOK and checking for overflow will not outweigh the
2191      fp to integer speedup)
2192    * will slow down integer operations (callers of SvIV) on "inaccurate"
2193      values, as the change from SvIOK to SvIOKp will cause a call into
2194      sv_2iv each time rather than a macro access direct to the IV slot
2195    * should speed up number->string conversion on integers as IV is
2196      favoured when IV and NV are equally accurate
2197
2198    ####################################################################
2199    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2200    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2201    On the other hand, SvUOK is true iff UV.
2202    ####################################################################
2203
2204    Your mileage will vary depending your CPU's relative fp to integer
2205    performance ratio.
2206 */
2207
2208 #ifndef NV_PRESERVES_UV
2209 #  define IS_NUMBER_UNDERFLOW_IV 1
2210 #  define IS_NUMBER_UNDERFLOW_UV 2
2211 #  define IS_NUMBER_IV_AND_UV    2
2212 #  define IS_NUMBER_OVERFLOW_IV  4
2213 #  define IS_NUMBER_OVERFLOW_UV  5
2214
2215 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2216
2217 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2218 STATIC int
2219 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
2220 {
2221     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2222     if (SvNVX(sv) < (NV)IV_MIN) {
2223         (void)SvIOKp_on(sv);
2224         (void)SvNOK_on(sv);
2225         SvIV_set(sv, IV_MIN);
2226         return IS_NUMBER_UNDERFLOW_IV;
2227     }
2228     if (SvNVX(sv) > (NV)UV_MAX) {
2229         (void)SvIOKp_on(sv);
2230         (void)SvNOK_on(sv);
2231         SvIsUV_on(sv);
2232         SvUV_set(sv, UV_MAX);
2233         return IS_NUMBER_OVERFLOW_UV;
2234     }
2235     (void)SvIOKp_on(sv);
2236     (void)SvNOK_on(sv);
2237     /* Can't use strtol etc to convert this string.  (See truth table in
2238        sv_2iv  */
2239     if (SvNVX(sv) <= (UV)IV_MAX) {
2240         SvIV_set(sv, I_V(SvNVX(sv)));
2241         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2242             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2243         } else {
2244             /* Integer is imprecise. NOK, IOKp */
2245         }
2246         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2247     }
2248     SvIsUV_on(sv);
2249     SvUV_set(sv, U_V(SvNVX(sv)));
2250     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2251         if (SvUVX(sv) == UV_MAX) {
2252             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2253                possibly be preserved by NV. Hence, it must be overflow.
2254                NOK, IOKp */
2255             return IS_NUMBER_OVERFLOW_UV;
2256         }
2257         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2258     } else {
2259         /* Integer is imprecise. NOK, IOKp */
2260     }
2261     return IS_NUMBER_OVERFLOW_IV;
2262 }
2263 #endif /* !NV_PRESERVES_UV*/
2264
2265 /* sv_2iv() is now a macro using Perl_sv_2iv_flags();
2266  * this function provided for binary compatibility only
2267  */
2268
2269 IV
2270 Perl_sv_2iv(pTHX_ register SV *sv)
2271 {
2272     return sv_2iv_flags(sv, SV_GMAGIC);
2273 }
2274
2275 /*
2276 =for apidoc sv_2iv_flags
2277
2278 Return the integer value of an SV, doing any necessary string
2279 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2280 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2281
2282 =cut
2283 */
2284
2285 IV
2286 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2287 {
2288     if (!sv)
2289         return 0;
2290     if (SvGMAGICAL(sv)) {
2291         if (flags & SV_GMAGIC)
2292             mg_get(sv);
2293         if (SvIOKp(sv))
2294             return SvIVX(sv);
2295         if (SvNOKp(sv)) {
2296             return I_V(SvNVX(sv));
2297         }
2298         if (SvPOKp(sv) && SvLEN(sv))
2299             return asIV(sv);
2300         if (!SvROK(sv)) {
2301             if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2302                 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2303                     report_uninit(sv);
2304             }
2305             return 0;
2306         }
2307     }
2308     if (SvTHINKFIRST(sv)) {
2309         if (SvROK(sv)) {
2310           SV* tmpstr;
2311           if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2312                 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2313               return SvIV(tmpstr);
2314           return PTR2IV(SvRV(sv));
2315         }
2316         if (SvIsCOW(sv)) {
2317             sv_force_normal_flags(sv, 0);
2318         }
2319         if (SvREADONLY(sv) && !SvOK(sv)) {
2320             if (ckWARN(WARN_UNINITIALIZED))
2321                 report_uninit(sv);
2322             return 0;
2323         }
2324     }
2325     if (SvIOKp(sv)) {
2326         if (SvIsUV(sv)) {
2327             return (IV)(SvUVX(sv));
2328         }
2329         else {
2330             return SvIVX(sv);
2331         }
2332     }
2333     if (SvNOKp(sv)) {
2334         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2335          * without also getting a cached IV/UV from it at the same time
2336          * (ie PV->NV conversion should detect loss of accuracy and cache
2337          * IV or UV at same time to avoid this.  NWC */
2338
2339         if (SvTYPE(sv) == SVt_NV)
2340             sv_upgrade(sv, SVt_PVNV);
2341
2342         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2343         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2344            certainly cast into the IV range at IV_MAX, whereas the correct
2345            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2346            cases go to UV */
2347         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2348             SvIV_set(sv, I_V(SvNVX(sv)));
2349             if (SvNVX(sv) == (NV) SvIVX(sv)
2350 #ifndef NV_PRESERVES_UV
2351                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2352                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2353                 /* Don't flag it as "accurately an integer" if the number
2354                    came from a (by definition imprecise) NV operation, and
2355                    we're outside the range of NV integer precision */
2356 #endif
2357                 ) {
2358                 SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2359                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2360                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2361                                       PTR2UV(sv),
2362                                       SvNVX(sv),
2363                                       SvIVX(sv)));
2364
2365             } else {
2366                 /* IV not precise.  No need to convert from PV, as NV
2367                    conversion would already have cached IV if it detected
2368                    that PV->IV would be better than PV->NV->IV
2369                    flags already correct - don't set public IOK.  */
2370                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2371                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2372                                       PTR2UV(sv),
2373                                       SvNVX(sv),
2374                                       SvIVX(sv)));
2375             }
2376             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2377                but the cast (NV)IV_MIN rounds to a the value less (more
2378                negative) than IV_MIN which happens to be equal to SvNVX ??
2379                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2380                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2381                (NV)UVX == NVX are both true, but the values differ. :-(
2382                Hopefully for 2s complement IV_MIN is something like
2383                0x8000000000000000 which will be exact. NWC */
2384         }
2385         else {
2386             SvUV_set(sv, U_V(SvNVX(sv)));
2387             if (
2388                 (SvNVX(sv) == (NV) SvUVX(sv))
2389 #ifndef  NV_PRESERVES_UV
2390                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2391                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2392                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2393                 /* Don't flag it as "accurately an integer" if the number
2394                    came from a (by definition imprecise) NV operation, and
2395                    we're outside the range of NV integer precision */
2396 #endif
2397                 )
2398                 SvIOK_on(sv);
2399             SvIsUV_on(sv);
2400           ret_iv_max:
2401             DEBUG_c(PerlIO_printf(Perl_debug_log,
2402                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2403                                   PTR2UV(sv),
2404                                   SvUVX(sv),
2405                                   SvUVX(sv)));
2406             return (IV)SvUVX(sv);
2407         }
2408     }
2409     else if (SvPOKp(sv) && SvLEN(sv)) {
2410         UV value;
2411         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2412         /* We want to avoid a possible problem when we cache an IV which
2413            may be later translated to an NV, and the resulting NV is not
2414            the same as the direct translation of the initial string
2415            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2416            be careful to ensure that the value with the .456 is around if the
2417            NV value is requested in the future).
2418         
2419            This means that if we cache such an IV, we need to cache the
2420            NV as well.  Moreover, we trade speed for space, and do not
2421            cache the NV if we are sure it's not needed.
2422          */
2423
2424         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2425         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2426              == IS_NUMBER_IN_UV) {
2427             /* It's definitely an integer, only upgrade to PVIV */
2428             if (SvTYPE(sv) < SVt_PVIV)
2429                 sv_upgrade(sv, SVt_PVIV);
2430             (void)SvIOK_on(sv);
2431         } else if (SvTYPE(sv) < SVt_PVNV)
2432             sv_upgrade(sv, SVt_PVNV);
2433
2434         /* If NV preserves UV then we only use the UV value if we know that
2435            we aren't going to call atof() below. If NVs don't preserve UVs
2436            then the value returned may have more precision than atof() will
2437            return, even though value isn't perfectly accurate.  */
2438         if ((numtype & (IS_NUMBER_IN_UV
2439 #ifdef NV_PRESERVES_UV
2440                         | IS_NUMBER_NOT_INT
2441 #endif
2442             )) == IS_NUMBER_IN_UV) {
2443             /* This won't turn off the public IOK flag if it was set above  */
2444             (void)SvIOKp_on(sv);
2445
2446             if (!(numtype & IS_NUMBER_NEG)) {
2447                 /* positive */;
2448                 if (value <= (UV)IV_MAX) {
2449                     SvIV_set(sv, (IV)value);
2450                 } else {
2451                     SvUV_set(sv, value);
2452                     SvIsUV_on(sv);
2453                 }
2454             } else {
2455                 /* 2s complement assumption  */
2456                 if (value <= (UV)IV_MIN) {
2457                     SvIV_set(sv, -(IV)value);
2458                 } else {
2459                     /* Too negative for an IV.  This is a double upgrade, but
2460                        I'm assuming it will be rare.  */
2461                     if (SvTYPE(sv) < SVt_PVNV)
2462                         sv_upgrade(sv, SVt_PVNV);
2463                     SvNOK_on(sv);
2464                     SvIOK_off(sv);
2465                     SvIOKp_on(sv);
2466                     SvNV_set(sv, -(NV)value);
2467                     SvIV_set(sv, IV_MIN);
2468                 }
2469             }
2470         }
2471         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2472            will be in the previous block to set the IV slot, and the next
2473            block to set the NV slot.  So no else here.  */
2474         
2475         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2476             != IS_NUMBER_IN_UV) {
2477             /* It wasn't an (integer that doesn't overflow the UV). */
2478             SvNV_set(sv, Atof(SvPVX_const(sv)));
2479
2480             if (! numtype && ckWARN(WARN_NUMERIC))
2481                 not_a_number(sv);
2482
2483 #if defined(USE_LONG_DOUBLE)
2484             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2485                                   PTR2UV(sv), SvNVX(sv)));
2486 #else
2487             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2488                                   PTR2UV(sv), SvNVX(sv)));
2489 #endif
2490
2491
2492 #ifdef NV_PRESERVES_UV
2493             (void)SvIOKp_on(sv);
2494             (void)SvNOK_on(sv);
2495             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2496                 SvIV_set(sv, I_V(SvNVX(sv)));
2497                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2498                     SvIOK_on(sv);
2499                 } else {
2500                     /* Integer is imprecise. NOK, IOKp */
2501                 }
2502                 /* UV will not work better than IV */
2503             } else {
2504                 if (SvNVX(sv) > (NV)UV_MAX) {
2505                     SvIsUV_on(sv);
2506                     /* Integer is inaccurate. NOK, IOKp, is UV */
2507                     SvUV_set(sv, UV_MAX);
2508                     SvIsUV_on(sv);
2509                 } else {
2510                     SvUV_set(sv, U_V(SvNVX(sv)));
2511                     /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2512                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2513                         SvIOK_on(sv);
2514                         SvIsUV_on(sv);
2515                     } else {
2516                         /* Integer is imprecise. NOK, IOKp, is UV */
2517                         SvIsUV_on(sv);
2518                     }
2519                 }
2520                 goto ret_iv_max;
2521             }
2522 #else /* NV_PRESERVES_UV */
2523             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2524                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2525                 /* The IV slot will have been set from value returned by
2526                    grok_number above.  The NV slot has just been set using
2527                    Atof.  */
2528                 SvNOK_on(sv);
2529                 assert (SvIOKp(sv));
2530             } else {
2531                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2532                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2533                     /* Small enough to preserve all bits. */
2534                     (void)SvIOKp_on(sv);
2535                     SvNOK_on(sv);
2536                     SvIV_set(sv, I_V(SvNVX(sv)));
2537                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2538                         SvIOK_on(sv);
2539                     /* Assumption: first non-preserved integer is < IV_MAX,
2540                        this NV is in the preserved range, therefore: */
2541                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2542                           < (UV)IV_MAX)) {
2543                         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);
2544                     }
2545                 } else {
2546                     /* IN_UV NOT_INT
2547                          0      0       already failed to read UV.
2548                          0      1       already failed to read UV.
2549                          1      0       you won't get here in this case. IV/UV
2550                                         slot set, public IOK, Atof() unneeded.
2551                          1      1       already read UV.
2552                        so there's no point in sv_2iuv_non_preserve() attempting
2553                        to use atol, strtol, strtoul etc.  */
2554                     if (sv_2iuv_non_preserve (sv, numtype)
2555                         >= IS_NUMBER_OVERFLOW_IV)
2556                     goto ret_iv_max;
2557                 }
2558             }
2559 #endif /* NV_PRESERVES_UV */
2560         }
2561     } else  {
2562         if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2563             report_uninit(sv);
2564         if (SvTYPE(sv) < SVt_IV)
2565             /* Typically the caller expects that sv_any is not NULL now.  */
2566             sv_upgrade(sv, SVt_IV);
2567         return 0;
2568     }
2569     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2570         PTR2UV(sv),SvIVX(sv)));
2571     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2572 }
2573
2574 /* sv_2uv() is now a macro using Perl_sv_2uv_flags();
2575  * this function provided for binary compatibility only
2576  */
2577
2578 UV
2579 Perl_sv_2uv(pTHX_ register SV *sv)
2580 {
2581     return sv_2uv_flags(sv, SV_GMAGIC);
2582 }
2583
2584 /*
2585 =for apidoc sv_2uv_flags
2586
2587 Return the unsigned integer value of an SV, doing any necessary string
2588 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2589 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2590
2591 =cut
2592 */
2593
2594 UV
2595 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2596 {
2597     if (!sv)
2598         return 0;
2599     if (SvGMAGICAL(sv)) {
2600         if (flags & SV_GMAGIC)
2601             mg_get(sv);
2602         if (SvIOKp(sv))
2603             return SvUVX(sv);
2604         if (SvNOKp(sv))
2605             return U_V(SvNVX(sv));
2606         if (SvPOKp(sv) && SvLEN(sv))
2607             return asUV(sv);
2608         if (!SvROK(sv)) {
2609             if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2610                 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2611                     report_uninit(sv);
2612             }
2613             return 0;
2614         }
2615     }
2616     if (SvTHINKFIRST(sv)) {
2617         if (SvROK(sv)) {
2618           SV* tmpstr;
2619           if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2620                 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2621               return SvUV(tmpstr);
2622           return PTR2UV(SvRV(sv));
2623         }
2624         if (SvIsCOW(sv)) {
2625             sv_force_normal_flags(sv, 0);
2626         }
2627         if (SvREADONLY(sv) && !SvOK(sv)) {
2628             if (ckWARN(WARN_UNINITIALIZED))
2629                 report_uninit(sv);
2630             return 0;
2631         }
2632     }
2633     if (SvIOKp(sv)) {
2634         if (SvIsUV(sv)) {
2635             return SvUVX(sv);
2636         }
2637         else {
2638             return (UV)SvIVX(sv);
2639         }
2640     }
2641     if (SvNOKp(sv)) {
2642         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2643          * without also getting a cached IV/UV from it at the same time
2644          * (ie PV->NV conversion should detect loss of accuracy and cache
2645          * IV or UV at same time to avoid this. */
2646         /* IV-over-UV optimisation - choose to cache IV if possible */
2647
2648         if (SvTYPE(sv) == SVt_NV)
2649             sv_upgrade(sv, SVt_PVNV);
2650
2651         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2652         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2653             SvIV_set(sv, I_V(SvNVX(sv)));
2654             if (SvNVX(sv) == (NV) SvIVX(sv)
2655 #ifndef NV_PRESERVES_UV
2656                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2657                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2658                 /* Don't flag it as "accurately an integer" if the number
2659                    came from a (by definition imprecise) NV operation, and
2660                    we're outside the range of NV integer precision */
2661 #endif
2662                 ) {
2663                 SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2664                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2665                                       "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2666                                       PTR2UV(sv),
2667                                       SvNVX(sv),
2668                                       SvIVX(sv)));
2669
2670             } else {
2671                 /* IV not precise.  No need to convert from PV, as NV
2672                    conversion would already have cached IV if it detected
2673                    that PV->IV would be better than PV->NV->IV
2674                    flags already correct - don't set public IOK.  */
2675                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2676                                       "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2677                                       PTR2UV(sv),
2678                                       SvNVX(sv),
2679                                       SvIVX(sv)));
2680             }
2681             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2682                but the cast (NV)IV_MIN rounds to a the value less (more
2683                negative) than IV_MIN which happens to be equal to SvNVX ??
2684                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2685                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2686                (NV)UVX == NVX are both true, but the values differ. :-(
2687                Hopefully for 2s complement IV_MIN is something like
2688                0x8000000000000000 which will be exact. NWC */
2689         }
2690         else {
2691             SvUV_set(sv, U_V(SvNVX(sv)));
2692             if (
2693                 (SvNVX(sv) == (NV) SvUVX(sv))
2694 #ifndef  NV_PRESERVES_UV
2695                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2696                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2697                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2698                 /* Don't flag it as "accurately an integer" if the number
2699                    came from a (by definition imprecise) NV operation, and
2700                    we're outside the range of NV integer precision */
2701 #endif
2702                 )
2703                 SvIOK_on(sv);
2704             SvIsUV_on(sv);
2705             DEBUG_c(PerlIO_printf(Perl_debug_log,
2706                                   "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2707                                   PTR2UV(sv),
2708                                   SvUVX(sv),
2709                                   SvUVX(sv)));
2710         }
2711     }
2712     else if (SvPOKp(sv) && SvLEN(sv)) {
2713         UV value;
2714         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2715
2716         /* We want to avoid a possible problem when we cache a UV which
2717            may be later translated to an NV, and the resulting NV is not
2718            the translation of the initial data.
2719         
2720            This means that if we cache such a UV, we need to cache the
2721            NV as well.  Moreover, we trade speed for space, and do not
2722            cache the NV if not needed.
2723          */
2724
2725         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2726         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2727              == IS_NUMBER_IN_UV) {
2728             /* It's definitely an integer, only upgrade to PVIV */
2729             if (SvTYPE(sv) < SVt_PVIV)
2730                 sv_upgrade(sv, SVt_PVIV);
2731             (void)SvIOK_on(sv);
2732         } else if (SvTYPE(sv) < SVt_PVNV)
2733             sv_upgrade(sv, SVt_PVNV);
2734
2735         /* If NV preserves UV then we only use the UV value if we know that
2736            we aren't going to call atof() below. If NVs don't preserve UVs
2737            then the value returned may have more precision than atof() will
2738            return, even though it isn't accurate.  */
2739         if ((numtype & (IS_NUMBER_IN_UV
2740 #ifdef NV_PRESERVES_UV
2741                         | IS_NUMBER_NOT_INT
2742 #endif
2743             )) == IS_NUMBER_IN_UV) {
2744             /* This won't turn off the public IOK flag if it was set above  */
2745             (void)SvIOKp_on(sv);
2746
2747             if (!(numtype & IS_NUMBER_NEG)) {
2748                 /* positive */;
2749                 if (value <= (UV)IV_MAX) {
2750                     SvIV_set(sv, (IV)value);
2751                 } else {
2752                     /* it didn't overflow, and it was positive. */
2753                     SvUV_set(sv, value);
2754                     SvIsUV_on(sv);
2755                 }
2756             } else {
2757                 /* 2s complement assumption  */
2758                 if (value <= (UV)IV_MIN) {
2759                     SvIV_set(sv, -(IV)value);
2760                 } else {
2761                     /* Too negative for an IV.  This is a double upgrade, but
2762                        I'm assuming it will be rare.  */
2763                     if (SvTYPE(sv) < SVt_PVNV)
2764                         sv_upgrade(sv, SVt_PVNV);
2765                     SvNOK_on(sv);
2766                     SvIOK_off(sv);
2767                     SvIOKp_on(sv);
2768                     SvNV_set(sv, -(NV)value);
2769                     SvIV_set(sv, IV_MIN);
2770                 }
2771             }
2772         }
2773         
2774         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2775             != IS_NUMBER_IN_UV) {
2776             /* It wasn't an integer, or it overflowed the UV. */
2777             SvNV_set(sv, Atof(SvPVX_const(sv)));
2778
2779             if (! numtype && ckWARN(WARN_NUMERIC))
2780                     not_a_number(sv);
2781
2782 #if defined(USE_LONG_DOUBLE)
2783             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2784                                   PTR2UV(sv), SvNVX(sv)));
2785 #else
2786             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
2787                                   PTR2UV(sv), SvNVX(sv)));
2788 #endif
2789
2790 #ifdef NV_PRESERVES_UV
2791             (void)SvIOKp_on(sv);
2792             (void)SvNOK_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)) {
2796                     SvIOK_on(sv);
2797                 } else {
2798                     /* Integer is imprecise. NOK, IOKp */
2799                 }
2800                 /* UV will not work better than IV */
2801             } else {
2802                 if (SvNVX(sv) > (NV)UV_MAX) {
2803                     SvIsUV_on(sv);
2804                     /* Integer is inaccurate. NOK, IOKp, is UV */
2805                     SvUV_set(sv, UV_MAX);
2806                     SvIsUV_on(sv);
2807                 } else {
2808                     SvUV_set(sv, U_V(SvNVX(sv)));
2809                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2810                        NV preservse UV so can do correct comparison.  */
2811                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2812                         SvIOK_on(sv);
2813                         SvIsUV_on(sv);
2814                     } else {
2815                         /* Integer is imprecise. NOK, IOKp, is UV */
2816                         SvIsUV_on(sv);
2817                     }
2818                 }
2819             }
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 UV slot will have been set from value returned by
2824                    grok_number above.  The NV slot has just been set using
2825                    Atof.  */
2826                 SvNOK_on(sv);
2827                 assert (SvIOKp(sv));
2828             } else {
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);
2833                     SvNOK_on(sv);
2834                     SvIV_set(sv, I_V(SvNVX(sv)));
2835                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2836                         SvIOK_on(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))
2840                           < (UV)IV_MAX)) {
2841                         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);
2842                     }
2843                 } else
2844                     sv_2iuv_non_preserve (sv, numtype);
2845             }
2846 #endif /* NV_PRESERVES_UV */
2847         }
2848     }
2849     else  {
2850         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2851             if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2852                 report_uninit(sv);
2853         }
2854         if (SvTYPE(sv) < SVt_IV)
2855             /* Typically the caller expects that sv_any is not NULL now.  */
2856             sv_upgrade(sv, SVt_IV);
2857         return 0;
2858     }
2859
2860     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2861                           PTR2UV(sv),SvUVX(sv)));
2862     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2863 }
2864
2865 /*
2866 =for apidoc sv_2nv
2867
2868 Return the num value of an SV, doing any necessary string or integer
2869 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2870 macros.
2871
2872 =cut
2873 */
2874
2875 NV
2876 Perl_sv_2nv(pTHX_ register SV *sv)
2877 {
2878     if (!sv)
2879         return 0.0;
2880     if (SvGMAGICAL(sv)) {
2881         mg_get(sv);
2882         if (SvNOKp(sv))
2883             return SvNVX(sv);
2884         if (SvPOKp(sv) && SvLEN(sv)) {
2885             if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
2886                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2887                 not_a_number(sv);
2888             return Atof(SvPVX_const(sv));
2889         }
2890         if (SvIOKp(sv)) {
2891             if (SvIsUV(sv))
2892                 return (NV)SvUVX(sv);
2893             else
2894                 return (NV)SvIVX(sv);
2895         }       
2896         if (!SvROK(sv)) {
2897             if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2898                 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2899                     report_uninit(sv);
2900             }
2901             return (NV)0;
2902         }
2903     }
2904     if (SvTHINKFIRST(sv)) {
2905         if (SvROK(sv)) {
2906           SV* tmpstr;
2907           if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2908                 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2909               return SvNV(tmpstr);
2910           return PTR2NV(SvRV(sv));
2911         }
2912         if (SvIsCOW(sv)) {
2913             sv_force_normal_flags(sv, 0);
2914         }
2915         if (SvREADONLY(sv) && !SvOK(sv)) {
2916             if (ckWARN(WARN_UNINITIALIZED))
2917                 report_uninit(sv);
2918             return 0.0;
2919         }
2920     }
2921     if (SvTYPE(sv) < SVt_NV) {
2922         if (SvTYPE(sv) == SVt_IV)
2923             sv_upgrade(sv, SVt_PVNV);
2924         else
2925             sv_upgrade(sv, SVt_NV);
2926 #ifdef USE_LONG_DOUBLE
2927         DEBUG_c({
2928             STORE_NUMERIC_LOCAL_SET_STANDARD();
2929             PerlIO_printf(Perl_debug_log,
2930                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2931                           PTR2UV(sv), SvNVX(sv));
2932             RESTORE_NUMERIC_LOCAL();
2933         });
2934 #else
2935         DEBUG_c({
2936             STORE_NUMERIC_LOCAL_SET_STANDARD();
2937             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2938                           PTR2UV(sv), SvNVX(sv));
2939             RESTORE_NUMERIC_LOCAL();
2940         });
2941 #endif
2942     }
2943     else if (SvTYPE(sv) < SVt_PVNV)
2944         sv_upgrade(sv, SVt_PVNV);
2945     if (SvNOKp(sv)) {
2946         return SvNVX(sv);
2947     }
2948     if (SvIOKp(sv)) {
2949         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2950 #ifdef NV_PRESERVES_UV
2951         SvNOK_on(sv);
2952 #else
2953         /* Only set the public NV OK flag if this NV preserves the IV  */
2954         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2955         if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2956                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2957             SvNOK_on(sv);
2958         else
2959             SvNOKp_on(sv);
2960 #endif
2961     }
2962     else if (SvPOKp(sv) && SvLEN(sv)) {
2963         UV value;
2964         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2965         if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
2966             not_a_number(sv);
2967 #ifdef NV_PRESERVES_UV
2968         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2969             == IS_NUMBER_IN_UV) {
2970             /* It's definitely an integer */
2971             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2972         } else
2973             SvNV_set(sv, Atof(SvPVX_const(sv)));
2974         SvNOK_on(sv);
2975 #else
2976         SvNV_set(sv, Atof(SvPVX_const(sv)));
2977         /* Only set the public NV OK flag if this NV preserves the value in
2978            the PV at least as well as an IV/UV would.
2979            Not sure how to do this 100% reliably. */
2980         /* if that shift count is out of range then Configure's test is
2981            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2982            UV_BITS */
2983         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2984             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2985             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2986         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2987             /* Can't use strtol etc to convert this string, so don't try.
2988                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2989             SvNOK_on(sv);
2990         } else {
2991             /* value has been set.  It may not be precise.  */
2992             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2993                 /* 2s complement assumption for (UV)IV_MIN  */
2994                 SvNOK_on(sv); /* Integer is too negative.  */
2995             } else {
2996                 SvNOKp_on(sv);
2997                 SvIOKp_on(sv);
2998
2999                 if (numtype & IS_NUMBER_NEG) {
3000                     SvIV_set(sv, -(IV)value);
3001                 } else if (value <= (UV)IV_MAX) {
3002                     SvIV_set(sv, (IV)value);
3003                 } else {
3004                     SvUV_set(sv, value);
3005                     SvIsUV_on(sv);
3006                 }
3007
3008                 if (numtype & IS_NUMBER_NOT_INT) {
3009                     /* I believe that even if the original PV had decimals,
3010                        they are lost beyond the limit of the FP precision.
3011                        However, neither is canonical, so both only get p
3012                        flags.  NWC, 2000/11/25 */
3013                     /* Both already have p flags, so do nothing */
3014                 } else {
3015                     const NV nv = SvNVX(sv);
3016                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
3017                         if (SvIVX(sv) == I_V(nv)) {
3018                             SvNOK_on(sv);
3019                             SvIOK_on(sv);
3020                         } else {
3021                             SvIOK_on(sv);
3022                             /* It had no "." so it must be integer.  */
3023                         }
3024                     } else {
3025                         /* between IV_MAX and NV(UV_MAX).
3026                            Could be slightly > UV_MAX */
3027
3028                         if (numtype & IS_NUMBER_NOT_INT) {
3029                             /* UV and NV both imprecise.  */
3030                         } else {
3031                             const UV nv_as_uv = U_V(nv);
3032
3033                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
3034                                 SvNOK_on(sv);
3035                                 SvIOK_on(sv);
3036                             } else {
3037                                 SvIOK_on(sv);
3038                             }
3039                         }
3040                     }
3041                 }
3042             }
3043         }
3044 #endif /* NV_PRESERVES_UV */
3045     }
3046     else  {
3047         if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3048             report_uninit(sv);
3049         if (SvTYPE(sv) < SVt_NV)
3050             /* Typically the caller expects that sv_any is not NULL now.  */
3051             /* XXX Ilya implies that this is a bug in callers that assume this
3052                and ideally should be fixed.  */
3053             sv_upgrade(sv, SVt_NV);
3054         return 0.0;
3055     }
3056 #if defined(USE_LONG_DOUBLE)
3057     DEBUG_c({
3058         STORE_NUMERIC_LOCAL_SET_STANDARD();
3059         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
3060                       PTR2UV(sv), SvNVX(sv));
3061         RESTORE_NUMERIC_LOCAL();
3062     });
3063 #else
3064     DEBUG_c({
3065         STORE_NUMERIC_LOCAL_SET_STANDARD();
3066         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
3067                       PTR2UV(sv), SvNVX(sv));
3068         RESTORE_NUMERIC_LOCAL();
3069     });
3070 #endif
3071     return SvNVX(sv);
3072 }
3073
3074 /* asIV(): extract an integer from the string value of an SV.
3075  * Caller must validate PVX  */
3076
3077 STATIC IV
3078 S_asIV(pTHX_ SV *sv)
3079 {
3080     UV value;
3081     const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
3082
3083     if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3084         == IS_NUMBER_IN_UV) {
3085         /* It's definitely an integer */
3086         if (numtype & IS_NUMBER_NEG) {
3087             if (value < (UV)IV_MIN)
3088                 return -(IV)value;
3089         } else {
3090             if (value < (UV)IV_MAX)
3091                 return (IV)value;
3092         }
3093     }
3094     if (!numtype) {
3095         if (ckWARN(WARN_NUMERIC))
3096             not_a_number(sv);
3097     }
3098     return I_V(Atof(SvPVX_const(sv)));
3099 }
3100
3101 /* asUV(): extract an unsigned integer from the string value of an SV
3102  * Caller must validate PVX  */
3103
3104 STATIC UV
3105 S_asUV(pTHX_ SV *sv)
3106 {
3107     UV value;
3108     const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
3109
3110     if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
3111         == IS_NUMBER_IN_UV) {
3112         /* It's definitely an integer */
3113         if (!(numtype & IS_NUMBER_NEG))
3114             return value;
3115     }
3116     if (!numtype) {
3117         if (ckWARN(WARN_NUMERIC))
3118             not_a_number(sv);
3119     }
3120     return U_V(Atof(SvPVX_const(sv)));
3121 }
3122
3123 /*
3124 =for apidoc sv_2pv_nolen
3125
3126 Like C<sv_2pv()>, but doesn't return the length too. You should usually
3127 use the macro wrapper C<SvPV_nolen(sv)> instead.
3128 =cut
3129 */
3130
3131 char *
3132 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
3133 {
3134     return sv_2pv(sv, 0);
3135 }
3136
3137 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
3138  * UV as a string towards the end of buf, and return pointers to start and
3139  * end of it.
3140  *
3141  * We assume that buf is at least TYPE_CHARS(UV) long.
3142  */
3143
3144 static char *
3145 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
3146 {
3147     char *ptr = buf + TYPE_CHARS(UV);
3148     char *ebuf = ptr;
3149     int sign;
3150
3151     if (is_uv)
3152         sign = 0;
3153     else if (iv >= 0) {
3154         uv = iv;
3155         sign = 0;
3156     } else {
3157         uv = -iv;
3158         sign = 1;
3159     }
3160     do {
3161         *--ptr = '0' + (char)(uv % 10);
3162     } while (uv /= 10);
3163     if (sign)
3164         *--ptr = '-';
3165     *peob = ebuf;
3166     return ptr;
3167 }
3168
3169 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
3170  * this function provided for binary compatibility only
3171  */
3172
3173 char *
3174 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
3175 {
3176     return sv_2pv_flags(sv, lp, SV_GMAGIC);
3177 }
3178
3179 /*
3180 =for apidoc sv_2pv_flags
3181
3182 Returns a pointer to the string value of an SV, and sets *lp to its length.
3183 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
3184 if necessary.
3185 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
3186 usually end up here too.
3187
3188 =cut
3189 */
3190
3191 char *
3192 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
3193 {
3194     register char *s;
3195     int olderrno;
3196     SV *tsv, *origsv;
3197     char tbuf[64];      /* Must fit sprintf/Gconvert of longest IV/NV */
3198     char *tmpbuf = tbuf;
3199
3200     if (!sv) {
3201         if (lp)
3202             *lp = 0;
3203         return (char *)"";
3204     }
3205     if (SvGMAGICAL(sv)) {
3206         if (flags & SV_GMAGIC)
3207             mg_get(sv);
3208         if (SvPOKp(sv)) {
3209             if (lp)
3210                 *lp = SvCUR(sv);
3211             if (flags & SV_MUTABLE_RETURN)
3212                 return SvPVX_mutable(sv);
3213             if (flags & SV_CONST_RETURN)
3214                 return (char *)SvPVX_const(sv);
3215             return SvPVX(sv);
3216         }
3217         if (SvIOKp(sv)) {
3218             if (SvIsUV(sv))
3219                 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
3220             else
3221                 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
3222             tsv = Nullsv;
3223             goto tokensave;
3224         }
3225         if (SvNOKp(sv)) {
3226             Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
3227             tsv = Nullsv;
3228             goto tokensave;
3229         }
3230         if (!SvROK(sv)) {
3231             if (!(SvFLAGS(sv) & SVs_PADTMP)) {
3232                 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
3233                     report_uninit(sv);
3234             }
3235             if (lp)
3236                 *lp = 0;
3237             return (char *)"";
3238         }
3239     }
3240     if (SvTHINKFIRST(sv)) {
3241         if (SvROK(sv)) {
3242             SV* tmpstr;
3243             register const char *typestr;
3244             if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
3245                 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3246                 /* Unwrap this:  */
3247                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr); */
3248
3249                 char *pv;
3250                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
3251                     if (flags & SV_CONST_RETURN) {
3252                         pv = (char *) SvPVX_const(tmpstr);
3253                     } else {
3254                         pv = (flags & SV_MUTABLE_RETURN)
3255                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
3256                     }
3257                     if (lp)
3258                         *lp = SvCUR(tmpstr);
3259                 } else {
3260                     pv = sv_2pv_flags(tmpstr, lp, flags);
3261                 }
3262                 if (SvUTF8(tmpstr))
3263                     SvUTF8_on(sv);
3264                 else
3265                     SvUTF8_off(sv);
3266                 return pv;
3267             }
3268             origsv = sv;
3269             sv = (SV*)SvRV(sv);
3270             if (!sv)
3271                 typestr = "NULLREF";
3272             else {
3273                 MAGIC *mg;
3274                 
3275                 switch (SvTYPE(sv)) {
3276                 case SVt_PVMG:
3277                     if ( ((SvFLAGS(sv) &
3278                            (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
3279                           == (SVs_OBJECT|SVs_SMG))
3280                          && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3281                         const regexp *re = (regexp *)mg->mg_obj;
3282
3283                         if (!mg->mg_ptr) {
3284                             const char *fptr = "msix";
3285                             char reflags[6];
3286                             char ch;
3287                             int left = 0;
3288                             int right = 4;
3289                             char need_newline = 0;
3290                             U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3291
3292                             while((ch = *fptr++)) {
3293                                 if(reganch & 1) {
3294                                     reflags[left++] = ch;
3295                                 }
3296                                 else {
3297                                     reflags[right--] = ch;
3298                                 }
3299                                 reganch >>= 1;
3300                             }
3301                             if(left != 4) {
3302                                 reflags[left] = '-';
3303                                 left = 5;
3304                             }
3305
3306                             mg->mg_len = re->prelen + 4 + left;
3307                             /*
3308                              * If /x was used, we have to worry about a regex
3309                              * ending with a comment later being embedded
3310                              * within another regex. If so, we don't want this
3311                              * regex's "commentization" to leak out to the
3312                              * right part of the enclosing regex, we must cap
3313                              * it with a newline.
3314                              *
3315                              * So, if /x was used, we scan backwards from the
3316                              * end of the regex. If we find a '#' before we
3317                              * find a newline, we need to add a newline
3318                              * ourself. If we find a '\n' first (or if we
3319                              * don't find '#' or '\n'), we don't need to add
3320                              * anything.  -jfriedl
3321                              */
3322                             if (PMf_EXTENDED & re->reganch)
3323                             {
3324                                 const char *endptr = re->precomp + re->prelen;
3325                                 while (endptr >= re->precomp)
3326                                 {
3327                                     const char c = *(endptr--);
3328                                     if (c == '\n')
3329                                         break; /* don't need another */
3330                                     if (c == '#') {
3331                                         /* we end while in a comment, so we
3332                                            need a newline */
3333                                         mg->mg_len++; /* save space for it */
3334                                         need_newline = 1; /* note to add it */
3335                                         break;
3336                                     }
3337                                 }
3338                             }
3339
3340                             New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3341                             Copy("(?", mg->mg_ptr, 2, char);
3342                             Copy(reflags, mg->mg_ptr+2, left, char);
3343                             Copy(":", mg->mg_ptr+left+2, 1, char);
3344                             Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3345                             if (need_newline)
3346                                 mg->mg_ptr[mg->mg_len - 2] = '\n';
3347                             mg->mg_ptr[mg->mg_len - 1] = ')';
3348                             mg->mg_ptr[mg->mg_len] = 0;
3349                         }
3350                         PL_reginterp_cnt += re->program[0].next_off;
3351
3352                         if (re->reganch & ROPT_UTF8)
3353                             SvUTF8_on(origsv);
3354                         else
3355                             SvUTF8_off(origsv);
3356                         if (lp)
3357                             *lp = mg->mg_len;
3358                         return mg->mg_ptr;
3359                     }
3360                                         /* Fall through */
3361                 case SVt_NULL:
3362                 case SVt_IV:
3363                 case SVt_NV:
3364                 case SVt_RV:
3365                 case SVt_PV:
3366                 case SVt_PVIV:
3367                 case SVt_PVNV:
3368                 case SVt_PVBM:  typestr = SvROK(sv) ? "REF" : "SCALAR"; break;
3369                 case SVt_PVLV:  typestr = SvROK(sv) ? "REF"
3370                                 /* tied lvalues should appear to be
3371                                  * scalars for backwards compatitbility */
3372                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3373                                     ? "SCALAR" : "LVALUE";      break;
3374                 case SVt_PVAV:  typestr = "ARRAY";      break;
3375                 case SVt_PVHV:  typestr = "HASH";       break;
3376                 case SVt_PVCV:  typestr = "CODE";       break;
3377                 case SVt_PVGV:  typestr = "GLOB";       break;
3378                 case SVt_PVFM:  typestr = "FORMAT";     break;
3379                 case SVt_PVIO:  typestr = "IO";         break;
3380                 default:        typestr = "UNKNOWN";    break;
3381                 }
3382                 tsv = NEWSV(0,0);
3383                 if (SvOBJECT(sv)) {
3384                     const char *name = HvNAME_get(SvSTASH(sv));
3385                     Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
3386                                    name ? name : "__ANON__" , typestr, PTR2UV(sv));
3387                 }
3388                 else
3389                     Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, PTR2UV(sv));
3390                 goto tokensaveref;
3391             }
3392             if (lp)
3393                 *lp = strlen(typestr);
3394             return (char *)typestr;
3395         }
3396         if (SvREADONLY(sv) && !SvOK(sv)) {
3397             if (ckWARN(WARN_UNINITIALIZED))
3398                 report_uninit(sv);
3399             if (lp)
3400                 *lp = 0;
3401             return (char *)"";
3402         }
3403     }
3404     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3405         /* I'm assuming that if both IV and NV are equally valid then
3406            converting the IV is going to be more efficient */
3407         const U32 isIOK = SvIOK(sv);
3408         const U32 isUIOK = SvIsUV(sv);
3409         char buf[TYPE_CHARS(UV)];
3410         char *ebuf, *ptr;
3411
3412         if (SvTYPE(sv) < SVt_PVIV)
3413             sv_upgrade(sv, SVt_PVIV);
3414         if (isUIOK)
3415             ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3416         else
3417             ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3418         /* inlined from sv_setpvn */
3419         SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
3420         Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
3421         SvCUR_set(sv, ebuf - ptr);
3422         s = SvEND(sv);
3423         *s = '\0';
3424         if (isIOK)
3425             SvIOK_on(sv);
3426         else
3427             SvIOKp_on(sv);
3428         if (isUIOK)
3429             SvIsUV_on(sv);
3430     }
3431     else if (SvNOKp(sv)) {
3432         if (SvTYPE(sv) < SVt_PVNV)
3433             sv_upgrade(sv, SVt_PVNV);
3434         /* The +20 is pure guesswork.  Configure test needed. --jhi */
3435         s = SvGROW_mutable(sv, NV_DIG + 20);
3436         olderrno = errno;       /* some Xenix systems wipe out errno here */
3437 #ifdef apollo
3438         if (SvNVX(sv) == 0.0)
3439             (void)strcpy(s,"0");
3440         else
3441 #endif /*apollo*/
3442         {
3443             Gconvert(SvNVX(sv), NV_DIG, 0, s);
3444         }
3445         errno = olderrno;
3446 #ifdef FIXNEGATIVEZERO
3447         if (*s == '-' && s[1] == '0' && !s[2])
3448             strcpy(s,"0");
3449 #endif
3450         while (*s) s++;
3451 #ifdef hcx
3452         if (s[-1] == '.')
3453             *--s = '\0';
3454 #endif
3455     }
3456     else {
3457         if (ckWARN(WARN_UNINITIALIZED)
3458             && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3459             report_uninit(sv);
3460         if (lp)
3461         *lp = 0;
3462         if (SvTYPE(sv) < SVt_PV)
3463             /* Typically the caller expects that sv_any is not NULL now.  */
3464             sv_upgrade(sv, SVt_PV);
3465         return (char *)"";
3466     }
3467     {
3468         STRLEN len = s - SvPVX_const(sv);
3469         if (lp) 
3470             *lp = len;
3471         SvCUR_set(sv, len);
3472     }
3473     SvPOK_on(sv);
3474     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3475                           PTR2UV(sv),SvPVX_const(sv)));
3476     if (flags & SV_CONST_RETURN)
3477         return (char *)SvPVX_const(sv);
3478     if (flags & SV_MUTABLE_RETURN)
3479         return SvPVX_mutable(sv);
3480     return SvPVX(sv);
3481
3482   tokensave:
3483     if (SvROK(sv)) {    /* XXX Skip this when sv_pvn_force calls */
3484         /* Sneaky stuff here */
3485
3486       tokensaveref:
3487         if (!tsv)
3488             tsv = newSVpv(tmpbuf, 0);
3489         sv_2mortal(tsv);
3490         if (lp)
3491             *lp = SvCUR(tsv);
3492         return SvPVX(tsv);
3493     }
3494     else {
3495         dVAR;
3496         STRLEN len;
3497         const char *t;
3498
3499         if (tsv) {
3500             sv_2mortal(tsv);
3501             t = SvPVX_const(tsv);
3502             len = SvCUR(tsv);
3503         }
3504         else {
3505             t = tmpbuf;
3506             len = strlen(tmpbuf);
3507         }
3508 #ifdef FIXNEGATIVEZERO
3509         if (len == 2 && t[0] == '-' && t[1] == '0') {
3510             t = "0";
3511             len = 1;
3512         }
3513 #endif
3514         SvUPGRADE(sv, SVt_PV);
3515         if (lp)
3516             *lp = len;
3517         s = SvGROW_mutable(sv, len + 1);
3518         SvCUR_set(sv, len);
3519         SvPOKp_on(sv);
3520         return strcpy(s, t);
3521     }
3522 }
3523
3524 /*
3525 =for apidoc sv_copypv
3526
3527 Copies a stringified representation of the source SV into the
3528 destination SV.  Automatically performs any necessary mg_get and
3529 coercion of numeric values into strings.  Guaranteed to preserve
3530 UTF-8 flag even from overloaded objects.  Similar in nature to
3531 sv_2pv[_flags] but operates directly on an SV instead of just the
3532 string.  Mostly uses sv_2pv_flags to do its work, except when that
3533 would lose the UTF-8'ness of the PV.
3534
3535 =cut
3536 */
3537
3538 void
3539 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3540 {
3541     STRLEN len;
3542     const char *s;
3543     s = SvPV_const(ssv,len);
3544     sv_setpvn(dsv,s,len);
3545     if (SvUTF8(ssv))
3546         SvUTF8_on(dsv);
3547     else
3548         SvUTF8_off(dsv);
3549 }
3550
3551 /*
3552 =for apidoc sv_2pvbyte_nolen
3553
3554 Return a pointer to the byte-encoded representation of the SV.
3555 May cause the SV to be downgraded from UTF-8 as a side-effect.
3556
3557 Usually accessed via the C<SvPVbyte_nolen> macro.
3558
3559 =cut
3560 */
3561
3562 char *
3563 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3564 {
3565     return sv_2pvbyte(sv, 0);
3566 }
3567
3568 /*
3569 =for apidoc sv_2pvbyte
3570
3571 Return a pointer to the byte-encoded representation of the SV, and set *lp
3572 to its length.  May cause the SV to be downgraded from UTF-8 as a
3573 side-effect.
3574
3575 Usually accessed via the C<SvPVbyte> macro.
3576
3577 =cut
3578 */
3579
3580 char *
3581 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3582 {
3583     sv_utf8_downgrade(sv,0);
3584     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3585 }
3586
3587 /*
3588 =for apidoc sv_2pvutf8_nolen
3589
3590 Return a pointer to the UTF-8-encoded representation of the SV.
3591 May cause the SV to be upgraded to UTF-8 as a side-effect.
3592
3593 Usually accessed via the C<SvPVutf8_nolen> macro.
3594
3595 =cut
3596 */
3597
3598 char *
3599 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3600 {
3601     return sv_2pvutf8(sv, 0);
3602 }
3603
3604 /*
3605 =for apidoc sv_2pvutf8
3606
3607 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3608 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3609
3610 Usually accessed via the C<SvPVutf8> macro.
3611
3612 =cut
3613 */
3614
3615 char *
3616 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3617 {
3618     sv_utf8_upgrade(sv);
3619     return SvPV(sv,*lp);
3620 }
3621
3622 /*
3623 =for apidoc sv_2bool
3624
3625 This function is only called on magical items, and is only used by
3626 sv_true() or its macro equivalent.
3627
3628 =cut
3629 */
3630
3631 bool
3632 Perl_sv_2bool(pTHX_ register SV *sv)
3633 {
3634     if (SvGMAGICAL(sv))
3635         mg_get(sv);
3636
3637     if (!SvOK(sv))
3638         return 0;
3639     if (SvROK(sv)) {
3640         SV* tmpsv;
3641         if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3642                 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3643             return (bool)SvTRUE(tmpsv);
3644       return SvRV(sv) != 0;
3645     }
3646     if (SvPOKp(sv)) {
3647         register XPV* Xpvtmp;
3648         if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3649                 (*sv->sv_u.svu_pv > '0' ||
3650                 Xpvtmp->xpv_cur > 1 ||
3651                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3652             return 1;
3653         else
3654             return 0;
3655     }
3656     else {
3657         if (SvIOKp(sv))
3658             return SvIVX(sv) != 0;
3659         else {
3660             if (SvNOKp(sv))
3661                 return SvNVX(sv) != 0.0;
3662             else
3663                 return FALSE;
3664         }
3665     }
3666 }
3667
3668 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3669  * this function provided for binary compatibility only
3670  */
3671
3672
3673 STRLEN
3674 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3675 {
3676     return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3677 }
3678
3679 /*
3680 =for apidoc sv_utf8_upgrade
3681
3682 Converts the PV of an SV to its UTF-8-encoded form.
3683 Forces the SV to string form if it is not already.
3684 Always sets the SvUTF8 flag to avoid future validity checks even
3685 if all the bytes have hibit clear.
3686
3687 This is not as a general purpose byte encoding to Unicode interface:
3688 use the Encode extension for that.
3689
3690 =for apidoc sv_utf8_upgrade_flags
3691
3692 Converts the PV of an SV to its UTF-8-encoded form.
3693 Forces the SV to string form if it is not already.
3694 Always sets the SvUTF8 flag to avoid future validity checks even
3695 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3696 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3697 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3698
3699 This is not as a general purpose byte encoding to Unicode interface:
3700 use the Encode extension for that.
3701
3702 =cut
3703 */
3704
3705 STRLEN
3706 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3707 {
3708     if (sv == &PL_sv_undef)
3709         return 0;
3710     if (!SvPOK(sv)) {
3711         STRLEN len = 0;
3712         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3713             (void) sv_2pv_flags(sv,&len, flags);
3714             if (SvUTF8(sv))
3715                 return len;
3716         } else {
3717             (void) SvPV_force(sv,len);
3718         }
3719     }
3720
3721     if (SvUTF8(sv)) {
3722         return SvCUR(sv);
3723     }
3724
3725     if (SvIsCOW(sv)) {
3726         sv_force_normal_flags(sv, 0);
3727     }
3728
3729     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3730         sv_recode_to_utf8(sv, PL_encoding);
3731     else { /* Assume Latin-1/EBCDIC */
3732         /* This function could be much more efficient if we
3733          * had a FLAG in SVs to signal if there are any hibit
3734          * chars in the PV.  Given that there isn't such a flag
3735          * make the loop as fast as possible. */
3736         const U8 *s = (U8 *) SvPVX_const(sv);
3737         const U8 *e = (U8 *) SvEND(sv);
3738         const U8 *t = s;
3739         int hibit = 0;
3740         
3741         while (t < e) {
3742             U8 ch = *t++;
3743             if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3744                 break;
3745         }
3746         if (hibit) {
3747             STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3748             U8 *recoded = bytes_to_utf8((U8*)s, &len);
3749
3750             SvPV_free(sv); /* No longer using what was there before. */
3751
3752             SvPV_set(sv, (char*)recoded);
3753             SvCUR_set(sv, len - 1);
3754             SvLEN_set(sv, len); /* No longer know the real size. */
3755         }
3756         /* Mark as UTF-8 even if no hibit - saves scanning loop */
3757         SvUTF8_on(sv);
3758     }
3759     return SvCUR(sv);
3760 }
3761
3762 /*
3763 =for apidoc sv_utf8_downgrade
3764
3765 Attempts to convert the PV of an SV from characters to bytes.
3766 If the PV contains a character beyond byte, this conversion will fail;
3767 in this case, either returns false or, if C<fail_ok> is not
3768 true, croaks.
3769
3770 This is not as a general purpose Unicode to byte encoding interface:
3771 use the Encode extension for that.
3772
3773 =cut
3774 */
3775
3776 bool
3777 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3778 {
3779     if (SvPOKp(sv) && SvUTF8(sv)) {
3780         if (SvCUR(sv)) {
3781             U8 *s;
3782             STRLEN len;
3783
3784             if (SvIsCOW(sv)) {
3785                 sv_force_normal_flags(sv, 0);
3786             }
3787             s = (U8 *) SvPV(sv, len);
3788             if (!utf8_to_bytes(s, &len)) {
3789                 if (fail_ok)
3790                     return FALSE;
3791                 else {
3792                     if (PL_op)
3793                         Perl_croak(aTHX_ "Wide character in %s",
3794                                    OP_DESC(PL_op));
3795                     else
3796                         Perl_croak(aTHX_ "Wide character");
3797                 }
3798             }
3799             SvCUR_set(sv, len);
3800         }
3801     }
3802     SvUTF8_off(sv);
3803     return TRUE;
3804 }
3805
3806 /*
3807 =for apidoc sv_utf8_encode
3808
3809 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3810 flag off so that it looks like octets again.
3811
3812 =cut
3813 */
3814
3815 void
3816 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3817 {
3818     (void) sv_utf8_upgrade(sv);
3819     if (SvIsCOW(sv)) {
3820         sv_force_normal_flags(sv, 0);
3821     }
3822     if (SvREADONLY(sv)) {
3823         Perl_croak(aTHX_ PL_no_modify);
3824     }
3825     SvUTF8_off(sv);
3826 }
3827
3828 /*
3829 =for apidoc sv_utf8_decode
3830
3831 If the PV of the SV is an octet sequence in UTF-8
3832 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3833 so that it looks like a character. If the PV contains only single-byte
3834 characters, the C<SvUTF8> flag stays being off.
3835 Scans PV for validity and returns false if the PV is invalid UTF-8.
3836
3837 =cut
3838 */
3839
3840 bool
3841 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3842 {
3843     if (SvPOKp(sv)) {
3844         const U8 *c;
3845         const U8 *e;
3846
3847         /* The octets may have got themselves encoded - get them back as
3848          * bytes
3849          */
3850         if (!sv_utf8_downgrade(sv, TRUE))
3851             return FALSE;
3852
3853         /* it is actually just a matter of turning the utf8 flag on, but
3854          * we want to make sure everything inside is valid utf8 first.
3855          */
3856         c = (const U8 *) SvPVX_const(sv);
3857         if (!is_utf8_string(c, SvCUR(sv)+1))
3858             return FALSE;
3859         e = (const U8 *) SvEND(sv);
3860         while (c < e) {
3861             U8 ch = *c++;
3862             if (!UTF8_IS_INVARIANT(ch)) {
3863                 SvUTF8_on(sv);
3864                 break;
3865             }
3866         }
3867     }
3868     return TRUE;
3869 }
3870
3871 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
3872  * this function provided for binary compatibility only
3873  */
3874
3875 void
3876 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3877 {
3878     sv_setsv_flags(dstr, sstr, SV_GMAGIC);
3879 }
3880
3881 /*
3882 =for apidoc sv_setsv
3883
3884 Copies the contents of the source SV C<ssv> into the destination SV
3885 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3886 function if the source SV needs to be reused. Does not handle 'set' magic.
3887 Loosely speaking, it performs a copy-by-value, obliterating any previous
3888 content of the destination.
3889
3890 You probably want to use one of the assortment of wrappers, such as
3891 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3892 C<SvSetMagicSV_nosteal>.
3893
3894 =for apidoc sv_setsv_flags
3895
3896 Copies the contents of the source SV C<ssv> into the destination SV
3897 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3898 function if the source SV needs to be reused. Does not handle 'set' magic.
3899 Loosely speaking, it performs a copy-by-value, obliterating any previous
3900 content of the destination.
3901 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3902 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3903 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3904 and C<sv_setsv_nomg> are implemented in terms of this function.
3905
3906 You probably want to use one of the assortment of wrappers, such as
3907 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3908 C<SvSetMagicSV_nosteal>.
3909
3910 This is the primary function for copying scalars, and most other
3911 copy-ish functions and macros use this underneath.
3912
3913 =cut
3914 */
3915
3916 void
3917 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3918 {
3919     register U32 sflags;
3920     register int dtype;
3921     register int stype;
3922
3923     if (sstr == dstr)
3924         return;
3925     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3926     if (!sstr)
3927         sstr = &PL_sv_undef;
3928     stype = SvTYPE(sstr);
3929     dtype = SvTYPE(dstr);
3930
3931     SvAMAGIC_off(dstr);
3932     if ( SvVOK(dstr) )
3933     {
3934         /* need to nuke the magic */
3935         mg_free(dstr);
3936         SvRMAGICAL_off(dstr);
3937     }
3938
3939     /* There's a lot of redundancy below but we're going for speed here */
3940
3941     switch (stype) {
3942     case SVt_NULL:
3943       undef_sstr:
3944         if (dtype != SVt_PVGV) {
3945             (void)SvOK_off(dstr);
3946             return;
3947         }
3948         break;
3949     case SVt_IV:
3950         if (SvIOK(sstr)) {
3951             switch (dtype) {
3952             case SVt_NULL:
3953                 sv_upgrade(dstr, SVt_IV);
3954                 break;
3955             case SVt_NV:
3956                 sv_upgrade(dstr, SVt_PVNV);
3957                 break;
3958             case SVt_RV:
3959             case SVt_PV:
3960                 sv_upgrade(dstr, SVt_PVIV);
3961                 break;
3962             }
3963             (void)SvIOK_only(dstr);
3964             SvIV_set(dstr,  SvIVX(sstr));
3965             if (SvIsUV(sstr))
3966                 SvIsUV_on(dstr);
3967             if (SvTAINTED(sstr))
3968                 SvTAINT(dstr);
3969             return;
3970         }
3971         goto undef_sstr;
3972
3973     case SVt_NV:
3974         if (SvNOK(sstr)) {
3975             switch (dtype) {
3976             case SVt_NULL:
3977             case SVt_IV:
3978                 sv_upgrade(dstr, SVt_NV);
3979                 break;
3980             case SVt_RV:
3981             case SVt_PV:
3982             case SVt_PVIV:
3983                 sv_upgrade(dstr, SVt_PVNV);
3984                 break;
3985             }
3986             SvNV_set(dstr, SvNVX(sstr));
3987             (void)SvNOK_only(dstr);
3988             if (SvTAINTED(sstr))
3989                 SvTAINT(dstr);
3990             return;
3991         }
3992         goto undef_sstr;
3993
3994     case SVt_RV:
3995         if (dtype < SVt_RV)
3996             sv_upgrade(dstr, SVt_RV);
3997         else if (dtype == SVt_PVGV &&
3998                  SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3999             sstr = SvRV(sstr);
4000             if (sstr == dstr) {
4001                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4002                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4003                 {
4004                     GvIMPORTED_on(dstr);
4005                 }
4006                 GvMULTI_on(dstr);
4007                 return;
4008             }
4009             goto glob_assign;
4010         }
4011         break;
4012     case SVt_PVFM:
4013 #ifdef PERL_OLD_COPY_ON_WRITE
4014         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
4015             if (dtype < SVt_PVIV)
4016                 sv_upgrade(dstr, SVt_PVIV);
4017             break;
4018         }
4019         /* Fall through */
4020 #endif
4021     case SVt_PV:
4022         if (dtype < SVt_PV)
4023             sv_upgrade(dstr, SVt_PV);
4024         break;
4025     case SVt_PVIV:
4026         if (dtype < SVt_PVIV)
4027             sv_upgrade(dstr, SVt_PVIV);
4028         break;
4029     case SVt_PVNV:
4030         if (dtype < SVt_PVNV)
4031             sv_upgrade(dstr, SVt_PVNV);
4032         break;
4033     case SVt_PVAV:
4034     case SVt_PVHV:
4035     case SVt_PVCV:
4036     case SVt_PVIO:
4037         {
4038         const char * const type = sv_reftype(sstr,0);
4039         if (PL_op)
4040             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
4041         else
4042             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4043         }
4044         break;
4045
4046     case SVt_PVGV:
4047         if (dtype <= SVt_PVGV) {
4048   glob_assign:
4049             if (dtype != SVt_PVGV) {
4050                 const char * const name = GvNAME(sstr);
4051                 const STRLEN len = GvNAMELEN(sstr);
4052                 /* don't upgrade SVt_PVLV: it can hold a glob */
4053                 if (dtype != SVt_PVLV)
4054                     sv_upgrade(dstr, SVt_PVGV);
4055                 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
4056                 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
4057                 GvNAME(dstr) = savepvn(name, len);
4058                 GvNAMELEN(dstr) = len;
4059                 SvFAKE_on(dstr);        /* can coerce to non-glob */
4060             }
4061             /* ahem, death to those who redefine active sort subs */
4062             else if (PL_curstackinfo->si_type == PERLSI_SORT
4063                      && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
4064                 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
4065                       GvNAME(dstr));
4066
4067 #ifdef GV_UNIQUE_CHECK
4068                 if (GvUNIQUE((GV*)dstr)) {
4069                     Perl_croak(aTHX_ PL_no_modify);
4070                 }
4071 #endif
4072
4073             (void)SvOK_off(dstr);
4074             GvINTRO_off(dstr);          /* one-shot flag */
4075             gp_free((GV*)dstr);
4076             GvGP(dstr) = gp_ref(GvGP(sstr));
4077             if (SvTAINTED(sstr))
4078                 SvTAINT(dstr);
4079             if (GvIMPORTED(dstr) != GVf_IMPORTED
4080                 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4081             {
4082                 GvIMPORTED_on(dstr);
4083             }
4084             GvMULTI_on(dstr);
4085             return;
4086         }
4087         /* FALL THROUGH */
4088
4089     default:
4090         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4091             mg_get(sstr);
4092             if ((int)SvTYPE(sstr) != stype) {
4093                 stype = SvTYPE(sstr);
4094                 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
4095                     goto glob_assign;
4096             }
4097         }
4098         if (stype == SVt_PVLV)
4099             SvUPGRADE(dstr, SVt_PVNV);
4100         else
4101             SvUPGRADE(dstr, (U32)stype);
4102     }
4103
4104     sflags = SvFLAGS(sstr);
4105
4106     if (sflags & SVf_ROK) {
4107         if (dtype >= SVt_PV) {
4108             if (dtype == SVt_PVGV) {
4109                 SV *sref = SvREFCNT_inc(SvRV(sstr));
4110                 SV *dref = 0;
4111                 const int intro = GvINTRO(dstr);
4112
4113 #ifdef GV_UNIQUE_CHECK
4114                 if (GvUNIQUE((GV*)dstr)) {
4115                     Perl_croak(aTHX_ PL_no_modify);
4116                 }
4117 #endif
4118
4119                 if (intro) {
4120                     GvINTRO_off(dstr);  /* one-shot flag */
4121                     GvLINE(dstr) = CopLINE(PL_curcop);
4122                     GvEGV(dstr) = (GV*)dstr;
4123                 }
4124                 GvMULTI_on(dstr);
4125                 switch (SvTYPE(sref)) {
4126                 case SVt_PVAV:
4127                     if (intro)
4128                         SAVEGENERICSV(GvAV(dstr));
4129                     else
4130                         dref = (SV*)GvAV(dstr);
4131                     GvAV(dstr) = (AV*)sref;
4132                     if (!GvIMPORTED_AV(dstr)
4133                         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4134                     {
4135                         GvIMPORTED_AV_on(dstr);
4136                     }
4137                     break;
4138                 case SVt_PVHV:
4139                     if (intro)
4140                         SAVEGENERICSV(GvHV(dstr));
4141                     else
4142                         dref = (SV*)GvHV(dstr);
4143                     GvHV(dstr) = (HV*)sref;
4144                     if (!GvIMPORTED_HV(dstr)
4145                         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4146                     {
4147                         GvIMPORTED_HV_on(dstr);
4148                     }
4149                     break;
4150                 case SVt_PVCV:
4151                     if (intro) {
4152                         if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
4153                             SvREFCNT_dec(GvCV(dstr));
4154                             GvCV(dstr) = Nullcv;
4155                             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4156                             PL_sub_generation++;
4157                         }
4158                         SAVEGENERICSV(GvCV(dstr));
4159                     }
4160                     else
4161                         dref = (SV*)GvCV(dstr);
4162                     if (GvCV(dstr) != (CV*)sref) {
4163                         CV* cv = GvCV(dstr);
4164                         if (cv) {
4165                             if (!GvCVGEN((GV*)dstr) &&
4166                                 (CvROOT(cv) || CvXSUB(cv)))
4167                             {
4168                                 /* ahem, death to those who redefine
4169                                  * active sort subs */
4170                                 if (PL_curstackinfo->si_type == PERLSI_SORT &&
4171                                       PL_sortcop == CvSTART(cv))
4172                                     Perl_croak(aTHX_
4173                                     "Can't redefine active sort subroutine %s",
4174                                           GvENAME((GV*)dstr));
4175                                 /* Redefining a sub - warning is mandatory if
4176                                    it was a const and its value changed. */
4177                                 if (ckWARN(WARN_REDEFINE)
4178                                     || (CvCONST(cv)
4179                                         && (!CvCONST((CV*)sref)
4180                                             || sv_cmp(cv_const_sv(cv),
4181                                                       cv_const_sv((CV*)sref)))))
4182                                 {
4183                                     Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
4184                                         CvCONST(cv)
4185                                         ? "Constant subroutine %s::%s redefined"
4186                                         : "Subroutine %s::%s redefined",
4187                                         HvNAME_get(GvSTASH((GV*)dstr)),
4188                                         GvENAME((GV*)dstr));
4189                                 }
4190                             }
4191                             if (!intro)
4192                                 cv_ckproto(cv, (GV*)dstr,
4193                                            SvPOK(sref)
4194                                            ? SvPVX_const(sref) : Nullch);
4195                         }
4196                         GvCV(dstr) = (CV*)sref;
4197                         GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4198                         GvASSUMECV_on(dstr);
4199                         PL_sub_generation++;
4200                     }
4201                     if (!GvIMPORTED_CV(dstr)
4202                         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4203                     {
4204                         GvIMPORTED_CV_on(dstr);
4205                     }
4206                     break;
4207                 case SVt_PVIO:
4208                     if (intro)
4209                         SAVEGENERICSV(GvIOp(dstr));
4210                     else
4211                         dref = (SV*)GvIOp(dstr);
4212                     GvIOp(dstr) = (IO*)sref;
4213                     break;
4214                 case SVt_PVFM:
4215                     if (intro)
4216                         SAVEGENERICSV(GvFORM(dstr));
4217                     else
4218                         dref = (SV*)GvFORM(dstr);
4219                     GvFORM(dstr) = (CV*)sref;
4220                     break;
4221                 default:
4222                     if (intro)
4223                         SAVEGENERICSV(GvSV(dstr));
4224                     else
4225                         dref = (SV*)GvSV(dstr);
4226                     GvSV(dstr) = sref;
4227                     if (!GvIMPORTED_SV(dstr)
4228                         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4229                     {
4230                         GvIMPORTED_SV_on(dstr);
4231                     }
4232                     break;
4233                 }
4234                 if (dref)
4235                     SvREFCNT_dec(dref);
4236                 if (SvTAINTED(sstr))
4237                     SvTAINT(dstr);
4238                 return;
4239             }
4240             if (SvPVX_const(dstr)) {
4241                 SvPV_free(dstr);
4242                 SvLEN_set(dstr, 0);
4243                 SvCUR_set(dstr, 0);
4244             }
4245         }
4246         (void)SvOK_off(dstr);
4247         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4248         SvROK_on(dstr);
4249         if (sflags & SVp_NOK) {
4250             SvNOKp_on(dstr);
4251             /* Only set the public OK flag if the source has public OK.  */
4252             if (sflags & SVf_NOK)
4253                 SvFLAGS(dstr) |= SVf_NOK;
4254             SvNV_set(dstr, SvNVX(sstr));
4255         }
4256         if (sflags & SVp_IOK) {
4257             (void)SvIOKp_on(dstr);
4258             if (sflags & SVf_IOK)
4259                 SvFLAGS(dstr) |= SVf_IOK;
4260             if (sflags & SVf_IVisUV)
4261                 SvIsUV_on(dstr);
4262             SvIV_set(dstr, SvIVX(sstr));
4263         }
4264         if (SvAMAGIC(sstr)) {
4265             SvAMAGIC_on(dstr);
4266         }
4267     }
4268     else if (sflags & SVp_POK) {
4269         bool isSwipe = 0;
4270
4271         /*
4272          * Check to see if we can just swipe the string.  If so, it's a
4273          * possible small lose on short strings, but a big win on long ones.
4274          * It might even be a win on short strings if SvPVX_const(dstr)
4275          * has to be allocated and SvPVX_const(sstr) has to be freed.
4276          */
4277
4278         /* Whichever path we take through the next code, we want this true,
4279            and doing it now facilitates the COW check.  */
4280         (void)SvPOK_only(dstr);
4281
4282         if (
4283             /* We're not already COW  */
4284             ((sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
4285 #ifndef PERL_OLD_COPY_ON_WRITE
4286              /* or we are, but dstr isn't a suitable target.  */
4287              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4288 #endif
4289              )
4290             &&
4291             !(isSwipe =
4292                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4293                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4294                  (!(flags & SV_NOSTEAL)) &&
4295                                         /* and we're allowed to steal temps */
4296                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4297                  SvLEN(sstr)    &&        /* and really is a string */
4298                                 /* and won't be needed again, potentially */
4299               !(PL_op && PL_op->op_type == OP_AASSIGN))
4300 #ifdef PERL_OLD_COPY_ON_WRITE
4301             && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4302                  && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4303                  && SvTYPE(sstr) >= SVt_PVIV)
4304 #endif
4305             ) {
4306             /* Failed the swipe test, and it's not a shared hash key either.
4307                Have to copy the string.  */
4308             STRLEN len = SvCUR(sstr);
4309             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4310             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4311             SvCUR_set(dstr, len);
4312             *SvEND(dstr) = '\0';
4313         } else {
4314             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4315                be true in here.  */
4316             /* Either it's a shared hash key, or it's suitable for
4317                copy-on-write or we can swipe the string.  */
4318             if (DEBUG_C_TEST) {
4319                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4320                 sv_dump(sstr);
4321                 sv_dump(dstr);
4322             }
4323 #ifdef PERL_OLD_COPY_ON_WRITE
4324             if (!isSwipe) {
4325                 /* I believe I should acquire a global SV mutex if
4326                    it's a COW sv (not a shared hash key) to stop
4327                    it going un copy-on-write.
4328                    If the source SV has gone un copy on write between up there
4329                    and down here, then (assert() that) it is of the correct
4330                    form to make it copy on write again */
4331                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4332                     != (SVf_FAKE | SVf_READONLY)) {
4333                     SvREADONLY_on(sstr);
4334                     SvFAKE_on(sstr);
4335                     /* Make the source SV into a loop of 1.
4336                        (about to become 2) */
4337                     SV_COW_NEXT_SV_SET(sstr, sstr);
4338                 }
4339             }
4340 #endif
4341             /* Initial code is common.  */
4342             if (SvPVX_const(dstr)) {            /* we know that dtype >= SVt_PV */
4343                 if (SvOOK(dstr)) {
4344                     SvFLAGS(dstr) &= ~SVf_OOK;
4345                     Safefree(SvPVX_const(dstr) - SvIVX(dstr));
4346                 }
4347                 else if (SvLEN(dstr))
4348                     Safefree(SvPVX_const(dstr));
4349             }
4350
4351             if (!isSwipe) {
4352                 /* making another shared SV.  */
4353                 STRLEN cur = SvCUR(sstr);
4354                 STRLEN len = SvLEN(sstr);
4355 #ifdef PERL_OLD_COPY_ON_WRITE
4356                 if (len) {
4357                     assert (SvTYPE(dstr) >= SVt_PVIV);
4358                     /* SvIsCOW_normal */
4359                     /* splice us in between source and next-after-source.  */
4360                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4361                     SV_COW_NEXT_SV_SET(sstr, dstr);
4362                     SvPV_set(dstr, SvPVX_mutable(sstr));
4363                 } else
4364 #endif
4365                 {
4366                     /* SvIsCOW_shared_hash */
4367                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4368                                           "Copy on write: Sharing hash\n"));
4369
4370                     assert (SvTYPE(dstr) >= SVt_PV);
4371                     SvPV_set(dstr,
4372                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4373                 }
4374                 SvLEN_set(dstr, len);
4375                 SvCUR_set(dstr, cur);
4376                 SvREADONLY_on(dstr);
4377                 SvFAKE_on(dstr);
4378                 /* Relesase a global SV mutex.  */
4379             }
4380             else
4381                 {       /* Passes the swipe test.  */
4382                 SvPV_set(dstr, SvPVX_mutable(sstr));
4383                 SvLEN_set(dstr, SvLEN(sstr));
4384                 SvCUR_set(dstr, SvCUR(sstr));
4385
4386                 SvTEMP_off(dstr);
4387                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4388                 SvPV_set(sstr, Nullch);
4389                 SvLEN_set(sstr, 0);
4390                 SvCUR_set(sstr, 0);
4391                 SvTEMP_off(sstr);
4392             }
4393         }
4394         if (sflags & SVf_UTF8)
4395             SvUTF8_on(dstr);
4396         if (sflags & SVp_NOK) {
4397             SvNOKp_on(dstr);
4398             if (sflags & SVf_NOK)
4399                 SvFLAGS(dstr) |= SVf_NOK;
4400             SvNV_set(dstr, SvNVX(sstr));
4401         }
4402         if (sflags & SVp_IOK) {
4403             (void)SvIOKp_on(dstr);
4404             if (sflags & SVf_IOK)
4405                 SvFLAGS(dstr) |= SVf_IOK;
4406             if (sflags & SVf_IVisUV)
4407                 SvIsUV_on(dstr);
4408             SvIV_set(dstr, SvIVX(sstr));
4409         }
4410         if (SvVOK(sstr)) {
4411             MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4412             sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4413                         smg->mg_ptr, smg->mg_len);
4414             SvRMAGICAL_on(dstr);
4415         }
4416     }
4417     else if (sflags & SVp_IOK) {
4418         if (sflags & SVf_IOK)
4419             (void)SvIOK_only(dstr);
4420         else {
4421             (void)SvOK_off(dstr);
4422             (void)SvIOKp_on(dstr);
4423         }
4424         /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4425         if (sflags & SVf_IVisUV)
4426             SvIsUV_on(dstr);
4427         SvIV_set(dstr, SvIVX(sstr));
4428         if (sflags & SVp_NOK) {
4429             if (sflags & SVf_NOK)
4430                 (void)SvNOK_on(dstr);
4431             else
4432                 (void)SvNOKp_on(dstr);
4433             SvNV_set(dstr, SvNVX(sstr));
4434         }
4435     }
4436     else if (sflags & SVp_NOK) {
4437         if (sflags & SVf_NOK)
4438             (void)SvNOK_only(dstr);
4439         else {
4440             (void)SvOK_off(dstr);
4441             SvNOKp_on(dstr);
4442         }
4443         SvNV_set(dstr, SvNVX(sstr));
4444     }
4445     else {
4446         if (dtype == SVt_PVGV) {
4447             if (ckWARN(WARN_MISC))
4448                 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4449         }
4450         else
4451             (void)SvOK_off(dstr);
4452     }
4453     if (SvTAINTED(sstr))
4454         SvTAINT(dstr);
4455 }
4456
4457 /*
4458 =for apidoc sv_setsv_mg
4459
4460 Like C<sv_setsv>, but also handles 'set' magic.
4461
4462 =cut
4463 */
4464
4465 void
4466 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4467 {
4468     sv_setsv(dstr,sstr);
4469     SvSETMAGIC(dstr);
4470 }
4471
4472 #ifdef PERL_OLD_COPY_ON_WRITE
4473 SV *
4474 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4475 {
4476     STRLEN cur = SvCUR(sstr);
4477     STRLEN len = SvLEN(sstr);
4478     register char *new_pv;
4479
4480     if (DEBUG_C_TEST) {
4481         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4482                       sstr, dstr);
4483         sv_dump(sstr);
4484         if (dstr)
4485                     sv_dump(dstr);
4486     }
4487
4488     if (dstr) {
4489         if (SvTHINKFIRST(dstr))
4490             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4491         else if (SvPVX_const(dstr))
4492             Safefree(SvPVX_const(dstr));
4493     }
4494     else
4495         new_SV(dstr);
4496     SvUPGRADE(dstr, SVt_PVIV);
4497
4498     assert (SvPOK(sstr));
4499     assert (SvPOKp(sstr));
4500     assert (!SvIOK(sstr));
4501     assert (!SvIOKp(sstr));
4502     assert (!SvNOK(sstr));
4503     assert (!SvNOKp(sstr));
4504
4505     if (SvIsCOW(sstr)) {
4506
4507         if (SvLEN(sstr) == 0) {
4508             /* source is a COW shared hash key.  */
4509             DEBUG_C(PerlIO_printf(Perl_debug_log,
4510                                   "Fast copy on write: Sharing hash\n"));
4511             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4512             goto common_exit;
4513         }
4514         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4515     } else {
4516         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4517         SvUPGRADE(sstr, SVt_PVIV);
4518         SvREADONLY_on(sstr);
4519         SvFAKE_on(sstr);
4520         DEBUG_C(PerlIO_printf(Perl_debug_log,
4521                               "Fast copy on write: Converting sstr to COW\n"));
4522         SV_COW_NEXT_SV_SET(dstr, sstr);
4523     }
4524     SV_COW_NEXT_SV_SET(sstr, dstr);
4525     new_pv = SvPVX_mutable(sstr);
4526
4527   common_exit:
4528     SvPV_set(dstr, new_pv);
4529     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4530     if (SvUTF8(sstr))
4531         SvUTF8_on(dstr);
4532     SvLEN_set(dstr, len);
4533     SvCUR_set(dstr, cur);
4534     if (DEBUG_C_TEST) {
4535         sv_dump(dstr);
4536     }
4537     return dstr;
4538 }
4539 #endif
4540
4541 /*
4542 =for apidoc sv_setpvn
4543
4544 Copies a string into an SV.  The C<len> parameter indicates the number of
4545 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4546 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4547
4548 =cut
4549 */
4550
4551 void
4552 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4553 {
4554     register char *dptr;
4555
4556     SV_CHECK_THINKFIRST_COW_DROP(sv);
4557     if (!ptr) {
4558         (void)SvOK_off(sv);
4559         return;
4560     }
4561     else {
4562         /* len is STRLEN which is unsigned, need to copy to signed */
4563         const IV iv = len;
4564         if (iv < 0)
4565             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4566     }
4567     SvUPGRADE(sv, SVt_PV);
4568
4569     dptr = SvGROW(sv, len + 1);
4570     Move(ptr,dptr,len,char);
4571     dptr[len] = '\0';
4572     SvCUR_set(sv, len);
4573     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4574     SvTAINT(sv);
4575 }
4576
4577 /*
4578 =for apidoc sv_setpvn_mg
4579
4580 Like C<sv_setpvn>, but also handles 'set' magic.
4581
4582 =cut
4583 */
4584
4585 void
4586 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4587 {
4588     sv_setpvn(sv,ptr,len);
4589     SvSETMAGIC(sv);
4590 }
4591
4592 /*
4593 =for apidoc sv_setpv
4594
4595 Copies a string into an SV.  The string must be null-terminated.  Does not
4596 handle 'set' magic.  See C<sv_setpv_mg>.
4597
4598 =cut
4599 */
4600
4601 void
4602 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4603 {
4604     register STRLEN len;
4605
4606     SV_CHECK_THINKFIRST_COW_DROP(sv);
4607     if (!ptr) {
4608         (void)SvOK_off(sv);
4609         return;
4610     }
4611     len = strlen(ptr);
4612     SvUPGRADE(sv, SVt_PV);
4613
4614     SvGROW(sv, len + 1);
4615     Move(ptr,SvPVX(sv),len+1,char);
4616     SvCUR_set(sv, len);
4617     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4618     SvTAINT(sv);
4619 }
4620
4621 /*
4622 =for apidoc sv_setpv_mg
4623
4624 Like C<sv_setpv>, but also handles 'set' magic.
4625
4626 =cut
4627 */
4628
4629 void
4630 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4631 {
4632     sv_setpv(sv,ptr);
4633     SvSETMAGIC(sv);
4634 }
4635
4636 /*
4637 =for apidoc sv_usepvn
4638
4639 Tells an SV to use C<ptr> to find its string value.  Normally the string is
4640 stored inside the SV but sv_usepvn allows the SV to use an outside string.
4641 The C<ptr> should point to memory that was allocated by C<malloc>.  The
4642 string length, C<len>, must be supplied.  This function will realloc the
4643 memory pointed to by C<ptr>, so that pointer should not be freed or used by
4644 the programmer after giving it to sv_usepvn.  Does not handle 'set' magic.
4645 See C<sv_usepvn_mg>.
4646
4647 =cut
4648 */
4649
4650 void
4651 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4652 {
4653     STRLEN allocate;
4654     SV_CHECK_THINKFIRST_COW_DROP(sv);
4655     SvUPGRADE(sv, SVt_PV);
4656     if (!ptr) {
4657         (void)SvOK_off(sv);
4658         return;
4659     }
4660     if (SvPVX_const(sv))
4661         SvPV_free(sv);
4662
4663     allocate = PERL_STRLEN_ROUNDUP(len + 1);
4664     ptr = saferealloc (ptr, allocate);
4665     SvPV_set(sv, ptr);
4666     SvCUR_set(sv, len);
4667     SvLEN_set(sv, allocate);
4668     *SvEND(sv) = '\0';
4669     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4670     SvTAINT(sv);
4671 }
4672
4673 /*
4674 =for apidoc sv_usepvn_mg
4675
4676 Like C<sv_usepvn>, but also handles 'set' magic.
4677
4678 =cut
4679 */
4680
4681 void
4682 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4683 {
4684     sv_usepvn(sv,ptr,len);
4685     SvSETMAGIC(sv);
4686 }
4687
4688 #ifdef PERL_OLD_COPY_ON_WRITE
4689 /* Need to do this *after* making the SV normal, as we need the buffer
4690    pointer to remain valid until after we've copied it.  If we let go too early,
4691    another thread could invalidate it by unsharing last of the same hash key
4692    (which it can do by means other than releasing copy-on-write Svs)
4693    or by changing the other copy-on-write SVs in the loop.  */
4694 STATIC void
4695 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, STRLEN len, SV *after)
4696 {
4697     if (len) { /* this SV was SvIsCOW_normal(sv) */
4698          /* we need to find the SV pointing to us.  */
4699         SV *current = SV_COW_NEXT_SV(after);
4700
4701         if (current == sv) {
4702             /* The SV we point to points back to us (there were only two of us
4703                in the loop.)
4704                Hence other SV is no longer copy on write either.  */
4705             SvFAKE_off(after);
4706             SvREADONLY_off(after);
4707         } else {
4708             /* We need to follow the pointers around the loop.  */
4709             SV *next;
4710             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4711                 assert (next);
4712                 current = next;
4713                  /* don't loop forever if the structure is bust, and we have
4714                     a pointer into a closed loop.  */
4715                 assert (current != after);
4716                 assert (SvPVX_const(current) == pvx);
4717             }
4718             /* Make the SV before us point to the SV after us.  */
4719             SV_COW_NEXT_SV_SET(current, after);
4720         }
4721     } else {
4722         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4723     }
4724 }
4725
4726 int
4727 Perl_sv_release_IVX(pTHX_ register SV *sv)
4728 {
4729     if (SvIsCOW(sv))
4730         sv_force_normal_flags(sv, 0);
4731     SvOOK_off(sv);
4732     return 0;
4733 }
4734 #endif
4735 /*
4736 =for apidoc sv_force_normal_flags
4737
4738 Undo various types of fakery on an SV: if the PV is a shared string, make
4739 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4740 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4741 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4742 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4743 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4744 set to some other value.) In addition, the C<flags> parameter gets passed to
4745 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4746 with flags set to 0.
4747
4748 =cut
4749 */
4750
4751 void
4752 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4753 {
4754 #ifdef PERL_OLD_COPY_ON_WRITE
4755     if (SvREADONLY(sv)) {
4756         /* At this point I believe I should acquire a global SV mutex.  */
4757         if (SvFAKE(sv)) {
4758             const char *pvx = SvPVX_const(sv);
4759             const STRLEN len = SvLEN(sv);
4760             const STRLEN cur = SvCUR(sv);
4761             SV * const next = SV_COW_NEXT_SV(sv);   /* next COW sv in the loop. */
4762             if (DEBUG_C_TEST) {
4763                 PerlIO_printf(Perl_debug_log,
4764                               "Copy on write: Force normal %ld\n",
4765                               (long) flags);
4766                 sv_dump(sv);
4767             }
4768             SvFAKE_off(sv);
4769             SvREADONLY_off(sv);
4770             /* This SV doesn't own the buffer, so need to New() a new one:  */
4771             SvPV_set(sv, (char*)0);
4772             SvLEN_set(sv, 0);
4773             if (flags & SV_COW_DROP_PV) {
4774                 /* OK, so we don't need to copy our buffer.  */
4775                 SvPOK_off(sv);
4776             } else {
4777                 SvGROW(sv, cur + 1);
4778                 Move(pvx,SvPVX(sv),cur,char);
4779                 SvCUR_set(sv, cur);
4780                 *SvEND(sv) = '\0';
4781             }
4782             sv_release_COW(sv, pvx, len, next);
4783             if (DEBUG_C_TEST) {
4784                 sv_dump(sv);
4785             }
4786         }
4787         else if (IN_PERL_RUNTIME)
4788             Perl_croak(aTHX_ PL_no_modify);
4789         /* At this point I believe that I can drop the global SV mutex.  */
4790     }
4791 #else
4792     if (SvREADONLY(sv)) {
4793         if (SvFAKE(sv)) {
4794             const char *pvx = SvPVX_const(sv);
4795             const STRLEN len = SvCUR(sv);
4796             SvFAKE_off(sv);
4797             SvREADONLY_off(sv);
4798             SvPV_set(sv, Nullch);
4799             SvLEN_set(sv, 0);
4800             SvGROW(sv, len + 1);
4801             Move(pvx,SvPVX_const(sv),len,char);
4802             *SvEND(sv) = '\0';
4803             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4804         }
4805         else if (IN_PERL_RUNTIME)
4806             Perl_croak(aTHX_ PL_no_modify);
4807     }
4808 #endif
4809     if (SvROK(sv))
4810         sv_unref_flags(sv, flags);
4811     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4812         sv_unglob(sv);
4813 }
4814
4815 /*
4816 =for apidoc sv_force_normal
4817
4818 Undo various types of fakery on an SV: if the PV is a shared string, make
4819 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4820 an xpvmg. See also C<sv_force_normal_flags>.
4821
4822 =cut
4823 */
4824
4825 void
4826 Perl_sv_force_normal(pTHX_ register SV *sv)
4827 {
4828     sv_force_normal_flags(sv, 0);
4829 }
4830
4831 /*
4832 =for apidoc sv_chop
4833
4834 Efficient removal of characters from the beginning of the string buffer.
4835 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4836 the string buffer.  The C<ptr> becomes the first character of the adjusted
4837 string. Uses the "OOK hack".
4838 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4839 refer to the same chunk of data.
4840
4841 =cut
4842 */
4843
4844 void
4845 Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
4846 {
4847     register STRLEN delta;
4848     if (!ptr || !SvPOKp(sv))
4849         return;
4850     delta = ptr - SvPVX_const(sv);
4851     SV_CHECK_THINKFIRST(sv);
4852     if (SvTYPE(sv) < SVt_PVIV)
4853         sv_upgrade(sv,SVt_PVIV);
4854
4855     if (!SvOOK(sv)) {
4856         if (!SvLEN(sv)) { /* make copy of shared string */
4857             const char *pvx = SvPVX_const(sv);
4858             const STRLEN len = SvCUR(sv);
4859             SvGROW(sv, len + 1);
4860             Move(pvx,SvPVX_const(sv),len,char);
4861             *SvEND(sv) = '\0';
4862         }
4863         SvIV_set(sv, 0);
4864         /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4865            and we do that anyway inside the SvNIOK_off
4866         */
4867         SvFLAGS(sv) |= SVf_OOK;
4868     }
4869     SvNIOK_off(sv);
4870     SvLEN_set(sv, SvLEN(sv) - delta);
4871     SvCUR_set(sv, SvCUR(sv) - delta);
4872     SvPV_set(sv, SvPVX(sv) + delta);
4873     SvIV_set(sv, SvIVX(sv) + delta);
4874 }
4875
4876 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
4877  * this function provided for binary compatibility only
4878  */
4879
4880 void
4881 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
4882 {
4883     sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
4884 }
4885
4886 /*
4887 =for apidoc sv_catpvn
4888
4889 Concatenates the string onto the end of the string which is in the SV.  The
4890 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4891 status set, then the bytes appended should be valid UTF-8.
4892 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4893
4894 =for apidoc sv_catpvn_flags
4895
4896 Concatenates the string onto the end of the string which is in the SV.  The
4897 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4898 status set, then the bytes appended should be valid UTF-8.
4899 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4900 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4901 in terms of this function.
4902
4903 =cut
4904 */
4905
4906 void
4907 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4908 {
4909     STRLEN dlen;
4910     const char *dstr = SvPV_force_flags(dsv, dlen, flags);
4911
4912     SvGROW(dsv, dlen + slen + 1);
4913     if (sstr == dstr)
4914         sstr = SvPVX_const(dsv);
4915     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4916     SvCUR_set(dsv, SvCUR(dsv) + slen);
4917     *SvEND(dsv) = '\0';
4918     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4919     SvTAINT(dsv);
4920 }
4921
4922 /*
4923 =for apidoc sv_catpvn_mg
4924
4925 Like C<sv_catpvn>, but also handles 'set' magic.
4926
4927 =cut
4928 */
4929
4930 void
4931 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4932 {
4933     sv_catpvn(sv,ptr,len);
4934     SvSETMAGIC(sv);
4935 }
4936
4937 /* sv_catsv() is now a macro using Perl_sv_catsv_flags();
4938  * this function provided for binary compatibility only
4939  */
4940
4941 void
4942 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
4943 {
4944     sv_catsv_flags(dstr, sstr, SV_GMAGIC);
4945 }
4946
4947 /*
4948 =for apidoc sv_catsv
4949
4950 Concatenates the string from SV C<ssv> onto the end of the string in
4951 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4952 not 'set' magic.  See C<sv_catsv_mg>.
4953
4954 =for apidoc sv_catsv_flags
4955
4956 Concatenates the string from SV C<ssv> onto the end of the string in
4957 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4958 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4959 and C<sv_catsv_nomg> are implemented in terms of this function.
4960
4961 =cut */
4962
4963 void
4964 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4965 {
4966     const char *spv;
4967     STRLEN slen;
4968     if (!ssv)
4969         return;
4970     if ((spv = SvPV_const(ssv, slen))) {
4971         /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4972             gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4973             Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4974             get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
4975             dsv->sv_flags doesn't have that bit set.
4976                 Andy Dougherty  12 Oct 2001
4977         */
4978         const I32 sutf8 = DO_UTF8(ssv);
4979         I32 dutf8;
4980
4981         if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4982             mg_get(dsv);
4983         dutf8 = DO_UTF8(dsv);
4984
4985         if (dutf8 != sutf8) {
4986             if (dutf8) {
4987                 /* Not modifying source SV, so taking a temporary copy. */
4988                 SV* csv = sv_2mortal(newSVpvn(spv, slen));
4989
4990                 sv_utf8_upgrade(csv);
4991                 spv = SvPV_const(csv, slen);
4992             }
4993             else
4994                 sv_utf8_upgrade_nomg(dsv);
4995         }
4996         sv_catpvn_nomg(dsv, spv, slen);
4997     }
4998 }
4999
5000 /*
5001 =for apidoc sv_catsv_mg
5002
5003 Like C<sv_catsv>, but also handles 'set' magic.
5004
5005 =cut
5006 */
5007
5008 void
5009 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
5010 {
5011     sv_catsv(dsv,ssv);
5012     SvSETMAGIC(dsv);
5013 }
5014
5015 /*
5016 =for apidoc sv_catpv
5017
5018 Concatenates the string onto the end of the string which is in the SV.
5019 If the SV has the UTF-8 status set, then the bytes appended should be
5020 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5021
5022 =cut */
5023
5024 void
5025 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
5026 {
5027     register STRLEN len;
5028     STRLEN tlen;
5029     char *junk;
5030
5031     if (!ptr)
5032         return;
5033     junk = SvPV_force(sv, tlen);
5034     len = strlen(ptr);
5035     SvGROW(sv, tlen + len + 1);
5036     if (ptr == junk)
5037         ptr = SvPVX_const(sv);
5038     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5039     SvCUR_set(sv, SvCUR(sv) + len);
5040     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5041     SvTAINT(sv);
5042 }
5043
5044 /*
5045 =for apidoc sv_catpv_mg
5046
5047 Like C<sv_catpv>, but also handles 'set' magic.
5048
5049 =cut
5050 */
5051
5052 void
5053 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
5054 {
5055     sv_catpv(sv,ptr);
5056     SvSETMAGIC(sv);
5057 }
5058
5059 /*
5060 =for apidoc newSV
5061
5062 Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
5063 with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
5064 macro.
5065
5066 =cut
5067 */
5068
5069 SV *
5070 Perl_newSV(pTHX_ STRLEN len)
5071 {
5072     register SV *sv;
5073
5074     new_SV(sv);
5075     if (len) {
5076         sv_upgrade(sv, SVt_PV);
5077         SvGROW(sv, len + 1);
5078     }
5079     return sv;
5080 }
5081 /*
5082 =for apidoc sv_magicext
5083
5084 Adds magic to an SV, upgrading it if necessary. Applies the
5085 supplied vtable and returns a pointer to the magic added.
5086
5087 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5088 In particular, you can add magic to SvREADONLY SVs, and add more than
5089 one instance of the same 'how'.
5090
5091 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5092 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5093 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5094 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5095
5096 (This is now used as a subroutine by C<sv_magic>.)
5097
5098 =cut
5099 */
5100 MAGIC * 
5101 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, const MGVTBL *vtable,
5102                  const char* name, I32 namlen)
5103 {
5104     MAGIC* mg;
5105
5106     if (SvTYPE(sv) < SVt_PVMG) {
5107         SvUPGRADE(sv, SVt_PVMG);
5108     }
5109     Newz(702,mg, 1, MAGIC);
5110     mg->mg_moremagic = SvMAGIC(sv);
5111     SvMAGIC_set(sv, mg);
5112
5113     /* Sometimes a magic contains a reference loop, where the sv and
5114        object refer to each other.  To prevent a reference loop that
5115        would prevent such objects being freed, we look for such loops
5116        and if we find one we avoid incrementing the object refcount.
5117
5118        Note we cannot do this to avoid self-tie loops as intervening RV must
5119        have its REFCNT incremented to keep it in existence.
5120
5121     */
5122     if (!obj || obj == sv ||
5123         how == PERL_MAGIC_arylen ||
5124         how == PERL_MAGIC_qr ||
5125         how == PERL_MAGIC_symtab ||
5126         (SvTYPE(obj) == SVt_PVGV &&
5127             (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
5128             GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
5129             GvFORM(obj) == (CV*)sv)))
5130     {
5131         mg->mg_obj = obj;
5132     }
5133     else {
5134         mg->mg_obj = SvREFCNT_inc(obj);
5135         mg->mg_flags |= MGf_REFCOUNTED;
5136     }
5137
5138     /* Normal self-ties simply pass a null object, and instead of
5139        using mg_obj directly, use the SvTIED_obj macro to produce a
5140        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5141        with an RV obj pointing to the glob containing the PVIO.  In
5142        this case, to avoid a reference loop, we need to weaken the
5143        reference.
5144     */
5145
5146     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5147         obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
5148     {
5149       sv_rvweaken(obj);
5150     }
5151
5152     mg->mg_type = how;
5153     mg->mg_len = namlen;
5154     if (name) {
5155         if (namlen > 0)
5156             mg->mg_ptr = savepvn(name, namlen);
5157         else if (namlen == HEf_SVKEY)
5158             mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
5159         else
5160             mg->mg_ptr = (char *) name;
5161     }
5162     mg->mg_virtual = vtable;
5163
5164     mg_magical(sv);
5165     if (SvGMAGICAL(sv))
5166         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5167     return mg;
5168 }
5169
5170 /*
5171 =for apidoc sv_magic
5172
5173 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5174 then adds a new magic item of type C<how> to the head of the magic list.
5175
5176 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5177 handling of the C<name> and C<namlen> arguments.
5178
5179 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5180 to add more than one instance of the same 'how'.
5181
5182 =cut
5183 */
5184
5185 void
5186 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
5187 {
5188     const MGVTBL *vtable = 0;
5189     MAGIC* mg;
5190
5191 #ifdef PERL_OLD_COPY_ON_WRITE
5192     if (SvIsCOW(sv))
5193         sv_force_normal_flags(sv, 0);
5194 #endif
5195     if (SvREADONLY(sv)) {
5196         if (IN_PERL_RUNTIME
5197             && how != PERL_MAGIC_regex_global
5198             && how != PERL_MAGIC_bm
5199             && how != PERL_MAGIC_fm
5200             && how != PERL_MAGIC_sv
5201             && how != PERL_MAGIC_backref
5202            )
5203         {
5204             Perl_croak(aTHX_ PL_no_modify);
5205         }
5206     }
5207     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5208         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5209             /* sv_magic() refuses to add a magic of the same 'how' as an
5210                existing one
5211              */
5212             if (how == PERL_MAGIC_taint)
5213                 mg->mg_len |= 1;
5214             return;
5215         }
5216     }
5217
5218     switch (how) {
5219     case PERL_MAGIC_sv:
5220         vtable = &PL_vtbl_sv;
5221         break;
5222     case PERL_MAGIC_overload:
5223         vtable = &PL_vtbl_amagic;
5224         break;
5225     case PERL_MAGIC_overload_elem:
5226         vtable = &PL_vtbl_amagicelem;
5227         break;
5228     case PERL_MAGIC_overload_table:
5229         vtable = &PL_vtbl_ovrld;
5230         break;
5231     case PERL_MAGIC_bm:
5232         vtable = &PL_vtbl_bm;
5233         break;
5234     case PERL_MAGIC_regdata:
5235         vtable = &PL_vtbl_regdata;
5236         break;
5237     case PERL_MAGIC_regdatum:
5238         vtable = &PL_vtbl_regdatum;
5239         break;
5240     case PERL_MAGIC_env:
5241         vtable = &PL_vtbl_env;
5242         break;
5243     case PERL_MAGIC_fm:
5244         vtable = &PL_vtbl_fm;
5245         break;
5246     case PERL_MAGIC_envelem:
5247         vtable = &PL_vtbl_envelem;
5248         break;
5249     case PERL_MAGIC_regex_global:
5250         vtable = &PL_vtbl_mglob;
5251         break;
5252     case PERL_MAGIC_isa:
5253         vtable = &PL_vtbl_isa;
5254         break;
5255     case PERL_MAGIC_isaelem:
5256         vtable = &PL_vtbl_isaelem;
5257         break;
5258     case PERL_MAGIC_nkeys:
5259         vtable = &PL_vtbl_nkeys;
5260         break;
5261     case PERL_MAGIC_dbfile:
5262         vtable = 0;
5263         break;
5264     case PERL_MAGIC_dbline:
5265         vtable = &PL_vtbl_dbline;
5266         break;
5267 #ifdef USE_LOCALE_COLLATE
5268     case PERL_MAGIC_collxfrm:
5269         vtable = &PL_vtbl_collxfrm;
5270         break;
5271 #endif /* USE_LOCALE_COLLATE */
5272     case PERL_MAGIC_tied:
5273         vtable = &PL_vtbl_pack;
5274         break;
5275     case PERL_MAGIC_tiedelem:
5276     case PERL_MAGIC_tiedscalar:
5277         vtable = &PL_vtbl_packelem;
5278         break;
5279     case PERL_MAGIC_qr:
5280         vtable = &PL_vtbl_regexp;
5281         break;
5282     case PERL_MAGIC_sig:
5283         vtable = &PL_vtbl_sig;
5284         break;
5285     case PERL_MAGIC_sigelem:
5286         vtable = &PL_vtbl_sigelem;
5287         break;
5288     case PERL_MAGIC_taint:
5289         vtable = &PL_vtbl_taint;
5290         break;
5291     case PERL_MAGIC_uvar:
5292         vtable = &PL_vtbl_uvar;
5293         break;
5294     case PERL_MAGIC_vec:
5295         vtable = &PL_vtbl_vec;
5296         break;
5297     case PERL_MAGIC_arylen_p:
5298     case PERL_MAGIC_rhash:
5299     case PERL_MAGIC_symtab:
5300     case PERL_MAGIC_vstring:
5301         vtable = 0;
5302         break;
5303     case PERL_MAGIC_utf8:
5304         vtable = &PL_vtbl_utf8;
5305         break;
5306     case PERL_MAGIC_substr:
5307         vtable = &PL_vtbl_substr;
5308         break;
5309     case PERL_MAGIC_defelem:
5310         vtable = &PL_vtbl_defelem;
5311         break;
5312     case PERL_MAGIC_glob:
5313         vtable = &PL_vtbl_glob;
5314         break;
5315     case PERL_MAGIC_arylen:
5316         vtable = &PL_vtbl_arylen;
5317         break;
5318     case PERL_MAGIC_pos:
5319         vtable = &PL_vtbl_pos;
5320         break;
5321     case PERL_MAGIC_backref:
5322         vtable = &PL_vtbl_backref;
5323         break;
5324     case PERL_MAGIC_ext:
5325         /* Reserved for use by extensions not perl internals.           */
5326         /* Useful for attaching extension internal data to perl vars.   */
5327         /* Note that multiple extensions may clash if magical scalars   */
5328         /* etc holding private data from one are passed to another.     */
5329         break;
5330     default:
5331         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5332     }
5333
5334     /* Rest of work is done else where */
5335     mg = sv_magicext(sv,obj,how,(MGVTBL*)vtable,name,namlen);
5336
5337     switch (how) {
5338     case PERL_MAGIC_taint:
5339         mg->mg_len = 1;
5340         break;
5341     case PERL_MAGIC_ext:
5342     case PERL_MAGIC_dbfile:
5343         SvRMAGICAL_on(sv);
5344         break;
5345     }
5346 }
5347
5348 /*
5349 =for apidoc sv_unmagic
5350
5351 Removes all magic of type C<type> from an SV.
5352
5353 =cut
5354 */
5355
5356 int
5357 Perl_sv_unmagic(pTHX_ SV *sv, int type)
5358 {
5359     MAGIC* mg;
5360     MAGIC** mgp;
5361     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5362         return 0;
5363     mgp = &SvMAGIC(sv);
5364     for (mg = *mgp; mg; mg = *mgp) {
5365         if (mg->mg_type == type) {
5366             const MGVTBL* const vtbl = mg->mg_virtual;
5367             *mgp = mg->mg_moremagic;
5368             if (vtbl && vtbl->svt_free)
5369                 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
5370             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5371                 if (mg->mg_len > 0)
5372                     Safefree(mg->mg_ptr);
5373                 else if (mg->mg_len == HEf_SVKEY)
5374                     SvREFCNT_dec((SV*)mg->mg_ptr);
5375                 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
5376                     Safefree(mg->mg_ptr);
5377             }
5378             if (mg->mg_flags & MGf_REFCOUNTED)
5379                 SvREFCNT_dec(mg->mg_obj);
5380             Safefree(mg);
5381         }
5382         else
5383             mgp = &mg->mg_moremagic;
5384     }
5385     if (!SvMAGIC(sv)) {
5386         SvMAGICAL_off(sv);
5387        SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5388     }
5389
5390     return 0;
5391 }
5392
5393 /*
5394 =for apidoc sv_rvweaken
5395
5396 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5397 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5398 push a back-reference to this RV onto the array of backreferences
5399 associated with that magic.
5400
5401 =cut
5402 */
5403
5404 SV *
5405 Perl_sv_rvweaken(pTHX_ SV *sv)
5406 {
5407     SV *tsv;
5408     if (!SvOK(sv))  /* let undefs pass */
5409         return sv;
5410     if (!SvROK(sv))
5411         Perl_croak(aTHX_ "Can't weaken a nonreference");
5412     else if (SvWEAKREF(sv)) {
5413         if (ckWARN(WARN_MISC))
5414             Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5415         return sv;
5416     }
5417     tsv = SvRV(sv);
5418     sv_add_backref(tsv, sv);
5419     SvWEAKREF_on(sv);
5420     SvREFCNT_dec(tsv);
5421     return sv;
5422 }
5423
5424 /* Give tsv backref magic if it hasn't already got it, then push a
5425  * back-reference to sv onto the array associated with the backref magic.
5426  */
5427
5428 STATIC void
5429 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
5430 {
5431     AV *av;
5432     MAGIC *mg;
5433     if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
5434         av = (AV*)mg->mg_obj;
5435     else {
5436         av = newAV();
5437         sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
5438         /* av now has a refcnt of 2, which avoids it getting freed
5439          * before us during global cleanup. The extra ref is removed
5440          * by magic_killbackrefs() when tsv is being freed */
5441     }
5442     if (AvFILLp(av) >= AvMAX(av)) {
5443         I32 i;
5444         SV **svp = AvARRAY(av);
5445         for (i = AvFILLp(av); i >= 0; i--)
5446             if (!svp[i]) {
5447                 svp[i] = sv;        /* reuse the slot */
5448                 return;
5449             }
5450         av_extend(av, AvFILLp(av)+1);
5451     }
5452     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5453 }
5454
5455 /* delete a back-reference to ourselves from the backref magic associated
5456  * with the SV we point to.
5457  */
5458
5459 STATIC void
5460 S_sv_del_backref(pTHX_ SV *sv)
5461 {
5462     AV *av;
5463     SV **svp;
5464     I32 i;
5465     SV *tsv = SvRV(sv);
5466     MAGIC *mg = NULL;
5467     if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
5468         Perl_croak(aTHX_ "panic: del_backref");
5469     av = (AV *)mg->mg_obj;
5470     svp = AvARRAY(av);
5471     for (i = AvFILLp(av); i >= 0; i--)
5472         if (svp[i] == sv) svp[i] = Nullsv;
5473 }
5474
5475 /*
5476 =for apidoc sv_insert
5477
5478 Inserts a string at the specified offset/length within the SV. Similar to
5479 the Perl substr() function.
5480
5481 =cut
5482 */
5483
5484 void
5485 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
5486 {
5487     register char *big;
5488     register char *mid;
5489     register char *midend;
5490     register char *bigend;
5491     register I32 i;
5492     STRLEN curlen;
5493
5494
5495     if (!bigstr)
5496         Perl_croak(aTHX_ "Can't modify non-existent substring");
5497     SvPV_force(bigstr, curlen);
5498     (void)SvPOK_only_UTF8(bigstr);
5499     if (offset + len > curlen) {
5500         SvGROW(bigstr, offset+len+1);
5501         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5502         SvCUR_set(bigstr, offset+len);
5503     }
5504
5505     SvTAINT(bigstr);
5506     i = littlelen - len;
5507     if (i > 0) {                        /* string might grow */
5508         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5509         mid = big + offset + len;
5510         midend = bigend = big + SvCUR(bigstr);
5511         bigend += i;
5512         *bigend = '\0';
5513         while (midend > mid)            /* shove everything down */
5514             *--bigend = *--midend;
5515         Move(little,big+offset,littlelen,char);
5516         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5517         SvSETMAGIC(bigstr);
5518         return;
5519     }
5520     else if (i == 0) {
5521         Move(little,SvPVX(bigstr)+offset,len,char);
5522         SvSETMAGIC(bigstr);
5523         return;
5524     }
5525
5526     big = SvPVX(bigstr);
5527     mid = big + offset;
5528     midend = mid + len;
5529     bigend = big + SvCUR(bigstr);
5530
5531     if (midend > bigend)
5532         Perl_croak(aTHX_ "panic: sv_insert");
5533
5534     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5535         if (littlelen) {
5536             Move(little, mid, littlelen,char);
5537             mid += littlelen;
5538         }
5539         i = bigend - midend;
5540         if (i > 0) {
5541             Move(midend, mid, i,char);
5542             mid += i;
5543         }
5544         *mid = '\0';
5545         SvCUR_set(bigstr, mid - big);
5546     }
5547     else if ((i = mid - big)) { /* faster from front */
5548         midend -= littlelen;
5549         mid = midend;
5550         sv_chop(bigstr,midend-i);
5551         big += i;
5552         while (i--)
5553             *--midend = *--big;
5554         if (littlelen)
5555             Move(little, mid, littlelen,char);
5556     }
5557     else if (littlelen) {
5558         midend -= littlelen;
5559         sv_chop(bigstr,midend);
5560         Move(little,midend,littlelen,char);
5561     }
5562     else {
5563         sv_chop(bigstr,midend);
5564     }
5565     SvSETMAGIC(bigstr);
5566 }
5567
5568 /*
5569 =for apidoc sv_replace
5570
5571 Make the first argument a copy of the second, then delete the original.
5572 The target SV physically takes over ownership of the body of the source SV
5573 and inherits its flags; however, the target keeps any magic it owns,
5574 and any magic in the source is discarded.
5575 Note that this is a rather specialist SV copying operation; most of the
5576 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5577
5578 =cut
5579 */
5580
5581 void
5582 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
5583 {
5584     const U32 refcnt = SvREFCNT(sv);
5585     SV_CHECK_THINKFIRST_COW_DROP(sv);
5586     if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
5587         Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Reference miscount in sv_replace()");
5588     if (SvMAGICAL(sv)) {
5589         if (SvMAGICAL(nsv))
5590             mg_free(nsv);
5591         else
5592             sv_upgrade(nsv, SVt_PVMG);
5593         SvMAGIC_set(nsv, SvMAGIC(sv));
5594         SvFLAGS(nsv) |= SvMAGICAL(sv);
5595         SvMAGICAL_off(sv);
5596         SvMAGIC_set(sv, NULL);
5597     }
5598     SvREFCNT(sv) = 0;
5599     sv_clear(sv);
5600     assert(!SvREFCNT(sv));
5601 #ifdef DEBUG_LEAKING_SCALARS
5602     sv->sv_flags  = nsv->sv_flags;
5603     sv->sv_any    = nsv->sv_any;
5604     sv->sv_refcnt = nsv->sv_refcnt;
5605     sv->sv_u      = nsv->sv_u;
5606 #else
5607     StructCopy(nsv,sv,SV);
5608 #endif
5609     /* Currently could join these into one piece of pointer arithmetic, but
5610        it would be unclear.  */
5611     if(SvTYPE(sv) == SVt_IV)
5612         SvANY(sv)
5613             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5614     else if (SvTYPE(sv) == SVt_RV) {
5615         SvANY(sv) = &sv->sv_u.svu_rv;
5616     }
5617         
5618
5619 #ifdef PERL_OLD_COPY_ON_WRITE
5620     if (SvIsCOW_normal(nsv)) {
5621         /* We need to follow the pointers around the loop to make the
5622            previous SV point to sv, rather than nsv.  */
5623         SV *next;
5624         SV *current = nsv;
5625         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5626             assert(next);
5627             current = next;
5628             assert(SvPVX_const(current) == SvPVX_const(nsv));
5629         }
5630         /* Make the SV before us point to the SV after us.  */
5631         if (DEBUG_C_TEST) {
5632             PerlIO_printf(Perl_debug_log, "previous is\n");
5633             sv_dump(current);
5634             PerlIO_printf(Perl_debug_log,
5635                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5636                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5637         }
5638         SV_COW_NEXT_SV_SET(current, sv);
5639     }
5640 #endif
5641     SvREFCNT(sv) = refcnt;
5642     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5643     SvREFCNT(nsv) = 0;
5644     del_SV(nsv);
5645 }
5646
5647 /*
5648 =for apidoc sv_clear
5649
5650 Clear an SV: call any destructors, free up any memory used by the body,
5651 and free the body itself. The SV's head is I<not> freed, although
5652 its type is set to all 1's so that it won't inadvertently be assumed
5653 to be live during global destruction etc.
5654 This function should only be called when REFCNT is zero. Most of the time
5655 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5656 instead.
5657
5658 =cut
5659 */
5660
5661 void
5662 Perl_sv_clear(pTHX_ register SV *sv)
5663 {
5664     dVAR;
5665     HV* stash;
5666     assert(sv);
5667     assert(SvREFCNT(sv) == 0);
5668
5669     if (SvOBJECT(sv)) {
5670         if (PL_defstash) {              /* Still have a symbol table? */
5671             dSP;
5672             do {        
5673                 CV* destructor;
5674                 stash = SvSTASH(sv);
5675                 destructor = StashHANDLER(stash,DESTROY);
5676                 if (destructor) {
5677                     SV* tmpref = newRV(sv);
5678                     SvREADONLY_on(tmpref);   /* DESTROY() could be naughty */
5679                     ENTER;
5680                     PUSHSTACKi(PERLSI_DESTROY);
5681                     EXTEND(SP, 2);
5682                     PUSHMARK(SP);
5683                     PUSHs(tmpref);
5684                     PUTBACK;
5685                     call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5686                 
5687                 
5688                     POPSTACK;
5689                     SPAGAIN;
5690                     LEAVE;
5691                     if(SvREFCNT(tmpref) < 2) {
5692                         /* tmpref is not kept alive! */
5693                         SvREFCNT(sv)--;
5694                         SvRV_set(tmpref, NULL);
5695                         SvROK_off(tmpref);
5696                     }
5697                     SvREFCNT_dec(tmpref);
5698                 }
5699             } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5700
5701
5702             if (SvREFCNT(sv)) {
5703                 if (PL_in_clean_objs)
5704                     Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5705                           HvNAME_get(stash));
5706                 /* DESTROY gave object new lease on life */
5707                 return;
5708             }
5709         }
5710
5711         if (SvOBJECT(sv)) {
5712             SvREFCNT_dec(SvSTASH(sv));  /* possibly of changed persuasion */
5713             SvOBJECT_off(sv);   /* Curse the object. */
5714             if (SvTYPE(sv) != SVt_PVIO)
5715                 --PL_sv_objcount;       /* XXX Might want something more general */
5716         }
5717     }
5718     if (SvTYPE(sv) >= SVt_PVMG) {
5719         if (SvMAGIC(sv))
5720             mg_free(sv);
5721         if (SvTYPE(sv) == SVt_PVMG && SvFLAGS(sv) & SVpad_TYPED)
5722             SvREFCNT_dec(SvSTASH(sv));
5723     }
5724     stash = NULL;
5725     switch (SvTYPE(sv)) {
5726     case SVt_PVIO:
5727         if (IoIFP(sv) &&
5728             IoIFP(sv) != PerlIO_stdin() &&
5729             IoIFP(sv) != PerlIO_stdout() &&
5730             IoIFP(sv) != PerlIO_stderr())
5731         {
5732             io_close((IO*)sv, FALSE);
5733         }
5734         if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5735             PerlDir_close(IoDIRP(sv));
5736         IoDIRP(sv) = (DIR*)NULL;
5737         Safefree(IoTOP_NAME(sv));
5738         Safefree(IoFMT_NAME(sv));
5739         Safefree(IoBOTTOM_NAME(sv));
5740         /* FALL THROUGH */
5741     case SVt_PVBM:
5742         goto freescalar;
5743     case SVt_PVCV:
5744     case SVt_PVFM:
5745         cv_undef((CV*)sv);
5746         goto freescalar;
5747     case SVt_PVHV:
5748         hv_undef((HV*)sv);
5749         break;
5750     case SVt_PVAV:
5751         av_undef((AV*)sv);
5752         break;
5753     case SVt_PVLV:
5754         if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5755             SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5756             HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5757             PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5758         }
5759         else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
5760             SvREFCNT_dec(LvTARG(sv));
5761         goto freescalar;
5762     case SVt_PVGV:
5763         gp_free((GV*)sv);
5764         Safefree(GvNAME(sv));
5765         /* cannot decrease stash refcount yet, as we might recursively delete
5766            ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
5767            of stash until current sv is completely gone.
5768            -- JohnPC, 27 Mar 1998 */
5769         stash = GvSTASH(sv);
5770         /* FALL THROUGH */
5771     case SVt_PVMG:
5772     case SVt_PVNV:
5773     case SVt_PVIV:
5774       freescalar:
5775         /* Don't bother with SvOOK_off(sv); as we're only going to free it.  */
5776         if (SvOOK(sv)) {
5777             SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv));
5778             /* Don't even bother with turning off the OOK flag.  */
5779         }
5780         /* FALL THROUGH */
5781     case SVt_PV:
5782     case SVt_RV:
5783         if (SvROK(sv)) {
5784             if (SvWEAKREF(sv))
5785                 sv_del_backref(sv);
5786             else
5787                 SvREFCNT_dec(SvRV(sv));
5788         }
5789 #ifdef PERL_OLD_COPY_ON_WRITE
5790         else if (SvPVX_const(sv)) {
5791             if (SvIsCOW(sv)) {
5792                 /* I believe I need to grab the global SV mutex here and
5793                    then recheck the COW status.  */
5794                 if (DEBUG_C_TEST) {
5795                     PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
5796                     sv_dump(sv);
5797                 }
5798                 sv_release_COW(sv, SvPVX_const(sv), SvLEN(sv),
5799                                SV_COW_NEXT_SV(sv));
5800                 /* And drop it here.  */
5801                 SvFAKE_off(sv);
5802             } else if (SvLEN(sv)) {
5803                 Safefree(SvPVX_const(sv));
5804             }
5805         }
5806 #else
5807         else if (SvPVX_const(sv) && SvLEN(sv))
5808             Safefree(SvPVX_const(sv));
5809         else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5810             unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5811             SvFAKE_off(sv);
5812         }
5813 #endif
5814         break;
5815 /*
5816     case SVt_NV:
5817     case SVt_IV:
5818     case SVt_NULL:
5819         break;
5820 */
5821     }
5822
5823     switch (SvTYPE(sv)) {
5824     case SVt_NULL:
5825         break;
5826     case SVt_IV:
5827         break;
5828     case SVt_NV:
5829         del_XNV(SvANY(sv));
5830         break;
5831     case SVt_RV:
5832         break;
5833     case SVt_PV:
5834         del_XPV(SvANY(sv));
5835         break;
5836     case SVt_PVIV:
5837         del_XPVIV(SvANY(sv));
5838         break;
5839     case SVt_PVNV:
5840         del_XPVNV(SvANY(sv));
5841         break;
5842     case SVt_PVMG:
5843         del_XPVMG(SvANY(sv));
5844         break;
5845     case SVt_PVLV:
5846         del_XPVLV(SvANY(sv));
5847         break;
5848     case SVt_PVAV:
5849         del_XPVAV(SvANY(sv));
5850         break;
5851     case SVt_PVHV:
5852         del_XPVHV(SvANY(sv));
5853         break;
5854     case SVt_PVCV:
5855         del_XPVCV(SvANY(sv));
5856         break;
5857     case SVt_PVGV:
5858         del_XPVGV(SvANY(sv));
5859         /* code duplication for increased performance. */
5860         SvFLAGS(sv) &= SVf_BREAK;
5861         SvFLAGS(sv) |= SVTYPEMASK;
5862         /* decrease refcount of the stash that owns this GV, if any */
5863         if (stash)
5864             SvREFCNT_dec(stash);
5865         return; /* not break, SvFLAGS reset already happened */
5866     case SVt_PVBM:
5867         del_XPVBM(SvANY(sv));
5868         break;
5869     case SVt_PVFM:
5870         del_XPVFM(SvANY(sv));
5871         break;
5872     case SVt_PVIO:
5873         del_XPVIO(SvANY(sv));
5874         break;
5875     }
5876     SvFLAGS(sv) &= SVf_BREAK;
5877     SvFLAGS(sv) |= SVTYPEMASK;
5878 }
5879
5880 /*
5881 =for apidoc sv_newref
5882
5883 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5884 instead.
5885
5886 =cut
5887 */
5888
5889 SV *
5890 Perl_sv_newref(pTHX_ SV *sv)
5891 {
5892     if (sv)
5893         (SvREFCNT(sv))++;
5894     return sv;
5895 }
5896
5897 /*
5898 =for apidoc sv_free
5899
5900 Decrement an SV's reference count, and if it drops to zero, call
5901 C<sv_clear> to invoke destructors and free up any memory used by
5902 the body; finally, deallocate the SV's head itself.
5903 Normally called via a wrapper macro C<SvREFCNT_dec>.
5904
5905 =cut
5906 */
5907
5908 void
5909 Perl_sv_free(pTHX_ SV *sv)
5910 {
5911     dVAR;
5912     if (!sv)
5913         return;
5914     if (SvREFCNT(sv) == 0) {
5915         if (SvFLAGS(sv) & SVf_BREAK)
5916             /* this SV's refcnt has been artificially decremented to
5917              * trigger cleanup */
5918             return;
5919         if (PL_in_clean_all) /* All is fair */
5920             return;
5921         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5922             /* make sure SvREFCNT(sv)==0 happens very seldom */
5923             SvREFCNT(sv) = (~(U32)0)/2;
5924             return;
5925         }
5926         if (ckWARN_d(WARN_INTERNAL))
5927             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5928                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
5929                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5930         return;
5931     }
5932     if (--(SvREFCNT(sv)) > 0)
5933         return;
5934     Perl_sv_free2(aTHX_ sv);
5935 }
5936
5937 void
5938 Perl_sv_free2(pTHX_ SV *sv)
5939 {
5940     dVAR;
5941 #ifdef DEBUGGING
5942     if (SvTEMP(sv)) {
5943         if (ckWARN_d(WARN_DEBUGGING))
5944             Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5945                         "Attempt to free temp prematurely: SV 0x%"UVxf
5946                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5947         return;
5948     }
5949 #endif
5950     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5951         /* make sure SvREFCNT(sv)==0 happens very seldom */
5952         SvREFCNT(sv) = (~(U32)0)/2;
5953         return;
5954     }
5955     sv_clear(sv);
5956     if (! SvREFCNT(sv))
5957         del_SV(sv);
5958 }
5959
5960 /*
5961 =for apidoc sv_len
5962
5963 Returns the length of the string in the SV. Handles magic and type
5964 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5965
5966 =cut
5967 */
5968
5969 STRLEN
5970 Perl_sv_len(pTHX_ register SV *sv)
5971 {
5972     STRLEN len;
5973
5974     if (!sv)
5975         return 0;
5976
5977     if (SvGMAGICAL(sv))
5978         len = mg_length(sv);
5979     else
5980         (void)SvPV_const(sv, len);
5981     return len;
5982 }
5983
5984 /*
5985 =for apidoc sv_len_utf8
5986
5987 Returns the number of characters in the string in an SV, counting wide
5988 UTF-8 bytes as a single character. Handles magic and type coercion.
5989
5990 =cut
5991 */
5992
5993 /*
5994  * The length is cached in PERL_UTF8_magic, in the mg_len field.  Also the
5995  * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init().
5996  * (Note that the mg_len is not the length of the mg_ptr field.)
5997  *
5998  */
5999
6000 STRLEN
6001 Perl_sv_len_utf8(pTHX_ register SV *sv)
6002 {
6003     if (!sv)
6004         return 0;
6005
6006     if (SvGMAGICAL(sv))
6007         return mg_length(sv);
6008     else
6009     {
6010         STRLEN len, ulen;
6011         const U8 *s = (U8*)SvPV_const(sv, len);
6012         MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
6013
6014         if (mg && mg->mg_len != -1 && (mg->mg_len > 0 || len == 0)) {
6015             ulen = mg->mg_len;
6016 #ifdef PERL_UTF8_CACHE_ASSERT
6017             assert(ulen == Perl_utf8_length(aTHX_ s, s + len));
6018 #endif
6019         }
6020         else {
6021             ulen = Perl_utf8_length(aTHX_ s, s + len);
6022             if (!mg && !SvREADONLY(sv)) {
6023                 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
6024                 mg = mg_find(sv, PERL_MAGIC_utf8);
6025                 assert(mg);
6026             }
6027             if (mg)
6028                 mg->mg_len = ulen;
6029         }
6030         return ulen;
6031     }
6032 }
6033
6034 /* S_utf8_mg_pos_init() is used to initialize the mg_ptr field of
6035  * a PERL_UTF8_magic.  The mg_ptr is used to store the mapping
6036  * between UTF-8 and byte offsets.  There are two (substr offset and substr
6037  * length, the i offset, PERL_MAGIC_UTF8_CACHESIZE) times two (UTF-8 offset
6038  * and byte offset) cache positions.
6039  *
6040  * The mg_len field is used by sv_len_utf8(), see its comments.
6041  * Note that the mg_len is not the length of the mg_ptr field.
6042  *
6043  */
6044 STATIC bool
6045 S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i,
6046                    I32 offsetp, const U8 *s, const U8 *start)
6047 {
6048     bool found = FALSE;
6049
6050     if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
6051         if (!*mgp)
6052             *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0, 0);
6053         assert(*mgp);
6054
6055         if ((*mgp)->mg_ptr)
6056             *cachep = (STRLEN *) (*mgp)->mg_ptr;
6057         else {
6058             Newz(0, *cachep, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6059             (*mgp)->mg_ptr = (char *) *cachep;
6060         }
6061         assert(*cachep);
6062
6063         (*cachep)[i]   = offsetp;
6064         (*cachep)[i+1] = s - start;
6065         found = TRUE;
6066     }
6067
6068     return found;
6069 }
6070
6071 /*
6072  * S_utf8_mg_pos() is used to query and update mg_ptr field of
6073  * a PERL_UTF8_magic.  The mg_ptr is used to store the mapping
6074  * between UTF-8 and byte offsets.  See also the comments of
6075  * S_utf8_mg_pos_init().
6076  *
6077  */
6078 STATIC bool
6079 S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I32 uoff, const U8 **sp, const U8 *start, const U8 *send)
6080 {
6081     bool found = FALSE;
6082
6083     if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
6084         if (!*mgp)
6085             *mgp = mg_find(sv, PERL_MAGIC_utf8);
6086         if (*mgp && (*mgp)->mg_ptr) {
6087             *cachep = (STRLEN *) (*mgp)->mg_ptr;
6088             ASSERT_UTF8_CACHE(*cachep);
6089             if ((*cachep)[i] == (STRLEN)uoff)   /* An exact match. */
6090                  found = TRUE;
6091             else {                      /* We will skip to the right spot. */
6092                  STRLEN forw  = 0;
6093                  STRLEN backw = 0;
6094                  const U8* p = NULL;
6095
6096                  /* The assumption is that going backward is half
6097                   * the speed of going forward (that's where the
6098                   * 2 * backw in the below comes from).  (The real
6099                   * figure of course depends on the UTF-8 data.) */
6100
6101                  if ((*cachep)[i] > (STRLEN)uoff) {
6102                       forw  = uoff;
6103                       backw = (*cachep)[i] - (STRLEN)uoff;
6104
6105                       if (forw < 2 * backw)
6106                            p = start;
6107                       else
6108                            p = start + (*cachep)[i+1];
6109                  }
6110                  /* Try this only for the substr offset (i == 0),
6111                   * not for the substr length (i == 2). */
6112                  else if (i == 0) { /* (*cachep)[i] < uoff */
6113                       const STRLEN ulen = sv_len_utf8(sv);
6114
6115                       if ((STRLEN)uoff < ulen) {
6116                            forw  = (STRLEN)uoff - (*cachep)[i];
6117                            backw = ulen - (STRLEN)uoff;
6118
6119                            if (forw < 2 * backw)
6120                                 p = start + (*cachep)[i+1];
6121                            else
6122                                 p = send;
6123                       }
6124
6125                       /* If the string is not long enough for uoff,
6126                        * we could extend it, but not at this low a level. */
6127                  }
6128
6129                  if (p) {
6130                       if (forw < 2 * backw) {
6131                            while (forw--)
6132                                 p += UTF8SKIP(p);
6133                       }
6134                       else {
6135                            while (backw--) {
6136                                 p--;
6137                                 while (UTF8_IS_CONTINUATION(*p))
6138                                      p--;
6139                            }
6140                       }
6141
6142                       /* Update the cache. */
6143                       (*cachep)[i]   = (STRLEN)uoff;
6144                       (*cachep)[i+1] = p - start;
6145
6146                       /* Drop the stale "length" cache */
6147                       if (i == 0) {
6148                           (*cachep)[2] = 0;
6149                           (*cachep)[3] = 0;
6150                       }
6151
6152                       found = TRUE;
6153                  }
6154             }
6155             if (found) {        /* Setup the return values. */
6156                  *offsetp = (*cachep)[i+1];
6157                  *sp = start + *offsetp;
6158                  if (*sp >= send) {
6159                       *sp = send;
6160                       *offsetp = send - start;
6161                  }
6162                  else if (*sp < start) {
6163                       *sp = start;
6164                       *offsetp = 0;
6165                  }
6166             }
6167         }
6168 #ifdef PERL_UTF8_CACHE_ASSERT
6169         if (found) {
6170              U8 *s = start;
6171              I32 n = uoff;
6172
6173              while (n-- && s < send)
6174                   s += UTF8SKIP(s);
6175
6176              if (i == 0) {
6177                   assert(*offsetp == s - start);
6178                   assert((*cachep)[0] == (STRLEN)uoff);
6179                   assert((*cachep)[1] == *offsetp);
6180              }
6181              ASSERT_UTF8_CACHE(*cachep);
6182         }
6183 #endif
6184     }
6185
6186     return found;
6187 }
6188
6189 /*
6190 =for apidoc sv_pos_u2b
6191
6192 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6193 the start of the string, to a count of the equivalent number of bytes; if
6194 lenp is non-zero, it does the same to lenp, but this time starting from
6195 the offset, rather than from the start of the string. Handles magic and
6196 type coercion.
6197
6198 =cut
6199 */
6200
6201 /*
6202  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6203  * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
6204  * byte offsets.  See also the comments of S_utf8_mg_pos().
6205  *
6206  */
6207
6208 void
6209 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
6210 {
6211     const U8 *start;
6212     STRLEN len;
6213
6214     if (!sv)
6215         return;
6216
6217     start = (U8*)SvPV_const(sv, len);
6218     if (len) {
6219         STRLEN boffset = 0;
6220         STRLEN *cache = 0;
6221         const U8 *s = start;
6222         I32 uoffset = *offsetp;
6223         const U8 *send = s + len;
6224         MAGIC *mg = 0;
6225         bool found = FALSE;
6226
6227          if (utf8_mg_pos(sv, &mg, &cache, 0, offsetp, *offsetp, &s, start, send))
6228              found = TRUE;
6229          if (!found && uoffset > 0) {
6230               while (s < send && uoffset--)
6231                    s += UTF8SKIP(s);
6232               if (s >= send)
6233                    s = send;
6234               if (utf8_mg_pos_init(sv, &mg, &cache, 0, *offsetp, s, start))
6235                   boffset = cache[1];
6236               *offsetp = s - start;
6237          }
6238          if (lenp) {
6239               found = FALSE;
6240               start = s;
6241               if (utf8_mg_pos(sv, &mg, &cache, 2, lenp, *lenp, &s, start, send)) {
6242                   *lenp -= boffset;
6243                   found = TRUE;
6244               }
6245               if (!found && *lenp > 0) {
6246                    I32 ulen = *lenp;
6247                    if (ulen > 0)
6248                         while (s < send && ulen--)
6249                              s += UTF8SKIP(s);
6250                    if (s >= send)
6251                         s = send;
6252                    utf8_mg_pos_init(sv, &mg, &cache, 2, *lenp, s, start);
6253               }
6254               *lenp = s - start;
6255          }
6256          ASSERT_UTF8_CACHE(cache);
6257     }
6258     else {
6259          *offsetp = 0;
6260          if (lenp)
6261               *lenp = 0;
6262     }
6263
6264     return;
6265 }
6266
6267 /*
6268 =for apidoc sv_pos_b2u
6269
6270 Converts the value pointed to by offsetp from a count of bytes from the
6271 start of the string, to a count of the equivalent number of UTF-8 chars.
6272 Handles magic and type coercion.
6273
6274 =cut
6275 */
6276
6277 /*
6278  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6279  * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
6280  * byte offsets.  See also the comments of S_utf8_mg_pos().
6281  *
6282  */
6283
6284 void
6285 Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
6286 {
6287     const U8* s;
6288     STRLEN len;
6289
6290     if (!sv)
6291         return;
6292
6293     s = (const U8*)SvPV_const(sv, len);
6294     if ((I32)len < *offsetp)
6295         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6296     else {
6297         const U8* send = s + *offsetp;
6298         MAGIC* mg = NULL;
6299         STRLEN *cache = NULL;
6300
6301         len = 0;
6302
6303         if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
6304             mg = mg_find(sv, PERL_MAGIC_utf8);
6305             if (mg && mg->mg_ptr) {
6306                 cache = (STRLEN *) mg->mg_ptr;
6307                 if (cache[1] == (STRLEN)*offsetp) {
6308                     /* An exact match. */
6309                     *offsetp = cache[0];
6310
6311                     return;
6312                 }
6313                 else if (cache[1] < (STRLEN)*offsetp) {
6314                     /* We already know part of the way. */
6315                     len = cache[0];
6316                     s  += cache[1];
6317                     /* Let the below loop do the rest. */
6318                 }
6319                 else { /* cache[1] > *offsetp */
6320                     /* We already know all of the way, now we may
6321                      * be able to walk back.  The same assumption
6322                      * is made as in S_utf8_mg_pos(), namely that
6323                      * walking backward is twice slower than
6324                      * walking forward. */
6325                     STRLEN forw  = *offsetp;
6326                     STRLEN backw = cache[1] - *offsetp;
6327
6328                     if (!(forw < 2 * backw)) {
6329                         const U8 *p = s + cache[1];
6330                         STRLEN ubackw = 0;
6331                         
6332                         cache[1] -= backw;
6333
6334                         while (backw--) {
6335                             p--;
6336                             while (UTF8_IS_CONTINUATION(*p)) {
6337                                 p--;
6338                                 backw--;
6339                             }
6340                             ubackw++;
6341                         }
6342
6343                         cache[0] -= ubackw;
6344                         *offsetp = cache[0];
6345
6346                         /* Drop the stale "length" cache */
6347                         cache[2] = 0;
6348                         cache[3] = 0;
6349
6350                         return;
6351                     }
6352                 }
6353             }
6354             ASSERT_UTF8_CACHE(cache);
6355         }
6356
6357         while (s < send) {
6358             STRLEN n = 1;
6359
6360             /* Call utf8n_to_uvchr() to validate the sequence
6361              * (unless a simple non-UTF character) */
6362             if (!UTF8_IS_INVARIANT(*s))
6363                 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
6364             if (n > 0) {
6365                 s += n;
6366                 len++;
6367             }
6368             else
6369                 break;
6370         }
6371
6372         if (!SvREADONLY(sv)) {
6373             if (!mg) {
6374                 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
6375                 mg = mg_find(sv, PERL_MAGIC_utf8);
6376             }
6377             assert(mg);
6378
6379             if (!mg->mg_ptr) {
6380                 Newz(0, cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6381                 mg->mg_ptr = (char *) cache;
6382             }
6383             assert(cache);
6384
6385             cache[0] = len;
6386             cache[1] = *offsetp;
6387             /* Drop the stale "length" cache */
6388             cache[2] = 0;
6389             cache[3] = 0;
6390         }
6391
6392         *offsetp = len;
6393     }
6394     return;
6395 }
6396
6397 /*
6398 =for apidoc sv_eq
6399
6400 Returns a boolean indicating whether the strings in the two SVs are
6401 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6402 coerce its args to strings if necessary.
6403
6404 =cut
6405 */
6406
6407 I32
6408 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
6409 {
6410     const char *pv1;
6411     STRLEN cur1;
6412     const char *pv2;
6413     STRLEN cur2;
6414     I32  eq     = 0;
6415     char *tpv   = Nullch;
6416     SV* svrecode = Nullsv;
6417
6418     if (!sv1) {
6419         pv1 = "";
6420         cur1 = 0;
6421     }
6422     else
6423         pv1 = SvPV_const(sv1, cur1);
6424
6425     if (!sv2){
6426         pv2 = "";
6427         cur2 = 0;
6428     }
6429     else
6430         pv2 = SvPV_const(sv2, cur2);
6431
6432     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6433         /* Differing utf8ness.
6434          * Do not UTF8size the comparands as a side-effect. */
6435          if (PL_encoding) {
6436               if (SvUTF8(sv1)) {
6437                    svrecode = newSVpvn(pv2, cur2);
6438                    sv_recode_to_utf8(svrecode, PL_encoding);
6439                    pv2 = SvPV_const(svrecode, cur2);
6440               }
6441               else {
6442                    svrecode = newSVpvn(pv1, cur1);
6443                    sv_recode_to_utf8(svrecode, PL_encoding);
6444                    pv1 = SvPV_const(svrecode, cur1);
6445               }
6446               /* Now both are in UTF-8. */
6447               if (cur1 != cur2) {
6448                    SvREFCNT_dec(svrecode);
6449                    return FALSE;
6450               }
6451          }
6452          else {
6453               bool is_utf8 = TRUE;
6454
6455               if (SvUTF8(sv1)) {
6456                    /* sv1 is the UTF-8 one,
6457                     * if is equal it must be downgrade-able */
6458                    char *pv = (char*)bytes_from_utf8((const U8*)pv1,
6459                                                      &cur1, &is_utf8);
6460                    if (pv != pv1)
6461                         pv1 = tpv = pv;
6462               }
6463               else {
6464                    /* sv2 is the UTF-8 one,
6465                     * if is equal it must be downgrade-able */
6466                    char *pv = (char *)bytes_from_utf8((const U8*)pv2,
6467                                                       &cur2, &is_utf8);
6468                    if (pv != pv2)
6469                         pv2 = tpv = pv;
6470               }
6471               if (is_utf8) {
6472                    /* Downgrade not possible - cannot be eq */
6473                    assert (tpv == 0);
6474                    return FALSE;
6475               }
6476          }
6477     }
6478
6479     if (cur1 == cur2)
6480         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6481         
6482     if (svrecode)
6483          SvREFCNT_dec(svrecode);
6484
6485     if (tpv)
6486         Safefree(tpv);
6487
6488     return eq;
6489 }
6490
6491 /*
6492 =for apidoc sv_cmp
6493
6494 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
6495 string in C<sv1> is less than, equal to, or greater than the string in
6496 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6497 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
6498
6499 =cut
6500 */
6501
6502 I32
6503 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
6504 {
6505     STRLEN cur1, cur2;
6506     const char *pv1, *pv2;
6507     char *tpv = Nullch;
6508     I32  cmp;
6509     SV *svrecode = Nullsv;
6510
6511     if (!sv1) {
6512         pv1 = "";
6513         cur1 = 0;
6514     }
6515     else
6516         pv1 = SvPV_const(sv1, cur1);
6517
6518     if (!sv2) {
6519         pv2 = "";
6520         cur2 = 0;
6521     }
6522     else
6523         pv2 = SvPV_const(sv2, cur2);
6524
6525     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6526         /* Differing utf8ness.
6527          * Do not UTF8size the comparands as a side-effect. */
6528         if (SvUTF8(sv1)) {
6529             if (PL_encoding) {
6530                  svrecode = newSVpvn(pv2, cur2);
6531                  sv_recode_to_utf8(svrecode, PL_encoding);
6532                  pv2 = SvPV_const(svrecode, cur2);
6533             }
6534             else {
6535                  pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6536             }
6537         }
6538         else {
6539             if (PL_encoding) {
6540                  svrecode = newSVpvn(pv1, cur1);
6541                  sv_recode_to_utf8(svrecode, PL_encoding);
6542                  pv1 = SvPV_const(svrecode, cur1);
6543             }
6544             else {
6545                  pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6546             }
6547         }
6548     }
6549
6550     if (!cur1) {
6551         cmp = cur2 ? -1 : 0;
6552     } else if (!cur2) {
6553         cmp = 1;
6554     } else {
6555         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6556
6557         if (retval) {
6558             cmp = retval < 0 ? -1 : 1;
6559         } else if (cur1 == cur2) {
6560             cmp = 0;
6561         } else {
6562             cmp = cur1 < cur2 ? -1 : 1;
6563         }
6564     }
6565
6566     if (svrecode)
6567          SvREFCNT_dec(svrecode);
6568
6569     if (tpv)
6570         Safefree(tpv);
6571
6572     return cmp;
6573 }
6574
6575 /*
6576 =for apidoc sv_cmp_locale
6577
6578 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6579 'use bytes' aware, handles get magic, and will coerce its args to strings
6580 if necessary.  See also C<sv_cmp_locale>.  See also C<sv_cmp>.
6581
6582 =cut
6583 */
6584
6585 I32
6586 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
6587 {
6588 #ifdef USE_LOCALE_COLLATE
6589
6590     char *pv1, *pv2;
6591     STRLEN len1, len2;
6592     I32 retval;
6593
6594     if (PL_collation_standard)
6595         goto raw_compare;
6596
6597     len1 = 0;
6598     pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6599     len2 = 0;
6600     pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6601
6602     if (!pv1 || !len1) {
6603         if (pv2 && len2)
6604             return -1;
6605         else
6606             goto raw_compare;
6607     }
6608     else {
6609         if (!pv2 || !len2)
6610             return 1;
6611     }
6612
6613     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6614
6615     if (retval)
6616         return retval < 0 ? -1 : 1;
6617
6618     /*
6619      * When the result of collation is equality, that doesn't mean
6620      * that there are no differences -- some locales exclude some
6621      * characters from consideration.  So to avoid false equalities,
6622      * we use the raw string as a tiebreaker.
6623      */
6624
6625   raw_compare:
6626     /* FALL THROUGH */
6627
6628 #endif /* USE_LOCALE_COLLATE */
6629
6630     return sv_cmp(sv1, sv2);
6631 }
6632
6633
6634 #ifdef USE_LOCALE_COLLATE
6635
6636 /*
6637 =for apidoc sv_collxfrm
6638
6639 Add Collate Transform magic to an SV if it doesn't already have it.
6640
6641 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6642 scalar data of the variable, but transformed to such a format that a normal
6643 memory comparison can be used to compare the data according to the locale
6644 settings.
6645
6646 =cut
6647 */
6648
6649 char *
6650 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
6651 {
6652     MAGIC *mg;
6653
6654     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6655     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6656         const char *s;
6657         char *xf;
6658         STRLEN len, xlen;
6659
6660         if (mg)
6661             Safefree(mg->mg_ptr);
6662         s = SvPV_const(sv, len);
6663         if ((xf = mem_collxfrm(s, len, &xlen))) {
6664             if (SvREADONLY(sv)) {
6665                 SAVEFREEPV(xf);
6666                 *nxp = xlen;
6667                 return xf + sizeof(PL_collation_ix);
6668             }
6669             if (! mg) {
6670                 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
6671                 mg = mg_find(sv, PERL_MAGIC_collxfrm);
6672                 assert(mg);
6673             }
6674             mg->mg_ptr = xf;
6675             mg->mg_len = xlen;
6676         }
6677         else {
6678             if (mg) {
6679                 mg->mg_ptr = NULL;
6680                 mg->mg_len = -1;
6681             }
6682         }
6683     }
6684     if (mg && mg->mg_ptr) {
6685         *nxp = mg->mg_len;
6686         return mg->mg_ptr + sizeof(PL_collation_ix);
6687     }
6688     else {
6689         *nxp = 0;
6690         return NULL;
6691     }
6692 }
6693
6694 #endif /* USE_LOCALE_COLLATE */
6695
6696 /*
6697 =for apidoc sv_gets
6698
6699 Get a line from the filehandle and store it into the SV, optionally
6700 appending to the currently-stored string.
6701
6702 =cut
6703 */
6704
6705 char *
6706 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
6707 {
6708     const char *rsptr;
6709     STRLEN rslen;
6710     register STDCHAR rslast;
6711     register STDCHAR *bp;
6712     register I32 cnt;
6713     I32 i = 0;
6714     I32 rspara = 0;
6715     I32 recsize;
6716
6717     if (SvTHINKFIRST(sv))
6718         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6719     /* XXX. If you make this PVIV, then copy on write can copy scalars read
6720        from <>.
6721        However, perlbench says it's slower, because the existing swipe code
6722        is faster than copy on write.
6723        Swings and roundabouts.  */
6724     SvUPGRADE(sv, SVt_PV);
6725
6726     SvSCREAM_off(sv);
6727
6728     if (append) {
6729         if (PerlIO_isutf8(fp)) {
6730             if (!SvUTF8(sv)) {
6731                 sv_utf8_upgrade_nomg(sv);
6732                 sv_pos_u2b(sv,&append,0);
6733             }
6734         } else if (SvUTF8(sv)) {
6735             SV *tsv = NEWSV(0,0);
6736             sv_gets(tsv, fp, 0);
6737             sv_utf8_upgrade_nomg(tsv);
6738             SvCUR_set(sv,append);
6739             sv_catsv(sv,tsv);
6740             sv_free(tsv);
6741             goto return_string_or_null;
6742         }
6743     }
6744
6745     SvPOK_only(sv);
6746     if (PerlIO_isutf8(fp))
6747         SvUTF8_on(sv);
6748
6749     if (IN_PERL_COMPILETIME) {
6750         /* we always read code in line mode */
6751         rsptr = "\n";
6752         rslen = 1;
6753     }
6754     else if (RsSNARF(PL_rs)) {
6755         /* If it is a regular disk file use size from stat() as estimate
6756            of amount we are going to read - may result in malloc-ing
6757            more memory than we realy need if layers bellow reduce
6758            size we read (e.g. CRLF or a gzip layer)
6759          */
6760         Stat_t st;
6761         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
6762             const Off_t offset = PerlIO_tell(fp);
6763             if (offset != (Off_t) -1 && st.st_size + append > offset) {
6764                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6765             }
6766         }
6767         rsptr = NULL;
6768         rslen = 0;
6769     }
6770     else if (RsRECORD(PL_rs)) {
6771       I32 bytesread;
6772       char *buffer;
6773
6774       /* Grab the size of the record we're getting */
6775       recsize = SvIV(SvRV(PL_rs));
6776       buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6777       /* Go yank in */
6778 #ifdef VMS
6779       /* VMS wants read instead of fread, because fread doesn't respect */
6780       /* RMS record boundaries. This is not necessarily a good thing to be */
6781       /* doing, but we've got no other real choice - except avoid stdio
6782          as implementation - perhaps write a :vms layer ?
6783        */
6784       bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6785 #else
6786       bytesread = PerlIO_read(fp, buffer, recsize);
6787 #endif
6788       if (bytesread < 0)
6789           bytesread = 0;
6790       SvCUR_set(sv, bytesread += append);
6791       buffer[bytesread] = '\0';
6792       goto return_string_or_null;
6793     }
6794     else if (RsPARA(PL_rs)) {
6795         rsptr = "\n\n";
6796         rslen = 2;
6797         rspara = 1;
6798     }
6799     else {
6800         /* Get $/ i.e. PL_rs into same encoding as stream wants */
6801         if (PerlIO_isutf8(fp)) {
6802             rsptr = SvPVutf8(PL_rs, rslen);
6803         }
6804         else {
6805             if (SvUTF8(PL_rs)) {
6806                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6807                     Perl_croak(aTHX_ "Wide character in $/");
6808                 }
6809             }
6810             rsptr = SvPV_const(PL_rs, rslen);
6811         }
6812     }
6813
6814     rslast = rslen ? rsptr[rslen - 1] : '\0';
6815
6816     if (rspara) {               /* have to do this both before and after */
6817         do {                    /* to make sure file boundaries work right */
6818             if (PerlIO_eof(fp))
6819                 return 0;
6820             i = PerlIO_getc(fp);
6821             if (i != '\n') {
6822                 if (i == -1)
6823                     return 0;
6824                 PerlIO_ungetc(fp,i);
6825                 break;
6826             }
6827         } while (i != EOF);
6828     }
6829
6830     /* See if we know enough about I/O mechanism to cheat it ! */
6831
6832     /* This used to be #ifdef test - it is made run-time test for ease
6833        of abstracting out stdio interface. One call should be cheap
6834        enough here - and may even be a macro allowing compile
6835        time optimization.
6836      */
6837
6838     if (PerlIO_fast_gets(fp)) {
6839
6840     /*
6841      * We're going to steal some values from the stdio struct
6842      * and put EVERYTHING in the innermost loop into registers.
6843      */
6844     register STDCHAR *ptr;
6845     STRLEN bpx;
6846     I32 shortbuffered;
6847
6848 #if defined(VMS) && defined(PERLIO_IS_STDIO)
6849     /* An ungetc()d char is handled separately from the regular
6850      * buffer, so we getc() it back out and stuff it in the buffer.
6851      */
6852     i = PerlIO_getc(fp);
6853     if (i == EOF) return 0;
6854     *(--((*fp)->_ptr)) = (unsigned char) i;
6855     (*fp)->_cnt++;
6856 #endif
6857
6858     /* Here is some breathtakingly efficient cheating */
6859
6860     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
6861     /* make sure we have the room */
6862     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6863         /* Not room for all of it
6864            if we are looking for a separator and room for some
6865          */
6866         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6867             /* just process what we have room for */
6868             shortbuffered = cnt - SvLEN(sv) + append + 1;
6869             cnt -= shortbuffered;
6870         }
6871         else {
6872             shortbuffered = 0;
6873             /* remember that cnt can be negative */
6874             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6875         }
6876     }
6877     else
6878         shortbuffered = 0;
6879     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
6880     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6881     DEBUG_P(PerlIO_printf(Perl_debug_log,
6882         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6883     DEBUG_P(PerlIO_printf(Perl_debug_log,
6884         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6885                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6886                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6887     for (;;) {
6888       screamer:
6889         if (cnt > 0) {
6890             if (rslen) {
6891                 while (cnt > 0) {                    /* this     |  eat */
6892                     cnt--;
6893                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
6894                         goto thats_all_folks;        /* screams  |  sed :-) */
6895                 }
6896             }
6897             else {
6898                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
6899                 bp += cnt;                           /* screams  |  dust */
6900                 ptr += cnt;                          /* louder   |  sed :-) */
6901                 cnt = 0;
6902             }
6903         }
6904         
6905         if (shortbuffered) {            /* oh well, must extend */
6906             cnt = shortbuffered;
6907             shortbuffered = 0;
6908             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6909             SvCUR_set(sv, bpx);
6910             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6911             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6912             continue;
6913         }
6914
6915         DEBUG_P(PerlIO_printf(Perl_debug_log,
6916                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6917                               PTR2UV(ptr),(long)cnt));
6918         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6919 #if 0
6920         DEBUG_P(PerlIO_printf(Perl_debug_log,
6921             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6922             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6923             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6924 #endif
6925         /* This used to call 'filbuf' in stdio form, but as that behaves like
6926            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6927            another abstraction.  */
6928         i   = PerlIO_getc(fp);          /* get more characters */
6929 #if 0
6930         DEBUG_P(PerlIO_printf(Perl_debug_log,
6931             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6932             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6933             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6934 #endif
6935         cnt = PerlIO_get_cnt(fp);
6936         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
6937         DEBUG_P(PerlIO_printf(Perl_debug_log,
6938             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6939
6940         if (i == EOF)                   /* all done for ever? */
6941             goto thats_really_all_folks;
6942
6943         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
6944         SvCUR_set(sv, bpx);
6945         SvGROW(sv, bpx + cnt + 2);
6946         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
6947
6948         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
6949
6950         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
6951             goto thats_all_folks;
6952     }
6953
6954 thats_all_folks:
6955     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6956           memNE((char*)bp - rslen, rsptr, rslen))
6957         goto screamer;                          /* go back to the fray */
6958 thats_really_all_folks:
6959     if (shortbuffered)
6960         cnt += shortbuffered;
6961         DEBUG_P(PerlIO_printf(Perl_debug_log,
6962             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6963     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
6964     DEBUG_P(PerlIO_printf(Perl_debug_log,
6965         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6966         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6967         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6968     *bp = '\0';
6969     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
6970     DEBUG_P(PerlIO_printf(Perl_debug_log,
6971         "Screamer: done, len=%ld, string=|%.*s|\n",
6972         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6973     }
6974    else
6975     {
6976        /*The big, slow, and stupid way. */
6977 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
6978         STDCHAR *buf = 0;
6979         New(0, buf, 8192, STDCHAR);
6980         assert(buf);
6981 #else
6982         STDCHAR buf[8192];
6983 #endif
6984
6985 screamer2:
6986         if (rslen) {
6987             const register STDCHAR *bpe = buf + sizeof(buf);
6988             bp = buf;
6989             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6990                 ; /* keep reading */
6991             cnt = bp - buf;
6992         }
6993         else {
6994             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6995             /* Accomodate broken VAXC compiler, which applies U8 cast to
6996              * both args of ?: operator, causing EOF to change into 255
6997              */
6998             if (cnt > 0)
6999                  i = (U8)buf[cnt - 1];
7000             else
7001                  i = EOF;
7002         }
7003
7004         if (cnt < 0)
7005             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7006         if (append)
7007              sv_catpvn(sv, (char *) buf, cnt);
7008         else
7009              sv_setpvn(sv, (char *) buf, cnt);
7010
7011         if (i != EOF &&                 /* joy */
7012             (!rslen ||
7013              SvCUR(sv) < rslen ||
7014              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7015         {
7016             append = -1;
7017             /*
7018              * If we're reading from a TTY and we get a short read,
7019              * indicating that the user hit his EOF character, we need
7020              * to notice it now, because if we try to read from the TTY
7021              * again, the EOF condition will disappear.
7022              *
7023              * The comparison of cnt to sizeof(buf) is an optimization
7024              * that prevents unnecessary calls to feof().
7025              *
7026              * - jik 9/25/96
7027              */
7028             if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
7029                 goto screamer2;
7030         }
7031
7032 #ifdef USE_HEAP_INSTEAD_OF_STACK
7033         Safefree(buf);
7034 #endif
7035     }
7036
7037     if (rspara) {               /* have to do this both before and after */
7038         while (i != EOF) {      /* to make sure file boundaries work right */
7039             i = PerlIO_getc(fp);
7040             if (i != '\n') {
7041                 PerlIO_ungetc(fp,i);
7042                 break;
7043             }
7044         }
7045     }
7046
7047 return_string_or_null:
7048     return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
7049 }
7050
7051 /*
7052 =for apidoc sv_inc
7053
7054 Auto-increment of the value in the SV, doing string to numeric conversion
7055 if necessary. Handles 'get' magic.
7056
7057 =cut
7058 */
7059
7060 void
7061 Perl_sv_inc(pTHX_ register SV *sv)
7062 {
7063     register char *d;
7064     int flags;
7065
7066     if (!sv)
7067         return;
7068     if (SvGMAGICAL(sv))
7069         mg_get(sv);
7070     if (SvTHINKFIRST(sv)) {
7071         if (SvIsCOW(sv))
7072             sv_force_normal_flags(sv, 0);
7073         if (SvREADONLY(sv)) {
7074             if (IN_PERL_RUNTIME)
7075                 Perl_croak(aTHX_ PL_no_modify);
7076         }
7077         if (SvROK(sv)) {
7078             IV i;
7079             if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7080                 return;
7081             i = PTR2IV(SvRV(sv));
7082             sv_unref(sv);
7083             sv_setiv(sv, i);
7084         }
7085     }
7086     flags = SvFLAGS(sv);
7087     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7088         /* It's (privately or publicly) a float, but not tested as an
7089            integer, so test it to see. */
7090         (void) SvIV(sv);
7091         flags = SvFLAGS(sv);
7092     }
7093     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7094         /* It's publicly an integer, or privately an integer-not-float */
7095 #ifdef PERL_PRESERVE_IVUV
7096       oops_its_int:
7097 #endif
7098         if (SvIsUV(sv)) {
7099             if (SvUVX(sv) == UV_MAX)
7100                 sv_setnv(sv, UV_MAX_P1);
7101             else
7102                 (void)SvIOK_only_UV(sv);
7103                 SvUV_set(sv, SvUVX(sv) + 1);
7104         } else {
7105             if (SvIVX(sv) == IV_MAX)
7106                 sv_setuv(sv, (UV)IV_MAX + 1);
7107             else {
7108                 (void)SvIOK_only(sv);
7109                 SvIV_set(sv, SvIVX(sv) + 1);
7110             }   
7111         }
7112         return;
7113     }
7114     if (flags & SVp_NOK) {
7115         (void)SvNOK_only(sv);
7116         SvNV_set(sv, SvNVX(sv) + 1.0);
7117         return;
7118     }
7119
7120     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7121         if ((flags & SVTYPEMASK) < SVt_PVIV)
7122             sv_upgrade(sv, SVt_IV);
7123         (void)SvIOK_only(sv);
7124         SvIV_set(sv, 1);
7125         return;
7126     }
7127     d = SvPVX(sv);
7128     while (isALPHA(*d)) d++;
7129     while (isDIGIT(*d)) d++;
7130     if (*d) {
7131 #ifdef PERL_PRESERVE_IVUV
7132         /* Got to punt this as an integer if needs be, but we don't issue
7133            warnings. Probably ought to make the sv_iv_please() that does
7134            the conversion if possible, and silently.  */
7135         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7136         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7137             /* Need to try really hard to see if it's an integer.
7138                9.22337203685478e+18 is an integer.
7139                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7140                so $a="9.22337203685478e+18"; $a+0; $a++
7141                needs to be the same as $a="9.22337203685478e+18"; $a++
7142                or we go insane. */
7143         
7144             (void) sv_2iv(sv);
7145             if (SvIOK(sv))
7146                 goto oops_its_int;
7147
7148             /* sv_2iv *should* have made this an NV */
7149             if (flags & SVp_NOK) {
7150                 (void)SvNOK_only(sv);
7151                 SvNV_set(sv, SvNVX(sv) + 1.0);
7152                 return;
7153             }
7154             /* I don't think we can get here. Maybe I should assert this
7155                And if we do get here I suspect that sv_setnv will croak. NWC
7156                Fall through. */
7157 #if defined(USE_LONG_DOUBLE)
7158             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",
7159                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7160 #else
7161             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7162                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7163 #endif
7164         }
7165 #endif /* PERL_PRESERVE_IVUV */
7166         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7167         return;
7168     }
7169     d--;
7170     while (d >= SvPVX_const(sv)) {
7171         if (isDIGIT(*d)) {
7172             if (++*d <= '9')
7173                 return;
7174             *(d--) = '0';
7175         }
7176         else {
7177 #ifdef EBCDIC
7178             /* MKS: The original code here died if letters weren't consecutive.
7179              * at least it didn't have to worry about non-C locales.  The
7180              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7181              * arranged in order (although not consecutively) and that only
7182              * [A-Za-z] are accepted by isALPHA in the C locale.
7183              */
7184             if (*d != 'z' && *d != 'Z') {
7185                 do { ++*d; } while (!isALPHA(*d));
7186                 return;
7187             }
7188             *(d--) -= 'z' - 'a';
7189 #else
7190             ++*d;
7191             if (isALPHA(*d))
7192                 return;
7193             *(d--) -= 'z' - 'a' + 1;
7194 #endif
7195         }
7196     }
7197     /* oh,oh, the number grew */
7198     SvGROW(sv, SvCUR(sv) + 2);
7199     SvCUR_set(sv, SvCUR(sv) + 1);
7200     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
7201         *d = d[-1];
7202     if (isDIGIT(d[1]))
7203         *d = '1';
7204     else
7205         *d = d[1];
7206 }
7207
7208 /*
7209 =for apidoc sv_dec
7210
7211 Auto-decrement of the value in the SV, doing string to numeric conversion
7212 if necessary. Handles 'get' magic.
7213
7214 =cut
7215 */
7216
7217 void
7218 Perl_sv_dec(pTHX_ register SV *sv)
7219 {
7220     int flags;
7221
7222     if (!sv)
7223         return;
7224     if (SvGMAGICAL(sv))
7225         mg_get(sv);
7226     if (SvTHINKFIRST(sv)) {
7227         if (SvIsCOW(sv))
7228             sv_force_normal_flags(sv, 0);
7229         if (SvREADONLY(sv)) {
7230             if (IN_PERL_RUNTIME)
7231                 Perl_croak(aTHX_ PL_no_modify);
7232         }
7233         if (SvROK(sv)) {
7234             IV i;
7235             if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7236                 return;
7237             i = PTR2IV(SvRV(sv));
7238             sv_unref(sv);
7239             sv_setiv(sv, i);
7240         }
7241     }
7242     /* Unlike sv_inc we don't have to worry about string-never-numbers
7243        and keeping them magic. But we mustn't warn on punting */
7244     flags = SvFLAGS(sv);
7245     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7246         /* It's publicly an integer, or privately an integer-not-float */
7247 #ifdef PERL_PRESERVE_IVUV
7248       oops_its_int:
7249 #endif
7250         if (SvIsUV(sv)) {
7251             if (SvUVX(sv) == 0) {
7252                 (void)SvIOK_only(sv);
7253                 SvIV_set(sv, -1);
7254             }
7255             else {
7256                 (void)SvIOK_only_UV(sv);
7257                 SvUV_set(sv, SvUVX(sv) + 1);
7258             }   
7259         } else {
7260             if (SvIVX(sv) == IV_MIN)
7261                 sv_setnv(sv, (NV)IV_MIN - 1.0);
7262             else {
7263                 (void)SvIOK_only(sv);
7264                 SvIV_set(sv, SvIVX(sv) - 1);
7265             }   
7266         }
7267         return;
7268     }
7269     if (flags & SVp_NOK) {
7270         SvNV_set(sv, SvNVX(sv) - 1.0);
7271         (void)SvNOK_only(sv);
7272         return;
7273     }
7274     if (!(flags & SVp_POK)) {
7275         if ((flags & SVTYPEMASK) < SVt_PVNV)
7276             sv_upgrade(sv, SVt_NV);
7277         SvNV_set(sv, 1.0);
7278         (void)SvNOK_only(sv);
7279         return;
7280     }
7281 #ifdef PERL_PRESERVE_IVUV
7282     {
7283         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7284         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7285             /* Need to try really hard to see if it's an integer.
7286                9.22337203685478e+18 is an integer.
7287                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7288                so $a="9.22337203685478e+18"; $a+0; $a--
7289                needs to be the same as $a="9.22337203685478e+18"; $a--
7290                or we go insane. */
7291         
7292             (void) sv_2iv(sv);
7293             if (SvIOK(sv))
7294                 goto oops_its_int;
7295
7296             /* sv_2iv *should* have made this an NV */
7297             if (flags & SVp_NOK) {
7298                 (void)SvNOK_only(sv);
7299                 SvNV_set(sv, SvNVX(sv) - 1.0);
7300                 return;
7301             }
7302             /* I don't think we can get here. Maybe I should assert this
7303                And if we do get here I suspect that sv_setnv will croak. NWC
7304                Fall through. */
7305 #if defined(USE_LONG_DOUBLE)
7306             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",
7307                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7308 #else
7309             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7310                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7311 #endif
7312         }
7313     }
7314 #endif /* PERL_PRESERVE_IVUV */
7315     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
7316 }
7317
7318 /*
7319 =for apidoc sv_mortalcopy
7320
7321 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
7322 The new SV is marked as mortal. It will be destroyed "soon", either by an
7323 explicit call to FREETMPS, or by an implicit call at places such as
7324 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
7325
7326 =cut
7327 */
7328
7329 /* Make a string that will exist for the duration of the expression
7330  * evaluation.  Actually, it may have to last longer than that, but
7331  * hopefully we won't free it until it has been assigned to a
7332  * permanent location. */
7333
7334 SV *
7335 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
7336 {
7337     register SV *sv;
7338
7339     new_SV(sv);
7340     sv_setsv(sv,oldstr);
7341     EXTEND_MORTAL(1);
7342     PL_tmps_stack[++PL_tmps_ix] = sv;
7343     SvTEMP_on(sv);
7344     return sv;
7345 }
7346
7347 /*
7348 =for apidoc sv_newmortal
7349
7350 Creates a new null SV which is mortal.  The reference count of the SV is
7351 set to 1. It will be destroyed "soon", either by an explicit call to
7352 FREETMPS, or by an implicit call at places such as statement boundaries.
7353 See also C<sv_mortalcopy> and C<sv_2mortal>.
7354
7355 =cut
7356 */
7357
7358 SV *
7359 Perl_sv_newmortal(pTHX)
7360 {
7361     register SV *sv;
7362
7363     new_SV(sv);
7364     SvFLAGS(sv) = SVs_TEMP;
7365     EXTEND_MORTAL(1);
7366     PL_tmps_stack[++PL_tmps_ix] = sv;
7367     return sv;
7368 }
7369
7370 /*
7371 =for apidoc sv_2mortal
7372
7373 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
7374 by an explicit call to FREETMPS, or by an implicit call at places such as
7375 statement boundaries.  SvTEMP() is turned on which means that the SV's
7376 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7377 and C<sv_mortalcopy>.
7378
7379 =cut
7380 */
7381
7382 SV *
7383 Perl_sv_2mortal(pTHX_ register SV *sv)
7384 {
7385     dVAR;
7386     if (!sv)
7387         return sv;
7388     if (SvREADONLY(sv) && SvIMMORTAL(sv))
7389         return sv;
7390     EXTEND_MORTAL(1);
7391     PL_tmps_stack[++PL_tmps_ix] = sv;
7392     SvTEMP_on(sv);
7393     return sv;
7394 }
7395
7396 /*
7397 =for apidoc newSVpv
7398
7399 Creates a new SV and copies a string into it.  The reference count for the
7400 SV is set to 1.  If C<len> is zero, Perl will compute the length using
7401 strlen().  For efficiency, consider using C<newSVpvn> instead.
7402
7403 =cut
7404 */
7405
7406 SV *
7407 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
7408 {
7409     register SV *sv;
7410
7411     new_SV(sv);
7412     sv_setpvn(sv,s,len ? len : strlen(s));
7413     return sv;
7414 }
7415
7416 /*
7417 =for apidoc newSVpvn
7418
7419 Creates a new SV and copies a string into it.  The reference count for the
7420 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
7421 string.  You are responsible for ensuring that the source string is at least
7422 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
7423
7424 =cut
7425 */
7426
7427 SV *
7428 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
7429 {
7430     register SV *sv;
7431
7432     new_SV(sv);
7433     sv_setpvn(sv,s,len);
7434     return sv;
7435 }
7436
7437
7438 /*
7439 =for apidoc newSVhek
7440
7441 Creates a new SV from the hash key structure.  It will generate scalars that
7442 point to the shared string table where possible. Returns a new (undefined)
7443 SV if the hek is NULL.
7444
7445 =cut
7446 */
7447
7448 SV *
7449 Perl_newSVhek(pTHX_ const HEK *hek)
7450 {
7451     if (!hek) {
7452         SV *sv;
7453
7454         new_SV(sv);
7455         return sv;
7456     }
7457
7458     if (HEK_LEN(hek) == HEf_SVKEY) {
7459         return newSVsv(*(SV**)HEK_KEY(hek));
7460     } else {
7461         const int flags = HEK_FLAGS(hek);
7462         if (flags & HVhek_WASUTF8) {
7463             /* Trouble :-)
7464                Andreas would like keys he put in as utf8 to come back as utf8
7465             */
7466             STRLEN utf8_len = HEK_LEN(hek);
7467             U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7468             SV *sv = newSVpvn ((char*)as_utf8, utf8_len);
7469
7470             SvUTF8_on (sv);
7471             Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7472             return sv;
7473         } else if (flags & HVhek_REHASH) {
7474             /* We don't have a pointer to the hv, so we have to replicate the
7475                flag into every HEK. This hv is using custom a hasing
7476                algorithm. Hence we can't return a shared string scalar, as
7477                that would contain the (wrong) hash value, and might get passed
7478                into an hv routine with a regular hash  */
7479
7480             SV *sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
7481             if (HEK_UTF8(hek))
7482                 SvUTF8_on (sv);
7483             return sv;
7484         }
7485         /* This will be overwhelminly the most common case.  */
7486         return newSVpvn_share(HEK_KEY(hek),
7487                               (HEK_UTF8(hek) ? -HEK_LEN(hek) : HEK_LEN(hek)),
7488                               HEK_HASH(hek));
7489     }
7490 }
7491
7492 /*
7493 =for apidoc newSVpvn_share
7494
7495 Creates a new SV with its SvPVX_const pointing to a shared string in the string
7496 table. If the string does not already exist in the table, it is created
7497 first.  Turns on READONLY and FAKE.  The string's hash is stored in the UV
7498 slot of the SV; if the C<hash> parameter is non-zero, that value is used;
7499 otherwise the hash is computed.  The idea here is that as the string table
7500 is used for shared hash keys these strings will have SvPVX_const == HeKEY and
7501 hash lookup will avoid string compare.
7502
7503 =cut
7504 */
7505
7506 SV *
7507 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7508 {
7509     register SV *sv;
7510     bool is_utf8 = FALSE;
7511     if (len < 0) {
7512         STRLEN tmplen = -len;
7513         is_utf8 = TRUE;
7514         /* See the note in hv.c:hv_fetch() --jhi */
7515         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7516         len = tmplen;
7517     }
7518     if (!hash)
7519         PERL_HASH(hash, src, len);
7520     new_SV(sv);
7521     sv_upgrade(sv, SVt_PV);
7522     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7523     SvCUR_set(sv, len);
7524     SvLEN_set(sv, 0);
7525     SvREADONLY_on(sv);
7526     SvFAKE_on(sv);
7527     SvPOK_on(sv);
7528     if (is_utf8)
7529         SvUTF8_on(sv);
7530     return sv;
7531 }
7532
7533
7534 #if defined(PERL_IMPLICIT_CONTEXT)
7535
7536 /* pTHX_ magic can't cope with varargs, so this is a no-context
7537  * version of the main function, (which may itself be aliased to us).
7538  * Don't access this version directly.
7539  */
7540
7541 SV *
7542 Perl_newSVpvf_nocontext(const char* pat, ...)
7543 {
7544     dTHX;
7545     register SV *sv;
7546     va_list args;
7547     va_start(args, pat);
7548     sv = vnewSVpvf(pat, &args);
7549     va_end(args);
7550     return sv;
7551 }
7552 #endif
7553
7554 /*
7555 =for apidoc newSVpvf
7556
7557 Creates a new SV and initializes it with the string formatted like
7558 C<sprintf>.
7559
7560 =cut
7561 */
7562
7563 SV *
7564 Perl_newSVpvf(pTHX_ const char* pat, ...)
7565 {
7566     register SV *sv;
7567     va_list args;
7568     va_start(args, pat);
7569     sv = vnewSVpvf(pat, &args);
7570     va_end(args);
7571     return sv;
7572 }
7573
7574 /* backend for newSVpvf() and newSVpvf_nocontext() */
7575
7576 SV *
7577 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7578 {
7579     register SV *sv;
7580     new_SV(sv);
7581     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7582     return sv;
7583 }
7584
7585 /*
7586 =for apidoc newSVnv
7587
7588 Creates a new SV and copies a floating point value into it.
7589 The reference count for the SV is set to 1.
7590
7591 =cut
7592 */
7593
7594 SV *
7595 Perl_newSVnv(pTHX_ NV n)
7596 {
7597     register SV *sv;
7598
7599     new_SV(sv);
7600     sv_setnv(sv,n);
7601     return sv;
7602 }
7603
7604 /*
7605 =for apidoc newSViv
7606
7607 Creates a new SV and copies an integer into it.  The reference count for the
7608 SV is set to 1.
7609
7610 =cut
7611 */
7612
7613 SV *
7614 Perl_newSViv(pTHX_ IV i)
7615 {
7616     register SV *sv;
7617
7618     new_SV(sv);
7619     sv_setiv(sv,i);
7620     return sv;
7621 }
7622
7623 /*
7624 =for apidoc newSVuv
7625
7626 Creates a new SV and copies an unsigned integer into it.
7627 The reference count for the SV is set to 1.
7628
7629 =cut
7630 */
7631
7632 SV *
7633 Perl_newSVuv(pTHX_ UV u)
7634 {
7635     register SV *sv;
7636
7637     new_SV(sv);
7638     sv_setuv(sv,u);
7639     return sv;
7640 }
7641
7642 /*
7643 =for apidoc newRV_noinc
7644
7645 Creates an RV wrapper for an SV.  The reference count for the original
7646 SV is B<not> incremented.
7647
7648 =cut
7649 */
7650
7651 SV *
7652 Perl_newRV_noinc(pTHX_ SV *tmpRef)
7653 {
7654     register SV *sv;
7655
7656     new_SV(sv);
7657     sv_upgrade(sv, SVt_RV);
7658     SvTEMP_off(tmpRef);
7659     SvRV_set(sv, tmpRef);
7660     SvROK_on(sv);
7661     return sv;
7662 }
7663
7664 /* newRV_inc is the official function name to use now.
7665  * newRV_inc is in fact #defined to newRV in sv.h
7666  */
7667
7668 SV *
7669 Perl_newRV(pTHX_ SV *tmpRef)
7670 {
7671     return newRV_noinc(SvREFCNT_inc(tmpRef));
7672 }
7673
7674 /*
7675 =for apidoc newSVsv
7676
7677 Creates a new SV which is an exact duplicate of the original SV.
7678 (Uses C<sv_setsv>).
7679
7680 =cut
7681 */
7682
7683 SV *
7684 Perl_newSVsv(pTHX_ register SV *old)
7685 {
7686     register SV *sv;
7687
7688     if (!old)
7689         return Nullsv;
7690     if (SvTYPE(old) == SVTYPEMASK) {
7691         if (ckWARN_d(WARN_INTERNAL))
7692             Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7693         return Nullsv;
7694     }
7695     new_SV(sv);
7696     /* SV_GMAGIC is the default for sv_setv()
7697        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7698        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
7699     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7700     return sv;
7701 }
7702
7703 /*
7704 =for apidoc sv_reset
7705
7706 Underlying implementation for the C<reset> Perl function.
7707 Note that the perl-level function is vaguely deprecated.
7708
7709 =cut
7710 */
7711
7712 void
7713 Perl_sv_reset(pTHX_ register const char *s, HV *stash)
7714 {
7715     dVAR;
7716     char todo[PERL_UCHAR_MAX+1];
7717
7718     if (!stash)
7719         return;
7720
7721     if (!*s) {          /* reset ?? searches */
7722         MAGIC *mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
7723         if (mg) {
7724             PMOP *pm = (PMOP *) mg->mg_obj;
7725             while (pm) {
7726                 pm->op_pmdynflags &= ~PMdf_USED;
7727                 pm = pm->op_pmnext;
7728             }
7729         }
7730         return;
7731     }
7732
7733     /* reset variables */
7734
7735     if (!HvARRAY(stash))
7736         return;
7737
7738     Zero(todo, 256, char);
7739     while (*s) {
7740         I32 max;
7741         I32 i = (unsigned char)*s;
7742         if (s[1] == '-') {
7743             s += 2;
7744         }
7745         max = (unsigned char)*s++;
7746         for ( ; i <= max; i++) {
7747             todo[i] = 1;
7748         }
7749         for (i = 0; i <= (I32) HvMAX(stash); i++) {
7750             HE *entry;
7751             for (entry = HvARRAY(stash)[i];
7752                  entry;
7753                  entry = HeNEXT(entry))
7754             {
7755                 register GV *gv;
7756                 register SV *sv;
7757
7758                 if (!todo[(U8)*HeKEY(entry)])
7759                     continue;
7760                 gv = (GV*)HeVAL(entry);
7761                 sv = GvSV(gv);
7762                 if (SvTHINKFIRST(sv)) {
7763                     if (!SvREADONLY(sv) && SvROK(sv))
7764                         sv_unref(sv);
7765                     continue;
7766                 }
7767                 SvOK_off(sv);
7768                 if (SvTYPE(sv) >= SVt_PV) {
7769                     SvCUR_set(sv, 0);
7770                     if (SvPVX_const(sv) != Nullch)
7771                         *SvPVX(sv) = '\0';
7772                     SvTAINT(sv);
7773                 }
7774                 if (GvAV(gv)) {
7775                     av_clear(GvAV(gv));
7776                 }
7777                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7778                     hv_clear(GvHV(gv));
7779 #ifndef PERL_MICRO
7780 #ifdef USE_ENVIRON_ARRAY
7781                     if (gv == PL_envgv
7782 #  ifdef USE_ITHREADS
7783                         && PL_curinterp == aTHX
7784 #  endif
7785                     )
7786                     {
7787                         environ[0] = Nullch;
7788                     }
7789 #endif
7790 #endif /* !PERL_MICRO */
7791                 }
7792             }
7793         }
7794     }
7795 }
7796
7797 /*
7798 =for apidoc sv_2io
7799
7800 Using various gambits, try to get an IO from an SV: the IO slot if its a
7801 GV; or the recursive result if we're an RV; or the IO slot of the symbol
7802 named after the PV if we're a string.
7803
7804 =cut
7805 */
7806
7807 IO*
7808 Perl_sv_2io(pTHX_ SV *sv)
7809 {
7810     IO* io;
7811     GV* gv;
7812
7813     switch (SvTYPE(sv)) {
7814     case SVt_PVIO:
7815         io = (IO*)sv;
7816         break;
7817     case SVt_PVGV:
7818         gv = (GV*)sv;
7819         io = GvIO(gv);
7820         if (!io)
7821             Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7822         break;
7823     default:
7824         if (!SvOK(sv))
7825             Perl_croak(aTHX_ PL_no_usym, "filehandle");
7826         if (SvROK(sv))
7827             return sv_2io(SvRV(sv));
7828         gv = gv_fetchsv(sv, FALSE, SVt_PVIO);
7829         if (gv)
7830             io = GvIO(gv);
7831         else
7832             io = 0;
7833         if (!io)
7834             Perl_croak(aTHX_ "Bad filehandle: %"SVf, sv);
7835         break;
7836     }
7837     return io;
7838 }
7839
7840 /*
7841 =for apidoc sv_2cv
7842
7843 Using various gambits, try to get a CV from an SV; in addition, try if
7844 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7845
7846 =cut
7847 */
7848
7849 CV *
7850 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
7851 {
7852     dVAR;
7853     GV *gv = Nullgv;
7854     CV *cv = Nullcv;
7855
7856     if (!sv)
7857         return *gvp = Nullgv, Nullcv;
7858     switch (SvTYPE(sv)) {
7859     case SVt_PVCV:
7860         *st = CvSTASH(sv);
7861         *gvp = Nullgv;
7862         return (CV*)sv;
7863     case SVt_PVHV:
7864     case SVt_PVAV:
7865         *gvp = Nullgv;
7866         return Nullcv;
7867     case SVt_PVGV:
7868         gv = (GV*)sv;
7869         *gvp = gv;
7870         *st = GvESTASH(gv);
7871         goto fix_gv;
7872
7873     default:
7874         if (SvGMAGICAL(sv))
7875             mg_get(sv);
7876         if (SvROK(sv)) {
7877             SV **sp = &sv;              /* Used in tryAMAGICunDEREF macro. */
7878             tryAMAGICunDEREF(to_cv);
7879
7880             sv = SvRV(sv);
7881             if (SvTYPE(sv) == SVt_PVCV) {
7882                 cv = (CV*)sv;
7883                 *gvp = Nullgv;
7884                 *st = CvSTASH(cv);
7885                 return cv;
7886             }
7887             else if(isGV(sv))
7888                 gv = (GV*)sv;
7889             else
7890                 Perl_croak(aTHX_ "Not a subroutine reference");
7891         }
7892         else if (isGV(sv))
7893             gv = (GV*)sv;
7894         else
7895             gv = gv_fetchsv(sv, lref, SVt_PVCV);
7896         *gvp = gv;
7897         if (!gv)
7898             return Nullcv;
7899         *st = GvESTASH(gv);
7900     fix_gv:
7901         if (lref && !GvCVu(gv)) {
7902             SV *tmpsv;
7903             ENTER;
7904             tmpsv = NEWSV(704,0);
7905             gv_efullname3(tmpsv, gv, Nullch);
7906             /* XXX this is probably not what they think they're getting.
7907              * It has the same effect as "sub name;", i.e. just a forward
7908              * declaration! */
7909             newSUB(start_subparse(FALSE, 0),
7910                    newSVOP(OP_CONST, 0, tmpsv),
7911                    Nullop,
7912                    Nullop);
7913             LEAVE;
7914             if (!GvCVu(gv))
7915                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7916                            sv);
7917         }
7918         return GvCVu(gv);
7919     }
7920 }
7921
7922 /*
7923 =for apidoc sv_true
7924
7925 Returns true if the SV has a true value by Perl's rules.
7926 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7927 instead use an in-line version.
7928
7929 =cut
7930 */
7931
7932 I32
7933 Perl_sv_true(pTHX_ register SV *sv)
7934 {
7935     if (!sv)
7936         return 0;
7937     if (SvPOK(sv)) {
7938         const register XPV* tXpv;
7939         if ((tXpv = (XPV*)SvANY(sv)) &&
7940                 (tXpv->xpv_cur > 1 ||
7941                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
7942             return 1;
7943         else
7944             return 0;
7945     }
7946     else {
7947         if (SvIOK(sv))
7948             return SvIVX(sv) != 0;
7949         else {
7950             if (SvNOK(sv))
7951                 return SvNVX(sv) != 0.0;
7952             else
7953                 return sv_2bool(sv);
7954         }
7955     }
7956 }
7957
7958 /*
7959 =for apidoc sv_iv
7960
7961 A private implementation of the C<SvIVx> macro for compilers which can't
7962 cope with complex macro expressions. Always use the macro instead.
7963
7964 =cut
7965 */
7966
7967 IV
7968 Perl_sv_iv(pTHX_ register SV *sv)
7969 {
7970     if (SvIOK(sv)) {
7971         if (SvIsUV(sv))
7972             return (IV)SvUVX(sv);
7973         return SvIVX(sv);
7974     }
7975     return sv_2iv(sv);
7976 }
7977
7978 /*
7979 =for apidoc sv_uv
7980
7981 A private implementation of the C<SvUVx> macro for compilers which can't
7982 cope with complex macro expressions. Always use the macro instead.
7983
7984 =cut
7985 */
7986
7987 UV
7988 Perl_sv_uv(pTHX_ register SV *sv)
7989 {
7990     if (SvIOK(sv)) {
7991         if (SvIsUV(sv))
7992             return SvUVX(sv);
7993         return (UV)SvIVX(sv);
7994     }
7995     return sv_2uv(sv);
7996 }
7997
7998 /*
7999 =for apidoc sv_nv
8000
8001 A private implementation of the C<SvNVx> macro for compilers which can't
8002 cope with complex macro expressions. Always use the macro instead.
8003
8004 =cut
8005 */
8006
8007 NV
8008 Perl_sv_nv(pTHX_ register SV *sv)
8009 {
8010     if (SvNOK(sv))
8011         return SvNVX(sv);
8012     return sv_2nv(sv);
8013 }
8014
8015 /* sv_pv() is now a macro using SvPV_nolen();
8016  * this function provided for binary compatibility only
8017  */
8018
8019 char *
8020 Perl_sv_pv(pTHX_ SV *sv)
8021 {
8022     if (SvPOK(sv))
8023         return SvPVX(sv);
8024
8025     return sv_2pv(sv, 0);
8026 }
8027
8028 /*
8029 =for apidoc sv_pv
8030
8031 Use the C<SvPV_nolen> macro instead
8032
8033 =for apidoc sv_pvn
8034
8035 A private implementation of the C<SvPV> macro for compilers which can't
8036 cope with complex macro expressions. Always use the macro instead.
8037
8038 =cut
8039 */
8040
8041 char *
8042 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
8043 {
8044     if (SvPOK(sv)) {
8045         *lp = SvCUR(sv);
8046         return SvPVX(sv);
8047     }
8048     return sv_2pv(sv, lp);
8049 }
8050
8051
8052 char *
8053 Perl_sv_pvn_nomg(pTHX_ register SV *sv, STRLEN *lp)
8054 {
8055     if (SvPOK(sv)) {
8056         *lp = SvCUR(sv);
8057         return SvPVX(sv);
8058     }
8059     return sv_2pv_flags(sv, lp, 0);
8060 }
8061
8062 /* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags();
8063  * this function provided for binary compatibility only
8064  */
8065
8066 char *
8067 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
8068 {
8069     return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
8070 }
8071
8072 /*
8073 =for apidoc sv_pvn_force
8074
8075 Get a sensible string out of the SV somehow.
8076 A private implementation of the C<SvPV_force> macro for compilers which
8077 can't cope with complex macro expressions. Always use the macro instead.
8078
8079 =for apidoc sv_pvn_force_flags
8080
8081 Get a sensible string out of the SV somehow.
8082 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8083 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8084 implemented in terms of this function.
8085 You normally want to use the various wrapper macros instead: see
8086 C<SvPV_force> and C<SvPV_force_nomg>
8087
8088 =cut
8089 */
8090
8091 char *
8092 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
8093 {
8094
8095     if (SvTHINKFIRST(sv) && !SvROK(sv))
8096         sv_force_normal_flags(sv, 0);
8097
8098     if (SvPOK(sv)) {
8099         if (lp)
8100             *lp = SvCUR(sv);
8101     }
8102     else {
8103         char *s;
8104         STRLEN len;
8105  
8106         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
8107             if (PL_op)
8108                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
8109                            sv_reftype(sv,0), OP_NAME(PL_op));
8110             else
8111                 Perl_croak(aTHX_ "Can't coerce readonly %s to string",
8112                            sv_reftype(sv,0));
8113         }
8114         if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
8115             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8116                 OP_NAME(PL_op));
8117         }
8118         else
8119             s = sv_2pv_flags(sv, &len, flags);
8120         if (lp)
8121             *lp = len;
8122
8123         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
8124             if (SvROK(sv))
8125                 sv_unref(sv);
8126             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
8127             SvGROW(sv, len + 1);
8128             Move(s,SvPVX_const(sv),len,char);
8129             SvCUR_set(sv, len);
8130             *SvEND(sv) = '\0';
8131         }
8132         if (!SvPOK(sv)) {
8133             SvPOK_on(sv);               /* validate pointer */
8134             SvTAINT(sv);
8135             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8136                                   PTR2UV(sv),SvPVX_const(sv)));
8137         }
8138     }
8139     return SvPVX_mutable(sv);
8140 }
8141
8142 /* sv_pvbyte () is now a macro using Perl_sv_2pv_flags();
8143  * this function provided for binary compatibility only
8144  */
8145
8146 char *
8147 Perl_sv_pvbyte(pTHX_ SV *sv)
8148 {
8149     sv_utf8_downgrade(sv,0);
8150     return sv_pv(sv);
8151 }
8152
8153 /*
8154 =for apidoc sv_pvbyte
8155
8156 Use C<SvPVbyte_nolen> instead.
8157
8158 =for apidoc sv_pvbyten
8159
8160 A private implementation of the C<SvPVbyte> macro for compilers
8161 which can't cope with complex macro expressions. Always use the macro
8162 instead.
8163
8164 =cut
8165 */
8166
8167 char *
8168 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
8169 {
8170     sv_utf8_downgrade(sv,0);
8171     return sv_pvn(sv,lp);
8172 }
8173
8174 /*
8175 =for apidoc sv_pvbyten_force
8176
8177 A private implementation of the C<SvPVbytex_force> macro for compilers
8178 which can't cope with complex macro expressions. Always use the macro
8179 instead.
8180
8181 =cut
8182 */
8183
8184 char *
8185 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
8186 {
8187     sv_pvn_force(sv,lp);
8188     sv_utf8_downgrade(sv,0);
8189     *lp = SvCUR(sv);
8190     return SvPVX(sv);
8191 }
8192
8193 /* sv_pvutf8 () is now a macro using Perl_sv_2pv_flags();
8194  * this function provided for binary compatibility only
8195  */
8196
8197 char *
8198 Perl_sv_pvutf8(pTHX_ SV *sv)
8199 {
8200     sv_utf8_upgrade(sv);
8201     return sv_pv(sv);
8202 }
8203
8204 /*
8205 =for apidoc sv_pvutf8
8206
8207 Use the C<SvPVutf8_nolen> macro instead
8208
8209 =for apidoc sv_pvutf8n
8210
8211 A private implementation of the C<SvPVutf8> macro for compilers
8212 which can't cope with complex macro expressions. Always use the macro
8213 instead.
8214
8215 =cut
8216 */
8217
8218 char *
8219 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
8220 {
8221     sv_utf8_upgrade(sv);
8222     return sv_pvn(sv,lp);
8223 }
8224
8225 /*
8226 =for apidoc sv_pvutf8n_force
8227
8228 A private implementation of the C<SvPVutf8_force> macro for compilers
8229 which can't cope with complex macro expressions. Always use the macro
8230 instead.
8231
8232 =cut
8233 */
8234
8235 char *
8236 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
8237 {
8238     sv_pvn_force(sv,lp);
8239     sv_utf8_upgrade(sv);
8240     *lp = SvCUR(sv);
8241     return SvPVX(sv);
8242 }
8243
8244 /*
8245 =for apidoc sv_reftype
8246
8247 Returns a string describing what the SV is a reference to.
8248
8249 =cut
8250 */
8251
8252 char *
8253 Perl_sv_reftype(pTHX_ const SV *sv, int ob)
8254 {
8255     /* The fact that I don't need to downcast to char * everywhere, only in ?:
8256        inside return suggests a const propagation bug in g++.  */
8257     if (ob && SvOBJECT(sv)) {
8258         char *name = HvNAME_get(SvSTASH(sv));
8259         return name ? name : (char *) "__ANON__";
8260     }
8261     else {
8262         switch (SvTYPE(sv)) {
8263         case SVt_NULL:
8264         case SVt_IV:
8265         case SVt_NV:
8266         case SVt_RV:
8267         case SVt_PV:
8268         case SVt_PVIV:
8269         case SVt_PVNV:
8270         case SVt_PVMG:
8271         case SVt_PVBM:
8272                                 if (SvVOK(sv))
8273                                     return "VSTRING";
8274                                 if (SvROK(sv))
8275                                     return "REF";
8276                                 else
8277                                     return "SCALAR";
8278
8279         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
8280                                 /* tied lvalues should appear to be
8281                                  * scalars for backwards compatitbility */
8282                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
8283                                     ? "SCALAR" : "LVALUE");
8284         case SVt_PVAV:          return "ARRAY";
8285         case SVt_PVHV:          return "HASH";
8286         case SVt_PVCV:          return "CODE";
8287         case SVt_PVGV:          return "GLOB";
8288         case SVt_PVFM:          return "FORMAT";
8289         case SVt_PVIO:          return "IO";
8290         default:                return "UNKNOWN";
8291         }
8292     }
8293 }
8294
8295 /*
8296 =for apidoc sv_isobject
8297
8298 Returns a boolean indicating whether the SV is an RV pointing to a blessed
8299 object.  If the SV is not an RV, or if the object is not blessed, then this
8300 will return false.
8301
8302 =cut
8303 */
8304
8305 int
8306 Perl_sv_isobject(pTHX_ SV *sv)
8307 {
8308     if (!sv)
8309         return 0;
8310     if (SvGMAGICAL(sv))
8311         mg_get(sv);
8312     if (!SvROK(sv))
8313         return 0;
8314     sv = (SV*)SvRV(sv);
8315     if (!SvOBJECT(sv))
8316         return 0;
8317     return 1;
8318 }
8319
8320 /*
8321 =for apidoc sv_isa
8322
8323 Returns a boolean indicating whether the SV is blessed into the specified
8324 class.  This does not check for subtypes; use C<sv_derived_from> to verify
8325 an inheritance relationship.
8326
8327 =cut
8328 */
8329
8330 int
8331 Perl_sv_isa(pTHX_ SV *sv, const char *name)
8332 {
8333     const char *hvname;
8334     if (!sv)
8335         return 0;
8336     if (SvGMAGICAL(sv))
8337         mg_get(sv);
8338     if (!SvROK(sv))
8339         return 0;
8340     sv = (SV*)SvRV(sv);
8341     if (!SvOBJECT(sv))
8342         return 0;
8343     hvname = HvNAME_get(SvSTASH(sv));
8344     if (!hvname)
8345         return 0;
8346
8347     return strEQ(hvname, name);
8348 }
8349
8350 /*
8351 =for apidoc newSVrv
8352
8353 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
8354 it will be upgraded to one.  If C<classname> is non-null then the new SV will
8355 be blessed in the specified package.  The new SV is returned and its
8356 reference count is 1.
8357
8358 =cut
8359 */
8360
8361 SV*
8362 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
8363 {
8364     SV *sv;
8365
8366     new_SV(sv);
8367
8368     SV_CHECK_THINKFIRST_COW_DROP(rv);
8369     SvAMAGIC_off(rv);
8370
8371     if (SvTYPE(rv) >= SVt_PVMG) {
8372         const U32 refcnt = SvREFCNT(rv);
8373         SvREFCNT(rv) = 0;
8374         sv_clear(rv);
8375         SvFLAGS(rv) = 0;
8376         SvREFCNT(rv) = refcnt;
8377     }
8378
8379     if (SvTYPE(rv) < SVt_RV)
8380         sv_upgrade(rv, SVt_RV);
8381     else if (SvTYPE(rv) > SVt_RV) {
8382         SvPV_free(rv);
8383         SvCUR_set(rv, 0);
8384         SvLEN_set(rv, 0);
8385     }
8386
8387     SvOK_off(rv);
8388     SvRV_set(rv, sv);
8389     SvROK_on(rv);
8390
8391     if (classname) {
8392         HV* stash = gv_stashpv(classname, TRUE);
8393         (void)sv_bless(rv, stash);
8394     }
8395     return sv;
8396 }
8397
8398 /*
8399 =for apidoc sv_setref_pv
8400
8401 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
8402 argument will be upgraded to an RV.  That RV will be modified to point to
8403 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8404 into the SV.  The C<classname> argument indicates the package for the
8405 blessing.  Set C<classname> to C<Nullch> to avoid the blessing.  The new SV
8406 will have a reference count of 1, and the RV will be returned.
8407
8408 Do not use with other Perl types such as HV, AV, SV, CV, because those
8409 objects will become corrupted by the pointer copy process.
8410
8411 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8412
8413 =cut
8414 */
8415
8416 SV*
8417 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
8418 {
8419     if (!pv) {
8420         sv_setsv(rv, &PL_sv_undef);
8421         SvSETMAGIC(rv);
8422     }
8423     else
8424         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
8425     return rv;
8426 }
8427
8428 /*
8429 =for apidoc sv_setref_iv
8430
8431 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
8432 argument will be upgraded to an RV.  That RV will be modified to point to
8433 the new SV.  The C<classname> argument indicates the package for the
8434 blessing.  Set C<classname> to C<Nullch> to avoid the blessing.  The new SV
8435 will have a reference count of 1, and the RV will be returned.
8436
8437 =cut
8438 */
8439
8440 SV*
8441 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
8442 {
8443     sv_setiv(newSVrv(rv,classname), iv);
8444     return rv;
8445 }
8446
8447 /*
8448 =for apidoc sv_setref_uv
8449
8450 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
8451 argument will be upgraded to an RV.  That RV will be modified to point to
8452 the new SV.  The C<classname> argument indicates the package for the
8453 blessing.  Set C<classname> to C<Nullch> to avoid the blessing.  The new SV
8454 will have a reference count of 1, and the RV will be returned.
8455
8456 =cut
8457 */
8458
8459 SV*
8460 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
8461 {
8462     sv_setuv(newSVrv(rv,classname), uv);
8463     return rv;
8464 }
8465
8466 /*
8467 =for apidoc sv_setref_nv
8468
8469 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
8470 argument will be upgraded to an RV.  That RV will be modified to point to
8471 the new SV.  The C<classname> argument indicates the package for the
8472 blessing.  Set C<classname> to C<Nullch> to avoid the blessing.  The new SV
8473 will have a reference count of 1, and the RV will be returned.
8474
8475 =cut
8476 */
8477
8478 SV*
8479 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
8480 {
8481     sv_setnv(newSVrv(rv,classname), nv);
8482     return rv;
8483 }
8484
8485 /*
8486 =for apidoc sv_setref_pvn
8487
8488 Copies a string into a new SV, optionally blessing the SV.  The length of the
8489 string must be specified with C<n>.  The C<rv> argument will be upgraded to
8490 an RV.  That RV will be modified to point to the new SV.  The C<classname>
8491 argument indicates the package for the blessing.  Set C<classname> to
8492 C<Nullch> to avoid the blessing.  The new SV will have a reference count
8493 of 1, and the RV will be returned.
8494
8495 Note that C<sv_setref_pv> copies the pointer while this copies the string.
8496
8497 =cut
8498 */
8499
8500 SV*
8501 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
8502 {
8503     sv_setpvn(newSVrv(rv,classname), pv, n);
8504     return rv;
8505 }
8506
8507 /*
8508 =for apidoc sv_bless
8509
8510 Blesses an SV into a specified package.  The SV must be an RV.  The package
8511 must be designated by its stash (see C<gv_stashpv()>).  The reference count
8512 of the SV is unaffected.
8513
8514 =cut
8515 */
8516
8517 SV*
8518 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
8519 {
8520     SV *tmpRef;
8521     if (!SvROK(sv))
8522         Perl_croak(aTHX_ "Can't bless non-reference value");
8523     tmpRef = SvRV(sv);
8524     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8525         if (SvREADONLY(tmpRef))
8526             Perl_croak(aTHX_ PL_no_modify);
8527         if (SvOBJECT(tmpRef)) {
8528             if (SvTYPE(tmpRef) != SVt_PVIO)
8529                 --PL_sv_objcount;
8530             SvREFCNT_dec(SvSTASH(tmpRef));
8531         }
8532     }
8533     SvOBJECT_on(tmpRef);
8534     if (SvTYPE(tmpRef) != SVt_PVIO)
8535         ++PL_sv_objcount;
8536     SvUPGRADE(tmpRef, SVt_PVMG);
8537     SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc(stash));
8538
8539     if (Gv_AMG(stash))
8540         SvAMAGIC_on(sv);
8541     else
8542         SvAMAGIC_off(sv);
8543
8544     if(SvSMAGICAL(tmpRef))
8545         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8546             mg_set(tmpRef);
8547
8548
8549
8550     return sv;
8551 }
8552
8553 /* Downgrades a PVGV to a PVMG.
8554  */
8555
8556 STATIC void
8557 S_sv_unglob(pTHX_ SV *sv)
8558 {
8559     void *xpvmg;
8560
8561     assert(SvTYPE(sv) == SVt_PVGV);
8562     SvFAKE_off(sv);
8563     if (GvGP(sv))
8564         gp_free((GV*)sv);
8565     if (GvSTASH(sv)) {
8566         SvREFCNT_dec(GvSTASH(sv));
8567         GvSTASH(sv) = Nullhv;
8568     }
8569     sv_unmagic(sv, PERL_MAGIC_glob);
8570     Safefree(GvNAME(sv));
8571     GvMULTI_off(sv);
8572
8573     /* need to keep SvANY(sv) in the right arena */
8574     xpvmg = new_XPVMG();
8575     StructCopy(SvANY(sv), xpvmg, XPVMG);
8576     del_XPVGV(SvANY(sv));
8577     SvANY(sv) = xpvmg;
8578
8579     SvFLAGS(sv) &= ~SVTYPEMASK;
8580     SvFLAGS(sv) |= SVt_PVMG;
8581 }
8582
8583 /*
8584 =for apidoc sv_unref_flags
8585
8586 Unsets the RV status of the SV, and decrements the reference count of
8587 whatever was being referenced by the RV.  This can almost be thought of
8588 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
8589 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8590 (otherwise the decrementing is conditional on the reference count being
8591 different from one or the reference being a readonly SV).
8592 See C<SvROK_off>.
8593
8594 =cut
8595 */
8596
8597 void
8598 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
8599 {
8600     SV* rv = SvRV(sv);
8601
8602     if (SvWEAKREF(sv)) {
8603         sv_del_backref(sv);
8604         SvWEAKREF_off(sv);
8605         SvRV_set(sv, NULL);
8606         return;
8607     }
8608     SvRV_set(sv, NULL);
8609     SvROK_off(sv);
8610     /* You can't have a || SvREADONLY(rv) here, as $a = $$a, where $a was
8611        assigned to as BEGIN {$a = \"Foo"} will fail.  */
8612     if (SvREFCNT(rv) != 1 || (flags & SV_IMMEDIATE_UNREF))
8613         SvREFCNT_dec(rv);
8614     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8615         sv_2mortal(rv);         /* Schedule for freeing later */
8616 }
8617
8618 /*
8619 =for apidoc sv_unref
8620
8621 Unsets the RV status of the SV, and decrements the reference count of
8622 whatever was being referenced by the RV.  This can almost be thought of
8623 as a reversal of C<newSVrv>.  This is C<sv_unref_flags> with the C<flag>
8624 being zero.  See C<SvROK_off>.
8625
8626 =cut
8627 */
8628
8629 void
8630 Perl_sv_unref(pTHX_ SV *sv)
8631 {
8632     sv_unref_flags(sv, 0);
8633 }
8634
8635 /*
8636 =for apidoc sv_taint
8637
8638 Taint an SV. Use C<SvTAINTED_on> instead.
8639 =cut
8640 */
8641
8642 void
8643 Perl_sv_taint(pTHX_ SV *sv)
8644 {
8645     sv_magic((sv), Nullsv, PERL_MAGIC_taint, Nullch, 0);
8646 }
8647
8648 /*
8649 =for apidoc sv_untaint
8650
8651 Untaint an SV. Use C<SvTAINTED_off> instead.
8652 =cut
8653 */
8654
8655 void
8656 Perl_sv_untaint(pTHX_ SV *sv)
8657 {
8658     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8659         MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
8660         if (mg)
8661             mg->mg_len &= ~1;
8662     }
8663 }
8664
8665 /*
8666 =for apidoc sv_tainted
8667
8668 Test an SV for taintedness. Use C<SvTAINTED> instead.
8669 =cut
8670 */
8671
8672 bool
8673 Perl_sv_tainted(pTHX_ SV *sv)
8674 {
8675     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8676         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8677         if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
8678             return TRUE;
8679     }
8680     return FALSE;
8681 }
8682
8683 /*
8684 =for apidoc sv_setpviv
8685
8686 Copies an integer into the given SV, also updating its string value.
8687 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
8688
8689 =cut
8690 */
8691
8692 void
8693 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8694 {
8695     char buf[TYPE_CHARS(UV)];
8696     char *ebuf;
8697     char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8698
8699     sv_setpvn(sv, ptr, ebuf - ptr);
8700 }
8701
8702 /*
8703 =for apidoc sv_setpviv_mg
8704
8705 Like C<sv_setpviv>, but also handles 'set' magic.
8706
8707 =cut
8708 */
8709
8710 void
8711 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8712 {
8713     char buf[TYPE_CHARS(UV)];
8714     char *ebuf;
8715     char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8716
8717     sv_setpvn(sv, ptr, ebuf - ptr);
8718     SvSETMAGIC(sv);
8719 }
8720
8721 #if defined(PERL_IMPLICIT_CONTEXT)
8722
8723 /* pTHX_ magic can't cope with varargs, so this is a no-context
8724  * version of the main function, (which may itself be aliased to us).
8725  * Don't access this version directly.
8726  */
8727
8728 void
8729 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8730 {
8731     dTHX;
8732     va_list args;
8733     va_start(args, pat);
8734     sv_vsetpvf(sv, pat, &args);
8735     va_end(args);
8736 }
8737
8738 /* pTHX_ magic can't cope with varargs, so this is a no-context
8739  * version of the main function, (which may itself be aliased to us).
8740  * Don't access this version directly.
8741  */
8742
8743 void
8744 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8745 {
8746     dTHX;
8747     va_list args;
8748     va_start(args, pat);
8749     sv_vsetpvf_mg(sv, pat, &args);
8750     va_end(args);
8751 }
8752 #endif
8753
8754 /*
8755 =for apidoc sv_setpvf
8756
8757 Works like C<sv_catpvf> but copies the text into the SV instead of
8758 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
8759
8760 =cut
8761 */
8762
8763 void
8764 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
8765 {
8766     va_list args;
8767     va_start(args, pat);
8768     sv_vsetpvf(sv, pat, &args);
8769     va_end(args);
8770 }
8771
8772 /*
8773 =for apidoc sv_vsetpvf
8774
8775 Works like C<sv_vcatpvf> but copies the text into the SV instead of
8776 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
8777
8778 Usually used via its frontend C<sv_setpvf>.
8779
8780 =cut
8781 */
8782
8783 void
8784 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8785 {
8786     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8787 }
8788
8789 /*
8790 =for apidoc sv_setpvf_mg
8791
8792 Like C<sv_setpvf>, but also handles 'set' magic.
8793
8794 =cut
8795 */
8796
8797 void
8798 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8799 {
8800     va_list args;
8801     va_start(args, pat);
8802     sv_vsetpvf_mg(sv, pat, &args);
8803     va_end(args);
8804 }
8805
8806 /*
8807 =for apidoc sv_vsetpvf_mg
8808
8809 Like C<sv_vsetpvf>, but also handles 'set' magic.
8810
8811 Usually used via its frontend C<sv_setpvf_mg>.
8812
8813 =cut
8814 */
8815
8816 void
8817 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8818 {
8819     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8820     SvSETMAGIC(sv);
8821 }
8822
8823 #if defined(PERL_IMPLICIT_CONTEXT)
8824
8825 /* pTHX_ magic can't cope with varargs, so this is a no-context
8826  * version of the main function, (which may itself be aliased to us).
8827  * Don't access this version directly.
8828  */
8829
8830 void
8831 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8832 {
8833     dTHX;
8834     va_list args;
8835     va_start(args, pat);
8836     sv_vcatpvf(sv, pat, &args);
8837     va_end(args);
8838 }
8839
8840 /* pTHX_ magic can't cope with varargs, so this is a no-context
8841  * version of the main function, (which may itself be aliased to us).
8842  * Don't access this version directly.
8843  */
8844
8845 void
8846 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8847 {
8848     dTHX;
8849     va_list args;
8850     va_start(args, pat);
8851     sv_vcatpvf_mg(sv, pat, &args);
8852     va_end(args);
8853 }
8854 #endif
8855
8856 /*
8857 =for apidoc sv_catpvf
8858
8859 Processes its arguments like C<sprintf> and appends the formatted
8860 output to an SV.  If the appended data contains "wide" characters
8861 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8862 and characters >255 formatted with %c), the original SV might get
8863 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
8864 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8865 valid UTF-8; if the original SV was bytes, the pattern should be too.
8866
8867 =cut */
8868
8869 void
8870 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
8871 {
8872     va_list args;
8873     va_start(args, pat);
8874     sv_vcatpvf(sv, pat, &args);
8875     va_end(args);
8876 }
8877
8878 /*
8879 =for apidoc sv_vcatpvf
8880
8881 Processes its arguments like C<vsprintf> and appends the formatted output
8882 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
8883
8884 Usually used via its frontend C<sv_catpvf>.
8885
8886 =cut
8887 */
8888
8889 void
8890 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8891 {
8892     sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8893 }
8894
8895 /*
8896 =for apidoc sv_catpvf_mg
8897
8898 Like C<sv_catpvf>, but also handles 'set' magic.
8899
8900 =cut
8901 */
8902
8903 void
8904 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8905 {
8906     va_list args;
8907     va_start(args, pat);
8908     sv_vcatpvf_mg(sv, pat, &args);
8909     va_end(args);
8910 }
8911
8912 /*
8913 =for apidoc sv_vcatpvf_mg
8914
8915 Like C<sv_vcatpvf>, but also handles 'set' magic.
8916
8917 Usually used via its frontend C<sv_catpvf_mg>.
8918
8919 =cut
8920 */
8921
8922 void
8923 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8924 {
8925     sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
8926     SvSETMAGIC(sv);
8927 }
8928
8929 /*
8930 =for apidoc sv_vsetpvfn
8931
8932 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
8933 appending it.
8934
8935 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
8936
8937 =cut
8938 */
8939
8940 void
8941 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8942 {
8943     sv_setpvn(sv, "", 0);
8944     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8945 }
8946
8947 /* private function for use in sv_vcatpvfn via the EXPECT_NUMBER macro */
8948
8949 STATIC I32
8950 S_expect_number(pTHX_ char** pattern)
8951 {
8952     I32 var = 0;
8953     switch (**pattern) {
8954     case '1': case '2': case '3':
8955     case '4': case '5': case '6':
8956     case '7': case '8': case '9':
8957         while (isDIGIT(**pattern))
8958             var = var * 10 + (*(*pattern)++ - '0');
8959     }
8960     return var;
8961 }
8962 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
8963
8964 static char *
8965 F0convert(NV nv, char *endbuf, STRLEN *len)
8966 {
8967     const int neg = nv < 0;
8968     UV uv;
8969
8970     if (neg)
8971         nv = -nv;
8972     if (nv < UV_MAX) {
8973         char *p = endbuf;
8974         nv += 0.5;
8975         uv = (UV)nv;
8976         if (uv & 1 && uv == nv)
8977             uv--;                       /* Round to even */
8978         do {
8979             const unsigned dig = uv % 10;
8980             *--p = '0' + dig;
8981         } while (uv /= 10);
8982         if (neg)
8983             *--p = '-';
8984         *len = endbuf - p;
8985         return p;
8986     }
8987     return Nullch;
8988 }
8989
8990
8991 /*
8992 =for apidoc sv_vcatpvfn
8993
8994 Processes its arguments like C<vsprintf> and appends the formatted output
8995 to an SV.  Uses an array of SVs if the C style variable argument list is
8996 missing (NULL).  When running with taint checks enabled, indicates via
8997 C<maybe_tainted> if results are untrustworthy (often due to the use of
8998 locales).
8999
9000 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9001
9002 =cut
9003 */
9004
9005 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9006
9007 void
9008 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
9009 {
9010     char *p;
9011     char *q;
9012     const char *patend;
9013     STRLEN origlen;
9014     I32 svix = 0;
9015     static const char nullstr[] = "(null)";
9016     SV *argsv = Nullsv;
9017     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
9018     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
9019     SV *nsv = Nullsv;
9020     /* Times 4: a decimal digit takes more than 3 binary digits.
9021      * NV_DIG: mantissa takes than many decimal digits.
9022      * Plus 32: Playing safe. */
9023     char ebuf[IV_DIG * 4 + NV_DIG + 32];
9024     /* large enough for "%#.#f" --chip */
9025     /* what about long double NVs? --jhi */
9026
9027     /* no matter what, this is a string now */
9028     (void)SvPV_force(sv, origlen);
9029
9030     /* special-case "", "%s", and "%-p" (SVf) */
9031     if (patlen == 0)
9032         return;
9033     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
9034             if (args) {
9035                 const char *s = va_arg(*args, char*);
9036                 sv_catpv(sv, s ? s : nullstr);
9037             }
9038             else if (svix < svmax) {
9039                 sv_catsv(sv, *svargs);
9040                 if (DO_UTF8(*svargs))
9041                     SvUTF8_on(sv);
9042             }
9043             return;
9044     }
9045     if (patlen == 3 && pat[0] == '%' &&
9046         pat[1] == '-' && pat[2] == 'p') {
9047             if (args) {
9048                 argsv = va_arg(*args, SV*);
9049                 sv_catsv(sv, argsv);
9050                 if (DO_UTF8(argsv))
9051                     SvUTF8_on(sv);
9052                 return;
9053             }
9054     }
9055
9056 #ifndef USE_LONG_DOUBLE
9057     /* special-case "%.<number>[gf]" */
9058     if ( patlen <= 5 && pat[0] == '%' && pat[1] == '.'
9059          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9060         unsigned digits = 0;
9061         const char *pp;
9062
9063         pp = pat + 2;
9064         while (*pp >= '0' && *pp <= '9')
9065             digits = 10 * digits + (*pp++ - '0');
9066         if (pp - pat == (int)patlen - 1) {
9067             NV nv;
9068
9069             if (args)
9070                 nv = (NV)va_arg(*args, double);
9071             else if (svix < svmax)
9072                 nv = SvNV(*svargs);
9073             else
9074                 return;
9075             if (*pp == 'g') {
9076                 /* Add check for digits != 0 because it seems that some
9077                    gconverts are buggy in this case, and we don't yet have
9078                    a Configure test for this.  */
9079                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9080                      /* 0, point, slack */
9081                     Gconvert(nv, (int)digits, 0, ebuf);
9082                     sv_catpv(sv, ebuf);
9083                     if (*ebuf)  /* May return an empty string for digits==0 */
9084                         return;
9085                 }
9086             } else if (!digits) {
9087                 STRLEN l;
9088
9089                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9090                     sv_catpvn(sv, p, l);
9091                     return;
9092                 }
9093             }
9094         }
9095     }
9096 #endif /* !USE_LONG_DOUBLE */
9097
9098     if (!args && svix < svmax && DO_UTF8(*svargs))
9099         has_utf8 = TRUE;
9100
9101     patend = (char*)pat + patlen;
9102     for (p = (char*)pat; p < patend; p = q) {
9103         bool alt = FALSE;
9104         bool left = FALSE;
9105         bool vectorize = FALSE;
9106         bool vectorarg = FALSE;
9107         bool vec_utf8 = FALSE;
9108         char fill = ' ';
9109         char plus = 0;
9110         char intsize = 0;
9111         STRLEN width = 0;
9112         STRLEN zeros = 0;
9113         bool has_precis = FALSE;
9114         STRLEN precis = 0;
9115         I32 osvix = svix;
9116         bool is_utf8 = FALSE;  /* is this item utf8?   */
9117 #ifdef HAS_LDBL_SPRINTF_BUG
9118         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9119            with sfio - Allen <allens@cpan.org> */
9120         bool fix_ldbl_sprintf_bug = FALSE;
9121 #endif
9122
9123         char esignbuf[4];
9124         U8 utf8buf[UTF8_MAXBYTES+1];
9125         STRLEN esignlen = 0;
9126
9127         const char *eptr = Nullch;
9128         STRLEN elen = 0;
9129         SV *vecsv = Nullsv;
9130         const U8 *vecstr = Null(U8*);
9131         STRLEN veclen = 0;
9132         char c = 0;
9133         int i;
9134         unsigned base = 0;
9135         IV iv = 0;
9136         UV uv = 0;
9137         /* we need a long double target in case HAS_LONG_DOUBLE but
9138            not USE_LONG_DOUBLE
9139         */
9140 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9141         long double nv;
9142 #else
9143         NV nv;
9144 #endif
9145         STRLEN have;
9146         STRLEN need;
9147         STRLEN gap;
9148         const char *dotstr = ".";
9149         STRLEN dotstrlen = 1;
9150         I32 efix = 0; /* explicit format parameter index */
9151         I32 ewix = 0; /* explicit width index */
9152         I32 epix = 0; /* explicit precision index */
9153         I32 evix = 0; /* explicit vector index */
9154         bool asterisk = FALSE;
9155
9156         /* echo everything up to the next format specification */
9157         for (q = p; q < patend && *q != '%'; ++q) ;
9158         if (q > p) {
9159             if (has_utf8 && !pat_utf8)
9160                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9161             else
9162                 sv_catpvn(sv, p, q - p);
9163             p = q;
9164         }
9165         if (q++ >= patend)
9166             break;
9167
9168 /*
9169     We allow format specification elements in this order:
9170         \d+\$              explicit format parameter index
9171         [-+ 0#]+           flags
9172         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
9173         0                  flag (as above): repeated to allow "v02"     
9174         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
9175         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9176         [hlqLV]            size
9177     [%bcdefginopsux_DFOUX] format (mandatory)
9178 */
9179         if (EXPECT_NUMBER(q, width)) {
9180             if (*q == '$') {
9181                 ++q;
9182                 efix = width;
9183             } else {
9184                 goto gotwidth;
9185             }
9186         }
9187
9188         /* FLAGS */
9189
9190         while (*q) {
9191             switch (*q) {
9192             case ' ':
9193             case '+':
9194                 plus = *q++;
9195                 continue;
9196
9197             case '-':
9198                 left = TRUE;
9199                 q++;
9200                 continue;
9201
9202             case '0':
9203                 fill = *q++;
9204                 continue;
9205
9206             case '#':
9207                 alt = TRUE;
9208                 q++;
9209                 continue;
9210
9211             default:
9212                 break;
9213             }
9214             break;
9215         }
9216
9217       tryasterisk:
9218         if (*q == '*') {
9219             q++;
9220             if (EXPECT_NUMBER(q, ewix))
9221                 if (*q++ != '$')
9222                     goto unknown;
9223             asterisk = TRUE;
9224         }
9225         if (*q == 'v') {
9226             q++;
9227             if (vectorize)
9228                 goto unknown;
9229             if ((vectorarg = asterisk)) {
9230                 evix = ewix;
9231                 ewix = 0;
9232                 asterisk = FALSE;
9233             }
9234             vectorize = TRUE;
9235             goto tryasterisk;
9236         }
9237
9238         if (!asterisk)
9239             if( *q == '0' )
9240                 fill = *q++;
9241             EXPECT_NUMBER(q, width);
9242
9243         if (vectorize) {
9244             if (vectorarg) {
9245                 if (args)
9246                     vecsv = va_arg(*args, SV*);
9247                 else
9248                     vecsv = (evix ? evix <= svmax : svix < svmax) ?
9249                         svargs[evix ? evix-1 : svix++] : &PL_sv_undef;
9250                 dotstr = SvPV_const(vecsv, dotstrlen);
9251                 if (DO_UTF8(vecsv))
9252                     is_utf8 = TRUE;
9253             }
9254             if (args) {
9255                 vecsv = va_arg(*args, SV*);
9256                 vecstr = (U8*)SvPV_const(vecsv,veclen);
9257                 vec_utf8 = DO_UTF8(vecsv);
9258             }
9259             else if (efix ? efix <= svmax : svix < svmax) {
9260                 vecsv = svargs[efix ? efix-1 : svix++];
9261                 vecstr = (U8*)SvPV_const(vecsv,veclen);
9262                 vec_utf8 = DO_UTF8(vecsv);
9263                 /* if this is a version object, we need to return the
9264                  * stringified representation (which the SvPVX_const has
9265                  * already done for us), but not vectorize the args
9266                  */
9267                 if ( *q == 'd' && sv_derived_from(vecsv,"version") )
9268                 {
9269                         q++; /* skip past the rest of the %vd format */
9270                         eptr = (const char *) vecstr;
9271                         elen = strlen(eptr);
9272                         vectorize=FALSE;
9273                         goto string;
9274                 }
9275             }
9276             else {
9277                 vecstr = (U8*)"";
9278                 veclen = 0;
9279             }
9280         }
9281
9282         if (asterisk) {
9283             if (args)
9284                 i = va_arg(*args, int);
9285             else
9286                 i = (ewix ? ewix <= svmax : svix < svmax) ?
9287                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9288             left |= (i < 0);
9289             width = (i < 0) ? -i : i;
9290         }
9291       gotwidth:
9292
9293         /* PRECISION */
9294
9295         if (*q == '.') {
9296             q++;
9297             if (*q == '*') {
9298                 q++;
9299                 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
9300                     goto unknown;
9301                 /* XXX: todo, support specified precision parameter */
9302                 if (epix)
9303                     goto unknown;
9304                 if (args)
9305                     i = va_arg(*args, int);
9306                 else
9307                     i = (ewix ? ewix <= svmax : svix < svmax)
9308                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9309                 precis = (i < 0) ? 0 : i;
9310             }
9311             else {
9312                 precis = 0;
9313                 while (isDIGIT(*q))
9314                     precis = precis * 10 + (*q++ - '0');
9315             }
9316             has_precis = TRUE;
9317         }
9318
9319         /* SIZE */
9320
9321         switch (*q) {
9322 #ifdef WIN32
9323         case 'I':                       /* Ix, I32x, and I64x */
9324 #  ifdef WIN64
9325             if (q[1] == '6' && q[2] == '4') {
9326                 q += 3;
9327                 intsize = 'q';
9328                 break;
9329             }
9330 #  endif
9331             if (q[1] == '3' && q[2] == '2') {
9332                 q += 3;
9333                 break;
9334             }
9335 #  ifdef WIN64
9336             intsize = 'q';
9337 #  endif
9338             q++;
9339             break;
9340 #endif
9341 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9342         case 'L':                       /* Ld */
9343             /* FALL THROUGH */
9344 #ifdef HAS_QUAD
9345         case 'q':                       /* qd */
9346 #endif
9347             intsize = 'q';
9348             q++;
9349             break;
9350 #endif
9351         case 'l':
9352 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9353             if (*(q + 1) == 'l') {      /* lld, llf */
9354                 intsize = 'q';
9355                 q += 2;
9356                 break;
9357              }
9358 #endif
9359             /* FALL THROUGH */
9360         case 'h':
9361             /* FALL THROUGH */
9362         case 'V':
9363             intsize = *q++;
9364             break;
9365         }
9366
9367         /* CONVERSION */
9368
9369         if (*q == '%') {
9370             eptr = q++;
9371             elen = 1;
9372             goto string;
9373         }
9374
9375         if (vectorize)
9376             argsv = vecsv;
9377         else if (!args)
9378             argsv = (efix ? efix <= svmax : svix < svmax) ?
9379                     svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
9380
9381         switch (c = *q++) {
9382
9383             /* STRINGS */
9384
9385         case 'c':
9386             uv = (args && !vectorize) ? va_arg(*args, int) : SvIVx(argsv);
9387             if ((uv > 255 ||
9388                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
9389                 && !IN_BYTES) {
9390                 eptr = (char*)utf8buf;
9391                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
9392                 is_utf8 = TRUE;
9393             }
9394             else {
9395                 c = (char)uv;
9396                 eptr = &c;
9397                 elen = 1;
9398             }
9399             goto string;
9400
9401         case 's':
9402             if (args && !vectorize) {
9403                 eptr = va_arg(*args, char*);
9404                 if (eptr)
9405 #ifdef MACOS_TRADITIONAL
9406                   /* On MacOS, %#s format is used for Pascal strings */
9407                   if (alt)
9408                     elen = *eptr++;
9409                   else
9410 #endif
9411                     elen = strlen(eptr);
9412                 else {
9413                     eptr = (char *)nullstr;
9414                     elen = sizeof nullstr - 1;
9415                 }
9416             }
9417             else {
9418                 eptr = SvPVx_const(argsv, elen);
9419                 if (DO_UTF8(argsv)) {
9420                     if (has_precis && precis < elen) {
9421                         I32 p = precis;
9422                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
9423                         precis = p;
9424                     }
9425                     if (width) { /* fudge width (can't fudge elen) */
9426                         width += elen - sv_len_utf8(argsv);
9427                     }
9428                     is_utf8 = TRUE;
9429                 }
9430             }
9431
9432         string:
9433             vectorize = FALSE;
9434             if (has_precis && elen > precis)
9435                 elen = precis;
9436             break;
9437
9438             /* INTEGERS */
9439
9440         case 'p':
9441             if (left && args) {         /* SVf */
9442                 left = FALSE;
9443                 if (width) {
9444                     precis = width;
9445                     has_precis = TRUE;
9446                     width = 0;
9447                 }
9448                 if (vectorize)
9449                     goto unknown;
9450                 argsv = va_arg(*args, SV*);
9451                 eptr = SvPVx_const(argsv, elen);
9452                 if (DO_UTF8(argsv))
9453                     is_utf8 = TRUE;
9454                 goto string;
9455             }
9456             if (alt || vectorize)
9457                 goto unknown;
9458             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
9459             base = 16;
9460             goto integer;
9461
9462         case 'D':
9463 #ifdef IV_IS_QUAD
9464             intsize = 'q';
9465 #else
9466             intsize = 'l';
9467 #endif
9468             /* FALL THROUGH */
9469         case 'd':
9470         case 'i':
9471             if (vectorize) {
9472                 STRLEN ulen;
9473                 if (!veclen)
9474                     continue;
9475                 if (vec_utf8)
9476                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9477                                         UTF8_ALLOW_ANYUV);
9478                 else {
9479                     uv = *vecstr;
9480                     ulen = 1;
9481                 }
9482                 vecstr += ulen;
9483                 veclen -= ulen;
9484                 if (plus)
9485                      esignbuf[esignlen++] = plus;
9486             }
9487             else if (args) {
9488                 switch (intsize) {
9489                 case 'h':       iv = (short)va_arg(*args, int); break;
9490                 case 'l':       iv = va_arg(*args, long); break;
9491                 case 'V':       iv = va_arg(*args, IV); break;
9492                 default:        iv = va_arg(*args, int); break;
9493 #ifdef HAS_QUAD
9494                 case 'q':       iv = va_arg(*args, Quad_t); break;
9495 #endif
9496                 }
9497             }
9498             else {
9499                 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
9500                 switch (intsize) {
9501                 case 'h':       iv = (short)tiv; break;
9502                 case 'l':       iv = (long)tiv; break;
9503                 case 'V':
9504                 default:        iv = tiv; break;
9505 #ifdef HAS_QUAD
9506                 case 'q':       iv = (Quad_t)tiv; break;
9507 #endif
9508                 }
9509             }
9510             if ( !vectorize )   /* we already set uv above */
9511             {
9512                 if (iv >= 0) {
9513                     uv = iv;
9514                     if (plus)
9515                         esignbuf[esignlen++] = plus;
9516                 }
9517                 else {
9518                     uv = -iv;
9519                     esignbuf[esignlen++] = '-';
9520                 }
9521             }
9522             base = 10;
9523             goto integer;
9524
9525         case 'U':
9526 #ifdef IV_IS_QUAD
9527             intsize = 'q';
9528 #else
9529             intsize = 'l';
9530 #endif
9531             /* FALL THROUGH */
9532         case 'u':
9533             base = 10;
9534             goto uns_integer;
9535
9536         case 'b':
9537             base = 2;
9538             goto uns_integer;
9539
9540         case 'O':
9541 #ifdef IV_IS_QUAD
9542             intsize = 'q';
9543 #else
9544             intsize = 'l';
9545 #endif
9546             /* FALL THROUGH */
9547         case 'o':
9548             base = 8;
9549             goto uns_integer;
9550
9551         case 'X':
9552         case 'x':
9553             base = 16;
9554
9555         uns_integer:
9556             if (vectorize) {
9557                 STRLEN ulen;
9558         vector:
9559                 if (!veclen)
9560                     continue;
9561                 if (vec_utf8)
9562                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9563                                         UTF8_ALLOW_ANYUV);
9564                 else {
9565                     uv = *vecstr;
9566                     ulen = 1;
9567                 }
9568                 vecstr += ulen;
9569                 veclen -= ulen;
9570             }
9571             else if (args) {
9572                 switch (intsize) {
9573                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
9574                 case 'l':  uv = va_arg(*args, unsigned long); break;
9575                 case 'V':  uv = va_arg(*args, UV); break;
9576                 default:   uv = va_arg(*args, unsigned); break;
9577 #ifdef HAS_QUAD
9578                 case 'q':  uv = va_arg(*args, Uquad_t); break;
9579 #endif
9580                 }
9581             }
9582             else {
9583                 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
9584                 switch (intsize) {
9585                 case 'h':       uv = (unsigned short)tuv; break;
9586                 case 'l':       uv = (unsigned long)tuv; break;
9587                 case 'V':
9588                 default:        uv = tuv; break;
9589 #ifdef HAS_QUAD
9590                 case 'q':       uv = (Uquad_t)tuv; break;
9591 #endif
9592                 }
9593             }
9594
9595         integer:
9596             {
9597                 char *ptr = ebuf + sizeof ebuf;
9598                 switch (base) {
9599                     unsigned dig;
9600                 case 16:
9601                     if (!uv)
9602                         alt = FALSE;
9603                     p = (char*)((c == 'X')
9604                                 ? "0123456789ABCDEF" : "0123456789abcdef");
9605                     do {
9606                         dig = uv & 15;
9607                         *--ptr = p[dig];
9608                     } while (uv >>= 4);
9609                     if (alt) {
9610                         esignbuf[esignlen++] = '0';
9611                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
9612                     }
9613                     break;
9614                 case 8:
9615                     do {
9616                         dig = uv & 7;
9617                         *--ptr = '0' + dig;
9618                     } while (uv >>= 3);
9619                     if (alt && *ptr != '0')
9620                         *--ptr = '0';
9621                     break;
9622                 case 2:
9623                     do {
9624                         dig = uv & 1;
9625                         *--ptr = '0' + dig;
9626                     } while (uv >>= 1);
9627                     if (alt) {
9628                         esignbuf[esignlen++] = '0';
9629                         esignbuf[esignlen++] = 'b';
9630                     }
9631                     break;
9632                 default:                /* it had better be ten or less */
9633                     do {
9634                         dig = uv % base;
9635                         *--ptr = '0' + dig;
9636                     } while (uv /= base);
9637                     break;
9638                 }
9639                 elen = (ebuf + sizeof ebuf) - ptr;
9640                 eptr = ptr;
9641                 if (has_precis) {
9642                     if (precis > elen)
9643                         zeros = precis - elen;
9644                     else if (precis == 0 && elen == 1 && *eptr == '0')
9645                         elen = 0;
9646                 }
9647             }
9648             break;
9649
9650             /* FLOATING POINT */
9651
9652         case 'F':
9653             c = 'f';            /* maybe %F isn't supported here */
9654             /* FALL THROUGH */
9655         case 'e': case 'E':
9656         case 'f':
9657         case 'g': case 'G':
9658
9659             /* This is evil, but floating point is even more evil */
9660
9661             /* for SV-style calling, we can only get NV
9662                for C-style calling, we assume %f is double;
9663                for simplicity we allow any of %Lf, %llf, %qf for long double
9664             */
9665             switch (intsize) {
9666             case 'V':
9667 #if defined(USE_LONG_DOUBLE)
9668                 intsize = 'q';
9669 #endif
9670                 break;
9671 /* [perl #20339] - we should accept and ignore %lf rather than die */
9672             case 'l':
9673                 /* FALL THROUGH */
9674             default:
9675 #if defined(USE_LONG_DOUBLE)
9676                 intsize = args ? 0 : 'q';
9677 #endif
9678                 break;
9679             case 'q':
9680 #if defined(HAS_LONG_DOUBLE)
9681                 break;
9682 #else
9683                 /* FALL THROUGH */
9684 #endif
9685             case 'h':
9686                 goto unknown;
9687             }
9688
9689             /* now we need (long double) if intsize == 'q', else (double) */
9690             nv = (args && !vectorize) ?
9691 #if LONG_DOUBLESIZE > DOUBLESIZE
9692                 intsize == 'q' ?
9693                     va_arg(*args, long double) :
9694                     va_arg(*args, double)
9695 #else
9696                     va_arg(*args, double)
9697 #endif
9698                 : SvNVx(argsv);
9699
9700             need = 0;
9701             vectorize = FALSE;
9702             if (c != 'e' && c != 'E') {
9703                 i = PERL_INT_MIN;
9704                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9705                    will cast our (long double) to (double) */
9706                 (void)Perl_frexp(nv, &i);
9707                 if (i == PERL_INT_MIN)
9708                     Perl_die(aTHX_ "panic: frexp");
9709                 if (i > 0)
9710                     need = BIT_DIGITS(i);
9711             }
9712             need += has_precis ? precis : 6; /* known default */
9713
9714             if (need < width)
9715                 need = width;
9716
9717 #ifdef HAS_LDBL_SPRINTF_BUG
9718             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9719                with sfio - Allen <allens@cpan.org> */
9720
9721 #  ifdef DBL_MAX
9722 #    define MY_DBL_MAX DBL_MAX
9723 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9724 #    if DOUBLESIZE >= 8
9725 #      define MY_DBL_MAX 1.7976931348623157E+308L
9726 #    else
9727 #      define MY_DBL_MAX 3.40282347E+38L
9728 #    endif
9729 #  endif
9730
9731 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9732 #    define MY_DBL_MAX_BUG 1L
9733 #  else
9734 #    define MY_DBL_MAX_BUG MY_DBL_MAX
9735 #  endif
9736
9737 #  ifdef DBL_MIN
9738 #    define MY_DBL_MIN DBL_MIN
9739 #  else  /* XXX guessing! -Allen */
9740 #    if DOUBLESIZE >= 8
9741 #      define MY_DBL_MIN 2.2250738585072014E-308L
9742 #    else
9743 #      define MY_DBL_MIN 1.17549435E-38L
9744 #    endif
9745 #  endif
9746
9747             if ((intsize == 'q') && (c == 'f') &&
9748                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9749                 (need < DBL_DIG)) {
9750                 /* it's going to be short enough that
9751                  * long double precision is not needed */
9752
9753                 if ((nv <= 0L) && (nv >= -0L))
9754                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9755                 else {
9756                     /* would use Perl_fp_class as a double-check but not
9757                      * functional on IRIX - see perl.h comments */
9758
9759                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9760                         /* It's within the range that a double can represent */
9761 #if defined(DBL_MAX) && !defined(DBL_MIN)
9762                         if ((nv >= ((long double)1/DBL_MAX)) ||
9763                             (nv <= (-(long double)1/DBL_MAX)))
9764 #endif
9765                         fix_ldbl_sprintf_bug = TRUE;
9766                     }
9767                 }
9768                 if (fix_ldbl_sprintf_bug == TRUE) {
9769                     double temp;
9770
9771                     intsize = 0;
9772                     temp = (double)nv;
9773                     nv = (NV)temp;
9774                 }
9775             }
9776
9777 #  undef MY_DBL_MAX
9778 #  undef MY_DBL_MAX_BUG
9779 #  undef MY_DBL_MIN
9780
9781 #endif /* HAS_LDBL_SPRINTF_BUG */
9782
9783             need += 20; /* fudge factor */
9784             if (PL_efloatsize < need) {
9785                 Safefree(PL_efloatbuf);
9786                 PL_efloatsize = need + 20; /* more fudge */
9787                 New(906, PL_efloatbuf, PL_efloatsize, char);
9788                 PL_efloatbuf[0] = '\0';
9789             }
9790
9791             if ( !(width || left || plus || alt) && fill != '0'
9792                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
9793                 /* See earlier comment about buggy Gconvert when digits,
9794                    aka precis is 0  */
9795                 if ( c == 'g' && precis) {
9796                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9797                     if (*PL_efloatbuf)  /* May return an empty string for digits==0 */
9798                         goto float_converted;
9799                 } else if ( c == 'f' && !precis) {
9800                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9801                         break;
9802                 }
9803             }
9804             {
9805                 char *ptr = ebuf + sizeof ebuf;
9806                 *--ptr = '\0';
9807                 *--ptr = c;
9808                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9809 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9810                 if (intsize == 'q') {
9811                     /* Copy the one or more characters in a long double
9812                      * format before the 'base' ([efgEFG]) character to
9813                      * the format string. */
9814                     static char const prifldbl[] = PERL_PRIfldbl;
9815                     char const *p = prifldbl + sizeof(prifldbl) - 3;
9816                     while (p >= prifldbl) { *--ptr = *p--; }
9817                 }
9818 #endif
9819                 if (has_precis) {
9820                     base = precis;
9821                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
9822                     *--ptr = '.';
9823                 }
9824                 if (width) {
9825                     base = width;
9826                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
9827                 }
9828                 if (fill == '0')
9829                     *--ptr = fill;
9830                 if (left)
9831                     *--ptr = '-';
9832                 if (plus)
9833                     *--ptr = plus;
9834                 if (alt)
9835                     *--ptr = '#';
9836                 *--ptr = '%';
9837
9838                 /* No taint.  Otherwise we are in the strange situation
9839                  * where printf() taints but print($float) doesn't.
9840                  * --jhi */
9841 #if defined(HAS_LONG_DOUBLE)
9842                 if (intsize == 'q')
9843                     (void)sprintf(PL_efloatbuf, ptr, nv);
9844                 else
9845                     (void)sprintf(PL_efloatbuf, ptr, (double)nv);
9846 #else
9847                 (void)sprintf(PL_efloatbuf, ptr, nv);
9848 #endif
9849             }
9850         float_converted:
9851             eptr = PL_efloatbuf;
9852             elen = strlen(PL_efloatbuf);
9853             break;
9854
9855             /* SPECIAL */
9856
9857         case 'n':
9858             i = SvCUR(sv) - origlen;
9859             if (args && !vectorize) {
9860                 switch (intsize) {
9861                 case 'h':       *(va_arg(*args, short*)) = i; break;
9862                 default:        *(va_arg(*args, int*)) = i; break;
9863                 case 'l':       *(va_arg(*args, long*)) = i; break;
9864                 case 'V':       *(va_arg(*args, IV*)) = i; break;
9865 #ifdef HAS_QUAD
9866                 case 'q':       *(va_arg(*args, Quad_t*)) = i; break;
9867 #endif
9868                 }
9869             }
9870             else
9871                 sv_setuv_mg(argsv, (UV)i);
9872             vectorize = FALSE;
9873             continue;   /* not "break" */
9874
9875             /* UNKNOWN */
9876
9877         default:
9878       unknown:
9879             if (!args && ckWARN(WARN_PRINTF) &&
9880                   (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
9881                 SV *msg = sv_newmortal();
9882                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9883                           (PL_op->op_type == OP_PRTF) ? "" : "s");
9884                 if (c) {
9885                     if (isPRINT(c))
9886                         Perl_sv_catpvf(aTHX_ msg,
9887                                        "\"%%%c\"", c & 0xFF);
9888                     else
9889                         Perl_sv_catpvf(aTHX_ msg,
9890                                        "\"%%\\%03"UVof"\"",
9891                                        (UV)c & 0xFF);
9892                 } else
9893                     sv_catpv(msg, "end of string");
9894                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, msg); /* yes, this is reentrant */
9895             }
9896
9897             /* output mangled stuff ... */
9898             if (c == '\0')
9899                 --q;
9900             eptr = p;
9901             elen = q - p;
9902
9903             /* ... right here, because formatting flags should not apply */
9904             SvGROW(sv, SvCUR(sv) + elen + 1);
9905             p = SvEND(sv);
9906             Copy(eptr, p, elen, char);
9907             p += elen;
9908             *p = '\0';
9909             SvCUR_set(sv, p - SvPVX_const(sv));
9910             svix = osvix;
9911             continue;   /* not "break" */
9912         }
9913
9914         /* calculate width before utf8_upgrade changes it */
9915         have = esignlen + zeros + elen;
9916
9917         if (is_utf8 != has_utf8) {
9918              if (is_utf8) {
9919                   if (SvCUR(sv))
9920                        sv_utf8_upgrade(sv);
9921              }
9922              else {
9923                   SV *nsv = sv_2mortal(newSVpvn(eptr, elen));
9924                   sv_utf8_upgrade(nsv);
9925                   eptr = SvPVX_const(nsv);
9926                   elen = SvCUR(nsv);
9927              }
9928              SvGROW(sv, SvCUR(sv) + elen + 1);
9929              p = SvEND(sv);
9930              *p = '\0';
9931         }
9932
9933         need = (have > width ? have : width);
9934         gap = need - have;
9935
9936         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9937         p = SvEND(sv);
9938         if (esignlen && fill == '0') {
9939             for (i = 0; i < (int)esignlen; i++)
9940                 *p++ = esignbuf[i];
9941         }
9942         if (gap && !left) {
9943             memset(p, fill, gap);
9944             p += gap;
9945         }
9946         if (esignlen && fill != '0') {
9947             for (i = 0; i < (int)esignlen; i++)
9948                 *p++ = esignbuf[i];
9949         }
9950         if (zeros) {
9951             for (i = zeros; i; i--)
9952                 *p++ = '0';
9953         }
9954         if (elen) {
9955             Copy(eptr, p, elen, char);
9956             p += elen;
9957         }
9958         if (gap && left) {
9959             memset(p, ' ', gap);
9960             p += gap;
9961         }
9962         if (vectorize) {
9963             if (veclen) {
9964                 Copy(dotstr, p, dotstrlen, char);
9965                 p += dotstrlen;
9966             }
9967             else
9968                 vectorize = FALSE;              /* done iterating over vecstr */
9969         }
9970         if (is_utf8)
9971             has_utf8 = TRUE;
9972         if (has_utf8)
9973             SvUTF8_on(sv);
9974         *p = '\0';
9975         SvCUR_set(sv, p - SvPVX_const(sv));
9976         if (vectorize) {
9977             esignlen = 0;
9978             goto vector;
9979         }
9980     }
9981 }
9982
9983 /* =========================================================================
9984
9985 =head1 Cloning an interpreter
9986
9987 All the macros and functions in this section are for the private use of
9988 the main function, perl_clone().
9989
9990 The foo_dup() functions make an exact copy of an existing foo thinngy.
9991 During the course of a cloning, a hash table is used to map old addresses
9992 to new addresses. The table is created and manipulated with the
9993 ptr_table_* functions.
9994
9995 =cut
9996
9997 ============================================================================*/
9998
9999
10000 #if defined(USE_ITHREADS)
10001
10002 #ifndef GpREFCNT_inc
10003 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10004 #endif
10005
10006
10007 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
10008 #define av_dup(s,t)     (AV*)sv_dup((SV*)s,t)
10009 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10010 #define hv_dup(s,t)     (HV*)sv_dup((SV*)s,t)
10011 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10012 #define cv_dup(s,t)     (CV*)sv_dup((SV*)s,t)
10013 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10014 #define io_dup(s,t)     (IO*)sv_dup((SV*)s,t)
10015 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
10016 #define gv_dup(s,t)     (GV*)sv_dup((SV*)s,t)
10017 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
10018 #define SAVEPV(p)       (p ? savepv(p) : Nullch)
10019 #define SAVEPVN(p,n)    (p ? savepvn(p,n) : Nullch)
10020
10021
10022 /* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
10023    regcomp.c. AMS 20010712 */
10024
10025 REGEXP *
10026 Perl_re_dup(pTHX_ REGEXP *r, CLONE_PARAMS *param)
10027 {
10028     dVAR;
10029     REGEXP *ret;
10030     int i, len, npar;
10031     struct reg_substr_datum *s;
10032
10033     if (!r)
10034         return (REGEXP *)NULL;
10035
10036     if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
10037         return ret;
10038
10039     len = r->offsets[0];
10040     npar = r->nparens+1;
10041
10042     Newc(0, ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
10043     Copy(r->program, ret->program, len+1, regnode);
10044
10045     New(0, ret->startp, npar, I32);
10046     Copy(r->startp, ret->startp, npar, I32);
10047     New(0, ret->endp, npar, I32);
10048     Copy(r->startp, ret->startp, npar, I32);
10049
10050     New(0, ret->substrs, 1, struct reg_substr_data);
10051     for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
10052         s->min_offset = r->substrs->data[i].min_offset;
10053         s->max_offset = r->substrs->data[i].max_offset;
10054         s->substr     = sv_dup_inc(r->substrs->data[i].substr, param);
10055         s->utf8_substr = sv_dup_inc(r->substrs->data[i].utf8_substr, param);
10056     }
10057
10058     ret->regstclass = NULL;
10059     if (r->data) {
10060         struct reg_data *d;
10061         const int count = r->data->count;
10062
10063         Newc(0, d, sizeof(struct reg_data) + count*sizeof(void *),
10064                 char, struct reg_data);
10065         New(0, d->what, count, U8);
10066
10067         d->count = count;
10068         for (i = 0; i < count; i++) {
10069             d->what[i] = r->data->what[i];
10070             switch (d->what[i]) {
10071                 /* legal options are one of: sfpont
10072                    see also regcomp.h and pregfree() */
10073             case 's':
10074                 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
10075                 break;
10076             case 'p':
10077                 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
10078                 break;
10079             case 'f':
10080                 /* This is cheating. */
10081                 New(0, d->data[i], 1, struct regnode_charclass_class);
10082                 StructCopy(r->data->data[i], d->data[i],
10083                             struct regnode_charclass_class);
10084                 ret->regstclass = (regnode*)d->data[i];
10085                 break;
10086             case 'o':
10087                 /* Compiled op trees are readonly, and can thus be
10088                    shared without duplication. */
10089                 OP_REFCNT_LOCK;
10090                 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
10091                 OP_REFCNT_UNLOCK;
10092                 break;
10093             case 'n':
10094                 d->data[i] = r->data->data[i];
10095                 break;
10096             case 't':
10097                 d->data[i] = r->data->data[i];
10098                 OP_REFCNT_LOCK;
10099                 ((reg_trie_data*)d->data[i])->refcount++;
10100                 OP_REFCNT_UNLOCK;
10101                 break;
10102             default:
10103                 Perl_croak(aTHX_ "panic: re_dup unknown data code '%c'", r->data->what[i]);
10104             }
10105         }
10106
10107         ret->data = d;
10108     }
10109     else
10110         ret->data = NULL;
10111
10112     New(0, ret->offsets, 2*len+1, U32);
10113     Copy(r->offsets, ret->offsets, 2*len+1, U32);
10114
10115     ret->precomp        = SAVEPVN(r->precomp, r->prelen);
10116     ret->refcnt         = r->refcnt;
10117     ret->minlen         = r->minlen;
10118     ret->prelen         = r->prelen;
10119     ret->nparens        = r->nparens;
10120     ret->lastparen      = r->lastparen;
10121     ret->lastcloseparen = r->lastcloseparen;
10122     ret->reganch        = r->reganch;
10123
10124     ret->sublen         = r->sublen;
10125
10126     if (RX_MATCH_COPIED(ret))
10127         ret->subbeg  = SAVEPVN(r->subbeg, r->sublen);
10128     else
10129         ret->subbeg = Nullch;
10130 #ifdef PERL_OLD_COPY_ON_WRITE
10131     ret->saved_copy = Nullsv;
10132 #endif
10133
10134     ptr_table_store(PL_ptr_table, r, ret);
10135     return ret;
10136 }
10137
10138 /* duplicate a file handle */
10139
10140 PerlIO *
10141 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
10142 {
10143     PerlIO *ret;
10144     (void)type;
10145
10146     if (!fp)
10147         return (PerlIO*)NULL;
10148
10149     /* look for it in the table first */
10150     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10151     if (ret)
10152         return ret;
10153
10154     /* create anew and remember what it is */
10155     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
10156     ptr_table_store(PL_ptr_table, fp, ret);
10157     return ret;
10158 }
10159
10160 /* duplicate a directory handle */
10161
10162 DIR *
10163 Perl_dirp_dup(pTHX_ DIR *dp)
10164 {
10165     if (!dp)
10166         return (DIR*)NULL;
10167     /* XXX TODO */
10168     return dp;
10169 }
10170
10171 /* duplicate a typeglob */
10172
10173 GP *
10174 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
10175 {
10176     GP *ret;
10177     if (!gp)
10178         return (GP*)NULL;
10179     /* look for it in the table first */
10180     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10181     if (ret)
10182         return ret;
10183
10184     /* create anew and remember what it is */
10185     Newz(0, ret, 1, GP);
10186     ptr_table_store(PL_ptr_table, gp, ret);
10187
10188     /* clone */
10189     ret->gp_refcnt      = 0;                    /* must be before any other dups! */
10190     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
10191     ret->gp_io          = io_dup_inc(gp->gp_io, param);
10192     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
10193     ret->gp_av          = av_dup_inc(gp->gp_av, param);
10194     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
10195     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10196     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
10197     ret->gp_cvgen       = gp->gp_cvgen;
10198     ret->gp_flags       = gp->gp_flags;
10199     ret->gp_line        = gp->gp_line;
10200     ret->gp_file        = gp->gp_file;          /* points to COP.cop_file */
10201     return ret;
10202 }
10203
10204 /* duplicate a chain of magic */
10205
10206 MAGIC *
10207 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
10208 {
10209     MAGIC *mgprev = (MAGIC*)NULL;
10210     MAGIC *mgret;
10211     if (!mg)
10212         return (MAGIC*)NULL;
10213     /* look for it in the table first */
10214     mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
10215     if (mgret)
10216         return mgret;
10217
10218     for (; mg; mg = mg->mg_moremagic) {
10219         MAGIC *nmg;
10220         Newz(0, nmg, 1, MAGIC);
10221         if (mgprev)
10222             mgprev->mg_moremagic = nmg;
10223         else
10224             mgret = nmg;
10225         nmg->mg_virtual = mg->mg_virtual;       /* XXX copy dynamic vtable? */
10226         nmg->mg_private = mg->mg_private;
10227         nmg->mg_type    = mg->mg_type;
10228         nmg->mg_flags   = mg->mg_flags;
10229         if (mg->mg_type == PERL_MAGIC_qr) {
10230             nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
10231         }
10232         else if(mg->mg_type == PERL_MAGIC_backref) {
10233             const AV * const av = (AV*) mg->mg_obj;
10234             SV **svp;
10235             I32 i;
10236             (void)SvREFCNT_inc(nmg->mg_obj = (SV*)newAV());
10237             svp = AvARRAY(av);
10238             for (i = AvFILLp(av); i >= 0; i--) {
10239                 if (!svp[i]) continue;
10240                 av_push((AV*)nmg->mg_obj,sv_dup(svp[i],param));
10241             }
10242         }
10243         else if (mg->mg_type == PERL_MAGIC_symtab) {
10244             nmg->mg_obj = mg->mg_obj;
10245         }
10246         else {
10247             nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
10248                               ? sv_dup_inc(mg->mg_obj, param)
10249                               : sv_dup(mg->mg_obj, param);
10250         }
10251         nmg->mg_len     = mg->mg_len;
10252         nmg->mg_ptr     = mg->mg_ptr;   /* XXX random ptr? */
10253         if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
10254             if (mg->mg_len > 0) {
10255                 nmg->mg_ptr     = SAVEPVN(mg->mg_ptr, mg->mg_len);
10256                 if (mg->mg_type == PERL_MAGIC_overload_table &&
10257                         AMT_AMAGIC((AMT*)mg->mg_ptr))
10258                 {
10259                     AMT *amtp = (AMT*)mg->mg_ptr;
10260                     AMT *namtp = (AMT*)nmg->mg_ptr;
10261                     I32 i;
10262                     for (i = 1; i < NofAMmeth; i++) {
10263                         namtp->table[i] = cv_dup_inc(amtp->table[i], param);
10264                     }
10265                 }
10266             }
10267             else if (mg->mg_len == HEf_SVKEY)
10268                 nmg->mg_ptr     = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
10269         }
10270         if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
10271             CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10272         }
10273         mgprev = nmg;
10274     }
10275     return mgret;
10276 }
10277
10278 /* create a new pointer-mapping table */
10279
10280 PTR_TBL_t *
10281 Perl_ptr_table_new(pTHX)
10282 {
10283     PTR_TBL_t *tbl;
10284     Newz(0, tbl, 1, PTR_TBL_t);
10285     tbl->tbl_max        = 511;
10286     tbl->tbl_items      = 0;
10287     Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
10288     return tbl;
10289 }
10290
10291 #if (PTRSIZE == 8)
10292 #  define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 3)
10293 #else
10294 #  define PTR_TABLE_HASH(ptr) (PTR2UV(ptr) >> 2)
10295 #endif
10296
10297
10298
10299 STATIC void
10300 S_more_pte(pTHX)
10301 {
10302     struct ptr_tbl_ent* pte;
10303     struct ptr_tbl_ent* pteend;
10304     New(0, pte, PERL_ARENA_SIZE/sizeof(struct ptr_tbl_ent), struct ptr_tbl_ent);
10305     pte->next = PL_pte_arenaroot;
10306     PL_pte_arenaroot = pte;
10307
10308     pteend = &pte[PERL_ARENA_SIZE / sizeof(struct ptr_tbl_ent) - 1];
10309     PL_pte_root = ++pte;
10310     while (pte < pteend) {
10311         pte->next = pte + 1;
10312         pte++;
10313     }
10314     pte->next = 0;
10315 }
10316
10317 STATIC struct ptr_tbl_ent*
10318 S_new_pte(pTHX)
10319 {
10320     struct ptr_tbl_ent* pte;
10321     if (!PL_pte_root)
10322         S_more_pte(aTHX);
10323     pte = PL_pte_root;
10324     PL_pte_root = pte->next;
10325     return pte;
10326 }
10327
10328 STATIC void
10329 S_del_pte(pTHX_ struct ptr_tbl_ent*p)
10330 {
10331     p->next = PL_pte_root;
10332     PL_pte_root = p;
10333 }
10334
10335 /* map an existing pointer using a table */
10336
10337 void *
10338 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
10339 {
10340     PTR_TBL_ENT_t *tblent;
10341     const UV hash = PTR_TABLE_HASH(sv);
10342     assert(tbl);
10343     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10344     for (; tblent; tblent = tblent->next) {
10345         if (tblent->oldval == sv)
10346             return tblent->newval;
10347     }
10348     return (void*)NULL;
10349 }
10350
10351 /* add a new entry to a pointer-mapping table */
10352
10353 void
10354 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
10355 {
10356     PTR_TBL_ENT_t *tblent, **otblent;
10357     /* XXX this may be pessimal on platforms where pointers aren't good
10358      * hash values e.g. if they grow faster in the most significant
10359      * bits */
10360     const UV hash = PTR_TABLE_HASH(oldv);
10361     bool empty = 1;
10362
10363     assert(tbl);
10364     otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
10365     for (tblent = *otblent; tblent; empty=0, tblent = tblent->next) {
10366         if (tblent->oldval == oldv) {
10367             tblent->newval = newv;
10368             return;
10369         }
10370     }
10371     tblent = S_new_pte(aTHX);
10372     tblent->oldval = oldv;
10373     tblent->newval = newv;
10374     tblent->next = *otblent;
10375     *otblent = tblent;
10376     tbl->tbl_items++;
10377     if (!empty && tbl->tbl_items > tbl->tbl_max)
10378         ptr_table_split(tbl);
10379 }
10380
10381 /* double the hash bucket size of an existing ptr table */
10382
10383 void
10384 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
10385 {
10386     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
10387     const UV oldsize = tbl->tbl_max + 1;
10388     UV newsize = oldsize * 2;
10389     UV i;
10390
10391     Renew(ary, newsize, PTR_TBL_ENT_t*);
10392     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10393     tbl->tbl_max = --newsize;
10394     tbl->tbl_ary = ary;
10395     for (i=0; i < oldsize; i++, ary++) {
10396         PTR_TBL_ENT_t **curentp, **entp, *ent;
10397         if (!*ary)
10398             continue;
10399         curentp = ary + oldsize;
10400         for (entp = ary, ent = *ary; ent; ent = *entp) {
10401             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
10402                 *entp = ent->next;
10403                 ent->next = *curentp;
10404                 *curentp = ent;
10405                 continue;
10406             }
10407             else
10408                 entp = &ent->next;
10409         }
10410     }
10411 }
10412
10413 /* remove all the entries from a ptr table */
10414
10415 void
10416 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
10417 {
10418     register PTR_TBL_ENT_t **array;
10419     register PTR_TBL_ENT_t *entry;
10420     UV riter = 0;
10421     UV max;
10422
10423     if (!tbl || !tbl->tbl_items) {
10424         return;
10425     }
10426
10427     array = tbl->tbl_ary;
10428     entry = array[0];
10429     max = tbl->tbl_max;
10430
10431     for (;;) {
10432         if (entry) {
10433             PTR_TBL_ENT_t *oentry = entry;
10434             entry = entry->next;
10435             S_del_pte(aTHX_ oentry);
10436         }
10437         if (!entry) {
10438             if (++riter > max) {
10439                 break;
10440             }
10441             entry = array[riter];
10442         }
10443     }
10444
10445     tbl->tbl_items = 0;
10446 }
10447
10448 /* clear and free a ptr table */
10449
10450 void
10451 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
10452 {
10453     if (!tbl) {
10454         return;
10455     }
10456     ptr_table_clear(tbl);
10457     Safefree(tbl->tbl_ary);
10458     Safefree(tbl);
10459 }
10460
10461 /* attempt to make everything in the typeglob readonly */
10462
10463 STATIC SV *
10464 S_gv_share(pTHX_ SV *sstr, CLONE_PARAMS *param)
10465 {
10466     GV *gv = (GV*)sstr;
10467     SV *sv = &param->proto_perl->Isv_no; /* just need SvREADONLY-ness */
10468
10469     if (GvIO(gv) || GvFORM(gv)) {
10470         GvUNIQUE_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
10471     }
10472     else if (!GvCV(gv)) {
10473         GvCV(gv) = (CV*)sv;
10474     }
10475     else {
10476         /* CvPADLISTs cannot be shared */
10477         if (!SvREADONLY(GvCV(gv)) && !CvXSUB(GvCV(gv))) {
10478             GvUNIQUE_off(gv);
10479         }
10480     }
10481
10482     if (!GvUNIQUE(gv)) {
10483 #if 0
10484         PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
10485                       HvNAME_get(GvSTASH(gv)), GvNAME(gv));
10486 #endif
10487         return Nullsv;
10488     }
10489
10490     /*
10491      * write attempts will die with
10492      * "Modification of a read-only value attempted"
10493      */
10494     if (!GvSV(gv)) {
10495         GvSV(gv) = sv;
10496     }
10497     else {
10498         SvREADONLY_on(GvSV(gv));
10499     }
10500
10501     if (!GvAV(gv)) {
10502         GvAV(gv) = (AV*)sv;
10503     }
10504     else {
10505         SvREADONLY_on(GvAV(gv));
10506     }
10507
10508     if (!GvHV(gv)) {
10509         GvHV(gv) = (HV*)sv;
10510     }
10511     else {
10512         SvREADONLY_on(GvHV(gv));
10513     }
10514
10515     return sstr; /* he_dup() will SvREFCNT_inc() */
10516 }
10517
10518 /* duplicate an SV of any type (including AV, HV etc) */
10519
10520 void
10521 Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param)
10522 {
10523     if (SvROK(sstr)) {
10524         SvRV_set(dstr, SvWEAKREF(sstr)
10525                        ? sv_dup(SvRV(sstr), param)
10526                        : sv_dup_inc(SvRV(sstr), param));
10527
10528     }
10529     else if (SvPVX_const(sstr)) {
10530         /* Has something there */
10531         if (SvLEN(sstr)) {
10532             /* Normal PV - clone whole allocated space */
10533             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
10534             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10535                 /* Not that normal - actually sstr is copy on write.
10536                    But we are a true, independant SV, so:  */
10537                 SvREADONLY_off(dstr);
10538                 SvFAKE_off(dstr);
10539             }
10540         }
10541         else {
10542             /* Special case - not normally malloced for some reason */
10543             if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
10544                 /* A "shared" PV - clone it as "shared" PV */
10545                 SvPV_set(dstr,
10546                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
10547                                          param)));
10548             }
10549             else {
10550                 /* Some other special case - random pointer */
10551                 SvPV_set(dstr, SvPVX(sstr));            
10552             }
10553         }
10554     }
10555     else {
10556         /* Copy the Null */
10557         if (SvTYPE(dstr) == SVt_RV)
10558             SvRV_set(dstr, NULL);
10559         else
10560             SvPV_set(dstr, 0);
10561     }
10562 }
10563
10564 SV *
10565 Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param)
10566 {
10567     dVAR;
10568     SV *dstr;
10569
10570     if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
10571         return Nullsv;
10572     /* look for it in the table first */
10573     dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
10574     if (dstr)
10575         return dstr;
10576
10577     if(param->flags & CLONEf_JOIN_IN) {
10578         /** We are joining here so we don't want do clone
10579             something that is bad **/
10580         const char *hvname;
10581
10582         if(SvTYPE(sstr) == SVt_PVHV &&
10583            (hvname = HvNAME_get(sstr))) {
10584             /** don't clone stashes if they already exist **/
10585             HV* old_stash = gv_stashpv(hvname,0);
10586             return (SV*) old_stash;
10587         }
10588     }
10589
10590     /* create anew and remember what it is */
10591     new_SV(dstr);
10592
10593 #ifdef DEBUG_LEAKING_SCALARS
10594     dstr->sv_debug_optype = sstr->sv_debug_optype;
10595     dstr->sv_debug_line = sstr->sv_debug_line;
10596     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10597     dstr->sv_debug_cloned = 1;
10598 #  ifdef NETWARE
10599     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
10600 #  else
10601     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
10602 #  endif
10603 #endif
10604
10605     ptr_table_store(PL_ptr_table, sstr, dstr);
10606
10607     /* clone */
10608     SvFLAGS(dstr)       = SvFLAGS(sstr);
10609     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
10610     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
10611
10612 #ifdef DEBUGGING
10613     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
10614         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10615                       PL_watch_pvx, SvPVX_const(sstr));
10616 #endif
10617
10618     /* don't clone objects whose class has asked us not to */
10619     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10620         SvFLAGS(dstr) &= ~SVTYPEMASK;
10621         SvOBJECT_off(dstr);
10622         return dstr;
10623     }
10624
10625     switch (SvTYPE(sstr)) {
10626     case SVt_NULL:
10627         SvANY(dstr)     = NULL;
10628         break;
10629     case SVt_IV:
10630         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
10631         SvIV_set(dstr, SvIVX(sstr));
10632         break;
10633     case SVt_NV:
10634         SvANY(dstr)     = new_XNV();
10635         SvNV_set(dstr, SvNVX(sstr));
10636         break;
10637     case SVt_RV:
10638         SvANY(dstr)     = &(dstr->sv_u.svu_rv);
10639         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10640         break;
10641     case SVt_PV:
10642         SvANY(dstr)     = new_XPV();
10643         SvCUR_set(dstr, SvCUR(sstr));
10644         SvLEN_set(dstr, SvLEN(sstr));
10645         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10646         break;
10647     case SVt_PVIV:
10648         SvANY(dstr)     = new_XPVIV();
10649         SvCUR_set(dstr, SvCUR(sstr));
10650         SvLEN_set(dstr, SvLEN(sstr));
10651         SvIV_set(dstr, SvIVX(sstr));
10652         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10653         break;
10654     case SVt_PVNV:
10655         SvANY(dstr)     = new_XPVNV();
10656         SvCUR_set(dstr, SvCUR(sstr));
10657         SvLEN_set(dstr, SvLEN(sstr));
10658         SvIV_set(dstr, SvIVX(sstr));
10659         SvNV_set(dstr, SvNVX(sstr));
10660         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10661         break;
10662     case SVt_PVMG:
10663         SvANY(dstr)     = new_XPVMG();
10664         SvCUR_set(dstr, SvCUR(sstr));
10665         SvLEN_set(dstr, SvLEN(sstr));
10666         SvIV_set(dstr, SvIVX(sstr));
10667         SvNV_set(dstr, SvNVX(sstr));
10668         SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10669         SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10670         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10671         break;
10672     case SVt_PVBM:
10673         SvANY(dstr)     = new_XPVBM();
10674         SvCUR_set(dstr, SvCUR(sstr));
10675         SvLEN_set(dstr, SvLEN(sstr));
10676         SvIV_set(dstr, SvIVX(sstr));
10677         SvNV_set(dstr, SvNVX(sstr));
10678         SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10679         SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10680         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10681         BmRARE(dstr)    = BmRARE(sstr);
10682         BmUSEFUL(dstr)  = BmUSEFUL(sstr);
10683         BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
10684         break;
10685     case SVt_PVLV:
10686         SvANY(dstr)     = new_XPVLV();
10687         SvCUR_set(dstr, SvCUR(sstr));
10688         SvLEN_set(dstr, SvLEN(sstr));
10689         SvIV_set(dstr, SvIVX(sstr));
10690         SvNV_set(dstr, SvNVX(sstr));
10691         SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10692         SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10693         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10694         LvTARGOFF(dstr) = LvTARGOFF(sstr);      /* XXX sometimes holds PMOP* when DEBUGGING */
10695         LvTARGLEN(dstr) = LvTARGLEN(sstr);
10696         if (LvTYPE(sstr) == 't') /* for tie: unrefcnted fake (SV**) */
10697             LvTARG(dstr) = dstr;
10698         else if (LvTYPE(sstr) == 'T') /* for tie: fake HE */
10699             LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(sstr), 0, param);
10700         else
10701             LvTARG(dstr) = sv_dup_inc(LvTARG(sstr), param);
10702         LvTYPE(dstr)    = LvTYPE(sstr);
10703         break;
10704     case SVt_PVGV:
10705         if (GvUNIQUE((GV*)sstr)) {
10706             SV *share;
10707             if ((share = gv_share(sstr, param))) {
10708                 del_SV(dstr);
10709                 dstr = share;
10710                 ptr_table_store(PL_ptr_table, sstr, dstr);
10711 #if 0
10712                 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
10713                               HvNAME_get(GvSTASH(share)), GvNAME(share));
10714 #endif
10715                 break;
10716             }
10717         }
10718         SvANY(dstr)     = new_XPVGV();
10719         SvCUR_set(dstr, SvCUR(sstr));
10720         SvLEN_set(dstr, SvLEN(sstr));
10721         SvIV_set(dstr, SvIVX(sstr));
10722         SvNV_set(dstr, SvNVX(sstr));
10723         SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10724         SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10725         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10726         GvNAMELEN(dstr) = GvNAMELEN(sstr);
10727         GvNAME(dstr)    = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
10728         GvSTASH(dstr)   = hv_dup_inc(GvSTASH(sstr), param);
10729         GvFLAGS(dstr)   = GvFLAGS(sstr);
10730         GvGP(dstr)      = gp_dup(GvGP(sstr), param);
10731         (void)GpREFCNT_inc(GvGP(dstr));
10732         break;
10733     case SVt_PVIO:
10734         SvANY(dstr)     = new_XPVIO();
10735         SvCUR_set(dstr, SvCUR(sstr));
10736         SvLEN_set(dstr, SvLEN(sstr));
10737         SvIV_set(dstr, SvIVX(sstr));
10738         SvNV_set(dstr, SvNVX(sstr));
10739         SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10740         SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10741         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10742         IoIFP(dstr)     = fp_dup(IoIFP(sstr), IoTYPE(sstr), param);
10743         if (IoOFP(sstr) == IoIFP(sstr))
10744             IoOFP(dstr) = IoIFP(dstr);
10745         else
10746             IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr), param);
10747         /* PL_rsfp_filters entries have fake IoDIRP() */
10748         if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
10749             IoDIRP(dstr)        = dirp_dup(IoDIRP(sstr));
10750         else
10751             IoDIRP(dstr)        = IoDIRP(sstr);
10752         IoLINES(dstr)           = IoLINES(sstr);
10753         IoPAGE(dstr)            = IoPAGE(sstr);
10754         IoPAGE_LEN(dstr)        = IoPAGE_LEN(sstr);
10755         IoLINES_LEFT(dstr)      = IoLINES_LEFT(sstr);
10756         if(IoFLAGS(sstr) & IOf_FAKE_DIRP) {
10757             /* I have no idea why fake dirp (rsfps)
10758                should be treaded differently but otherwise
10759                we end up with leaks -- sky*/
10760             IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(sstr), param);
10761             IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(sstr), param);
10762             IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(sstr), param);
10763         } else {
10764             IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(sstr), param);
10765             IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(sstr), param);
10766             IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(sstr), param);
10767         }
10768         IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(sstr));
10769         IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(sstr));
10770         IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(sstr));
10771         IoSUBPROCESS(dstr)      = IoSUBPROCESS(sstr);
10772         IoTYPE(dstr)            = IoTYPE(sstr);
10773         IoFLAGS(dstr)           = IoFLAGS(sstr);
10774         break;
10775     case SVt_PVAV:
10776         SvANY(dstr)     = new_XPVAV();
10777         SvCUR_set(dstr, SvCUR(sstr));
10778         SvLEN_set(dstr, SvLEN(sstr));
10779         SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10780         SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10781         if (AvARRAY((AV*)sstr)) {
10782             SV **dst_ary, **src_ary;
10783             SSize_t items = AvFILLp((AV*)sstr) + 1;
10784
10785             src_ary = AvARRAY((AV*)sstr);
10786             Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
10787             ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10788             SvPV_set(dstr, (char*)dst_ary);
10789             AvALLOC((AV*)dstr) = dst_ary;
10790             if (AvREAL((AV*)sstr)) {
10791                 while (items-- > 0)
10792                     *dst_ary++ = sv_dup_inc(*src_ary++, param);
10793             }
10794             else {
10795                 while (items-- > 0)
10796                     *dst_ary++ = sv_dup(*src_ary++, param);
10797             }
10798             items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10799             while (items-- > 0) {
10800                 *dst_ary++ = &PL_sv_undef;
10801             }
10802         }
10803         else {
10804             SvPV_set(dstr, Nullch);
10805             AvALLOC((AV*)dstr)  = (SV**)NULL;
10806         }
10807         break;
10808     case SVt_PVHV:
10809         SvANY(dstr)     = new_XPVHV();
10810         SvCUR_set(dstr, SvCUR(sstr));
10811         SvLEN_set(dstr, SvLEN(sstr));
10812         HvTOTALKEYS(dstr) = HvTOTALKEYS(sstr);
10813         SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10814         SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10815         {
10816             HEK *hvname = 0;
10817
10818             if (HvARRAY((HV*)sstr)) {
10819                 STRLEN i = 0;
10820                 const bool sharekeys = !!HvSHAREKEYS(sstr);
10821                 XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10822                 XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10823                 char *darray;
10824                 New(0, darray,
10825                      PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
10826                      + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0), char);
10827                 HvARRAY(dstr) = (HE**)darray;
10828                 while (i <= sxhv->xhv_max) {
10829                     HE *source = HvARRAY(sstr)[i];
10830                     HvARRAY(dstr)[i]
10831                         = source ? he_dup(source, sharekeys, param) : 0;
10832                     ++i;
10833                 }
10834                 if (SvOOK(sstr)) {
10835                     struct xpvhv_aux *saux = HvAUX(sstr);
10836                     struct xpvhv_aux *daux = HvAUX(dstr);
10837                     /* This flag isn't copied.  */
10838                     /* SvOOK_on(hv) attacks the IV flags.  */
10839                     SvFLAGS(dstr) |= SVf_OOK;
10840
10841                     hvname = saux->xhv_name;
10842                     daux->xhv_name = hvname ? hek_dup(hvname, param) : hvname;
10843
10844                     daux->xhv_riter = saux->xhv_riter;
10845                     daux->xhv_eiter = saux->xhv_eiter
10846                         ? he_dup(saux->xhv_eiter, (bool)!!HvSHAREKEYS(sstr),
10847                                  param) : 0;
10848                 }
10849             }
10850             else {
10851                 SvPV_set(dstr, Nullch);
10852             }
10853             /* Record stashes for possible cloning in Perl_clone(). */
10854             if(hvname)
10855                 av_push(param->stashes, dstr);
10856         }
10857         break;
10858     case SVt_PVFM:
10859         SvANY(dstr)     = new_XPVFM();
10860         FmLINES(dstr)   = FmLINES(sstr);
10861         goto dup_pvcv;
10862         /* NOTREACHED */
10863     case SVt_PVCV:
10864         SvANY(dstr)     = new_XPVCV();
10865         dup_pvcv:
10866         SvCUR_set(dstr, SvCUR(sstr));
10867         SvLEN_set(dstr, SvLEN(sstr));
10868         SvIV_set(dstr, SvIVX(sstr));
10869         SvNV_set(dstr, SvNVX(sstr));
10870         SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
10871         SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
10872         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10873         CvSTASH(dstr)   = hv_dup(CvSTASH(sstr), param); /* NOTE: not refcounted */
10874         CvSTART(dstr)   = CvSTART(sstr);
10875         OP_REFCNT_LOCK;
10876         CvROOT(dstr)    = OpREFCNT_inc(CvROOT(sstr));
10877         OP_REFCNT_UNLOCK;
10878         CvXSUB(dstr)    = CvXSUB(sstr);
10879         CvXSUBANY(dstr) = CvXSUBANY(sstr);
10880         if (CvCONST(sstr)) {
10881             CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(sstr)) ?
10882                 SvREFCNT_inc(CvXSUBANY(sstr).any_ptr) :
10883                 sv_dup_inc((SV *)CvXSUBANY(sstr).any_ptr, param);
10884         }
10885         /* don't dup if copying back - CvGV isn't refcounted, so the
10886          * duped GV may never be freed. A bit of a hack! DAPM */
10887         CvGV(dstr)      = (param->flags & CLONEf_JOIN_IN) ?
10888                 Nullgv : gv_dup(CvGV(sstr), param) ;
10889         if (param->flags & CLONEf_COPY_STACKS) {
10890           CvDEPTH(dstr) = CvDEPTH(sstr);
10891         } else {
10892           CvDEPTH(dstr) = 0;
10893         }
10894         PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10895         CvOUTSIDE_SEQ(dstr) = CvOUTSIDE_SEQ(sstr);
10896         CvOUTSIDE(dstr) =
10897                 CvWEAKOUTSIDE(sstr)
10898                         ? cv_dup(    CvOUTSIDE(sstr), param)
10899                         : cv_dup_inc(CvOUTSIDE(sstr), param);
10900         CvFLAGS(dstr)   = CvFLAGS(sstr);
10901         CvFILE(dstr) = CvXSUB(sstr) ? CvFILE(sstr) : SAVEPV(CvFILE(sstr));
10902         break;
10903     default:
10904         Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
10905         break;
10906     }
10907
10908     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10909         ++PL_sv_objcount;
10910
10911     return dstr;
10912  }
10913
10914 /* duplicate a context */
10915
10916 PERL_CONTEXT *
10917 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10918 {
10919     PERL_CONTEXT *ncxs;
10920
10921     if (!cxs)
10922         return (PERL_CONTEXT*)NULL;
10923
10924     /* look for it in the table first */
10925     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10926     if (ncxs)
10927         return ncxs;
10928
10929     /* create anew and remember what it is */
10930     Newz(56, ncxs, max + 1, PERL_CONTEXT);
10931     ptr_table_store(PL_ptr_table, cxs, ncxs);
10932
10933     while (ix >= 0) {
10934         PERL_CONTEXT *cx = &cxs[ix];
10935         PERL_CONTEXT *ncx = &ncxs[ix];
10936         ncx->cx_type    = cx->cx_type;
10937         if (CxTYPE(cx) == CXt_SUBST) {
10938             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10939         }
10940         else {
10941             ncx->blk_oldsp      = cx->blk_oldsp;
10942             ncx->blk_oldcop     = cx->blk_oldcop;
10943             ncx->blk_oldmarksp  = cx->blk_oldmarksp;
10944             ncx->blk_oldscopesp = cx->blk_oldscopesp;
10945             ncx->blk_oldpm      = cx->blk_oldpm;
10946             ncx->blk_gimme      = cx->blk_gimme;
10947             switch (CxTYPE(cx)) {
10948             case CXt_SUB:
10949                 ncx->blk_sub.cv         = (cx->blk_sub.olddepth == 0
10950                                            ? cv_dup_inc(cx->blk_sub.cv, param)
10951                                            : cv_dup(cx->blk_sub.cv,param));
10952                 ncx->blk_sub.argarray   = (cx->blk_sub.hasargs
10953                                            ? av_dup_inc(cx->blk_sub.argarray, param)
10954                                            : Nullav);
10955                 ncx->blk_sub.savearray  = av_dup_inc(cx->blk_sub.savearray, param);
10956                 ncx->blk_sub.olddepth   = cx->blk_sub.olddepth;
10957                 ncx->blk_sub.hasargs    = cx->blk_sub.hasargs;
10958                 ncx->blk_sub.lval       = cx->blk_sub.lval;
10959                 ncx->blk_sub.retop      = cx->blk_sub.retop;
10960                 break;
10961             case CXt_EVAL:
10962                 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
10963                 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
10964                 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
10965                 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
10966                 ncx->blk_eval.cur_text  = sv_dup(cx->blk_eval.cur_text, param);
10967                 ncx->blk_eval.retop = cx->blk_eval.retop;
10968                 break;
10969             case CXt_LOOP:
10970                 ncx->blk_loop.label     = cx->blk_loop.label;
10971                 ncx->blk_loop.resetsp   = cx->blk_loop.resetsp;
10972                 ncx->blk_loop.redo_op   = cx->blk_loop.redo_op;
10973                 ncx->blk_loop.next_op   = cx->blk_loop.next_op;
10974                 ncx->blk_loop.last_op   = cx->blk_loop.last_op;
10975                 ncx->blk_loop.iterdata  = (CxPADLOOP(cx)
10976                                            ? cx->blk_loop.iterdata
10977                                            : gv_dup((GV*)cx->blk_loop.iterdata, param));
10978                 ncx->blk_loop.oldcomppad
10979                     = (PAD*)ptr_table_fetch(PL_ptr_table,
10980                                             cx->blk_loop.oldcomppad);
10981                 ncx->blk_loop.itersave  = sv_dup_inc(cx->blk_loop.itersave, param);
10982                 ncx->blk_loop.iterlval  = sv_dup_inc(cx->blk_loop.iterlval, param);
10983                 ncx->blk_loop.iterary   = av_dup_inc(cx->blk_loop.iterary, param);
10984                 ncx->blk_loop.iterix    = cx->blk_loop.iterix;
10985                 ncx->blk_loop.itermax   = cx->blk_loop.itermax;
10986                 break;
10987             case CXt_FORMAT:
10988                 ncx->blk_sub.cv         = cv_dup(cx->blk_sub.cv, param);
10989                 ncx->blk_sub.gv         = gv_dup(cx->blk_sub.gv, param);
10990                 ncx->blk_sub.dfoutgv    = gv_dup_inc(cx->blk_sub.dfoutgv, param);
10991                 ncx->blk_sub.hasargs    = cx->blk_sub.hasargs;
10992                 ncx->blk_sub.retop      = cx->blk_sub.retop;
10993                 break;
10994             case CXt_BLOCK:
10995             case CXt_NULL:
10996                 break;
10997             }
10998         }
10999         --ix;
11000     }
11001     return ncxs;
11002 }
11003
11004 /* duplicate a stack info structure */
11005
11006 PERL_SI *
11007 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
11008 {
11009     PERL_SI *nsi;
11010
11011     if (!si)
11012         return (PERL_SI*)NULL;
11013
11014     /* look for it in the table first */
11015     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
11016     if (nsi)
11017         return nsi;
11018
11019     /* create anew and remember what it is */
11020     Newz(56, nsi, 1, PERL_SI);
11021     ptr_table_store(PL_ptr_table, si, nsi);
11022
11023     nsi->si_stack       = av_dup_inc(si->si_stack, param);
11024     nsi->si_cxix        = si->si_cxix;
11025     nsi->si_cxmax       = si->si_cxmax;
11026     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
11027     nsi->si_type        = si->si_type;
11028     nsi->si_prev        = si_dup(si->si_prev, param);
11029     nsi->si_next        = si_dup(si->si_next, param);
11030     nsi->si_markoff     = si->si_markoff;
11031
11032     return nsi;
11033 }
11034
11035 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
11036 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
11037 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
11038 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
11039 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
11040 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
11041 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
11042 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
11043 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
11044 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
11045 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
11046 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
11047 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11048 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11049
11050 /* XXXXX todo */
11051 #define pv_dup_inc(p)   SAVEPV(p)
11052 #define pv_dup(p)       SAVEPV(p)
11053 #define svp_dup_inc(p,pp)       any_dup(p,pp)
11054
11055 /* map any object to the new equivent - either something in the
11056  * ptr table, or something in the interpreter structure
11057  */
11058
11059 void *
11060 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
11061 {
11062     void *ret;
11063
11064     if (!v)
11065         return (void*)NULL;
11066
11067     /* look for it in the table first */
11068     ret = ptr_table_fetch(PL_ptr_table, v);
11069     if (ret)
11070         return ret;
11071
11072     /* see if it is part of the interpreter structure */
11073     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
11074         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
11075     else {
11076         ret = v;
11077     }
11078
11079     return ret;
11080 }
11081
11082 /* duplicate the save stack */
11083
11084 ANY *
11085 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
11086 {
11087     ANY *ss     = proto_perl->Tsavestack;
11088     I32 ix      = proto_perl->Tsavestack_ix;
11089     I32 max     = proto_perl->Tsavestack_max;
11090     ANY *nss;
11091     SV *sv;
11092     GV *gv;
11093     AV *av;
11094     HV *hv;
11095     void* ptr;
11096     int intval;
11097     long longval;
11098     GP *gp;
11099     IV iv;
11100     char *c = NULL;
11101     void (*dptr) (void*);
11102     void (*dxptr) (pTHX_ void*);
11103     OP *o;
11104
11105     Newz(54, nss, max, ANY);
11106
11107     while (ix > 0) {
11108         I32 i = POPINT(ss,ix);
11109         TOPINT(nss,ix) = i;
11110         switch (i) {
11111         case SAVEt_ITEM:                        /* normal string */
11112             sv = (SV*)POPPTR(ss,ix);
11113             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11114             sv = (SV*)POPPTR(ss,ix);
11115             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11116             break;
11117         case SAVEt_SV:                          /* scalar reference */
11118             sv = (SV*)POPPTR(ss,ix);
11119             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11120             gv = (GV*)POPPTR(ss,ix);
11121             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11122             break;
11123         case SAVEt_GENERIC_PVREF:               /* generic char* */
11124             c = (char*)POPPTR(ss,ix);
11125             TOPPTR(nss,ix) = pv_dup(c);
11126             ptr = POPPTR(ss,ix);
11127             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11128             break;
11129         case SAVEt_SHARED_PVREF:                /* char* in shared space */
11130             c = (char*)POPPTR(ss,ix);
11131             TOPPTR(nss,ix) = savesharedpv(c);
11132             ptr = POPPTR(ss,ix);
11133             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11134             break;
11135         case SAVEt_GENERIC_SVREF:               /* generic sv */
11136         case SAVEt_SVREF:                       /* scalar reference */
11137             sv = (SV*)POPPTR(ss,ix);
11138             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11139             ptr = POPPTR(ss,ix);
11140             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11141             break;
11142         case SAVEt_AV:                          /* array reference */
11143             av = (AV*)POPPTR(ss,ix);
11144             TOPPTR(nss,ix) = av_dup_inc(av, param);
11145             gv = (GV*)POPPTR(ss,ix);
11146             TOPPTR(nss,ix) = gv_dup(gv, param);
11147             break;
11148         case SAVEt_HV:                          /* hash reference */
11149             hv = (HV*)POPPTR(ss,ix);
11150             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11151             gv = (GV*)POPPTR(ss,ix);
11152             TOPPTR(nss,ix) = gv_dup(gv, param);
11153             break;
11154         case SAVEt_INT:                         /* int reference */
11155             ptr = POPPTR(ss,ix);
11156             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11157             intval = (int)POPINT(ss,ix);
11158             TOPINT(nss,ix) = intval;
11159             break;
11160         case SAVEt_LONG:                        /* long reference */
11161             ptr = POPPTR(ss,ix);
11162             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11163             longval = (long)POPLONG(ss,ix);
11164             TOPLONG(nss,ix) = longval;
11165             break;
11166         case SAVEt_I32:                         /* I32 reference */
11167         case SAVEt_I16:                         /* I16 reference */
11168         case SAVEt_I8:                          /* I8 reference */
11169             ptr = POPPTR(ss,ix);
11170             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11171             i = POPINT(ss,ix);
11172             TOPINT(nss,ix) = i;
11173             break;
11174         case SAVEt_IV:                          /* IV reference */
11175             ptr = POPPTR(ss,ix);
11176             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11177             iv = POPIV(ss,ix);
11178             TOPIV(nss,ix) = iv;
11179             break;
11180         case SAVEt_SPTR:                        /* SV* reference */
11181             ptr = POPPTR(ss,ix);
11182             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11183             sv = (SV*)POPPTR(ss,ix);
11184             TOPPTR(nss,ix) = sv_dup(sv, param);
11185             break;
11186         case SAVEt_VPTR:                        /* random* reference */
11187             ptr = POPPTR(ss,ix);
11188             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11189             ptr = POPPTR(ss,ix);
11190             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11191             break;
11192         case SAVEt_PPTR:                        /* char* reference */
11193             ptr = POPPTR(ss,ix);
11194             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11195             c = (char*)POPPTR(ss,ix);
11196             TOPPTR(nss,ix) = pv_dup(c);
11197             break;
11198         case SAVEt_HPTR:                        /* HV* reference */
11199             ptr = POPPTR(ss,ix);
11200             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11201             hv = (HV*)POPPTR(ss,ix);
11202             TOPPTR(nss,ix) = hv_dup(hv, param);
11203             break;
11204         case SAVEt_APTR:                        /* AV* reference */
11205             ptr = POPPTR(ss,ix);
11206             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11207             av = (AV*)POPPTR(ss,ix);
11208             TOPPTR(nss,ix) = av_dup(av, param);
11209             break;
11210         case SAVEt_NSTAB:
11211             gv = (GV*)POPPTR(ss,ix);
11212             TOPPTR(nss,ix) = gv_dup(gv, param);
11213             break;
11214         case SAVEt_GP:                          /* scalar reference */
11215             gp = (GP*)POPPTR(ss,ix);
11216             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
11217             (void)GpREFCNT_inc(gp);
11218             gv = (GV*)POPPTR(ss,ix);
11219             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11220             c = (char*)POPPTR(ss,ix);
11221             TOPPTR(nss,ix) = pv_dup(c);
11222             iv = POPIV(ss,ix);
11223             TOPIV(nss,ix) = iv;
11224             iv = POPIV(ss,ix);
11225             TOPIV(nss,ix) = iv;
11226             break;
11227         case SAVEt_FREESV:
11228         case SAVEt_MORTALIZESV:
11229             sv = (SV*)POPPTR(ss,ix);
11230             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11231             break;
11232         case SAVEt_FREEOP:
11233             ptr = POPPTR(ss,ix);
11234             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11235                 /* these are assumed to be refcounted properly */
11236                 switch (((OP*)ptr)->op_type) {
11237                 case OP_LEAVESUB:
11238                 case OP_LEAVESUBLV:
11239                 case OP_LEAVEEVAL:
11240                 case OP_LEAVE:
11241                 case OP_SCOPE:
11242                 case OP_LEAVEWRITE:
11243                     TOPPTR(nss,ix) = ptr;
11244                     o = (OP*)ptr;
11245                     OpREFCNT_inc(o);
11246                     break;
11247                 default:
11248                     TOPPTR(nss,ix) = Nullop;
11249                     break;
11250                 }
11251             }
11252             else
11253                 TOPPTR(nss,ix) = Nullop;
11254             break;
11255         case SAVEt_FREEPV:
11256             c = (char*)POPPTR(ss,ix);
11257             TOPPTR(nss,ix) = pv_dup_inc(c);
11258             break;
11259         case SAVEt_CLEARSV:
11260             longval = POPLONG(ss,ix);
11261             TOPLONG(nss,ix) = longval;
11262             break;
11263         case SAVEt_DELETE:
11264             hv = (HV*)POPPTR(ss,ix);
11265             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11266             c = (char*)POPPTR(ss,ix);
11267             TOPPTR(nss,ix) = pv_dup_inc(c);
11268             i = POPINT(ss,ix);
11269             TOPINT(nss,ix) = i;
11270             break;
11271         case SAVEt_DESTRUCTOR:
11272             ptr = POPPTR(ss,ix);
11273             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
11274             dptr = POPDPTR(ss,ix);
11275             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11276                                         any_dup(FPTR2DPTR(void *, dptr),
11277                                                 proto_perl));
11278             break;
11279         case SAVEt_DESTRUCTOR_X:
11280             ptr = POPPTR(ss,ix);
11281             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
11282             dxptr = POPDXPTR(ss,ix);
11283             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11284                                          any_dup(FPTR2DPTR(void *, dxptr),
11285                                                  proto_perl));
11286             break;
11287         case SAVEt_REGCONTEXT:
11288         case SAVEt_ALLOC:
11289             i = POPINT(ss,ix);
11290             TOPINT(nss,ix) = i;
11291             ix -= i;
11292             break;
11293         case SAVEt_STACK_POS:           /* Position on Perl stack */
11294             i = POPINT(ss,ix);
11295             TOPINT(nss,ix) = i;
11296             break;
11297         case SAVEt_AELEM:               /* array element */
11298             sv = (SV*)POPPTR(ss,ix);
11299             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11300             i = POPINT(ss,ix);
11301             TOPINT(nss,ix) = i;
11302             av = (AV*)POPPTR(ss,ix);
11303             TOPPTR(nss,ix) = av_dup_inc(av, param);
11304             break;
11305         case SAVEt_HELEM:               /* hash element */
11306             sv = (SV*)POPPTR(ss,ix);
11307             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11308             sv = (SV*)POPPTR(ss,ix);
11309             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11310             hv = (HV*)POPPTR(ss,ix);
11311             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11312             break;
11313         case SAVEt_OP:
11314             ptr = POPPTR(ss,ix);
11315             TOPPTR(nss,ix) = ptr;
11316             break;
11317         case SAVEt_HINTS:
11318             i = POPINT(ss,ix);
11319             TOPINT(nss,ix) = i;
11320             break;
11321         case SAVEt_COMPPAD:
11322             av = (AV*)POPPTR(ss,ix);
11323             TOPPTR(nss,ix) = av_dup(av, param);
11324             break;
11325         case SAVEt_PADSV:
11326             longval = (long)POPLONG(ss,ix);
11327             TOPLONG(nss,ix) = longval;
11328             ptr = POPPTR(ss,ix);
11329             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11330             sv = (SV*)POPPTR(ss,ix);
11331             TOPPTR(nss,ix) = sv_dup(sv, param);
11332             break;
11333         case SAVEt_BOOL:
11334             ptr = POPPTR(ss,ix);
11335             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11336             longval = (long)POPBOOL(ss,ix);
11337             TOPBOOL(nss,ix) = (bool)longval;
11338             break;
11339         case SAVEt_SET_SVFLAGS:
11340             i = POPINT(ss,ix);
11341             TOPINT(nss,ix) = i;
11342             i = POPINT(ss,ix);
11343             TOPINT(nss,ix) = i;
11344             sv = (SV*)POPPTR(ss,ix);
11345             TOPPTR(nss,ix) = sv_dup(sv, param);
11346             break;
11347         default:
11348             Perl_croak(aTHX_ "panic: ss_dup inconsistency");
11349         }
11350     }
11351
11352     return nss;
11353 }
11354
11355
11356 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11357  * flag to the result. This is done for each stash before cloning starts,
11358  * so we know which stashes want their objects cloned */
11359
11360 static void
11361 do_mark_cloneable_stash(pTHX_ SV *sv)
11362 {
11363     const HEK *hvname = HvNAME_HEK((HV*)sv);
11364     if (hvname) {
11365         GV* cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
11366         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11367         if (cloner && GvCV(cloner)) {
11368             dSP;
11369             UV status;
11370
11371             ENTER;
11372             SAVETMPS;
11373             PUSHMARK(SP);
11374             XPUSHs(sv_2mortal(newSVhek(hvname)));
11375             PUTBACK;
11376             call_sv((SV*)GvCV(cloner), G_SCALAR);
11377             SPAGAIN;
11378             status = POPu;
11379             PUTBACK;
11380             FREETMPS;
11381             LEAVE;
11382             if (status)
11383                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11384         }
11385     }
11386 }
11387
11388
11389
11390 /*
11391 =for apidoc perl_clone
11392
11393 Create and return a new interpreter by cloning the current one.
11394
11395 perl_clone takes these flags as parameters:
11396
11397 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11398 without it we only clone the data and zero the stacks,
11399 with it we copy the stacks and the new perl interpreter is
11400 ready to run at the exact same point as the previous one.
11401 The pseudo-fork code uses COPY_STACKS while the
11402 threads->new doesn't.
11403
11404 CLONEf_KEEP_PTR_TABLE
11405 perl_clone keeps a ptr_table with the pointer of the old
11406 variable as a key and the new variable as a value,
11407 this allows it to check if something has been cloned and not
11408 clone it again but rather just use the value and increase the
11409 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11410 the ptr_table using the function
11411 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11412 reason to keep it around is if you want to dup some of your own
11413 variable who are outside the graph perl scans, example of this
11414 code is in threads.xs create
11415
11416 CLONEf_CLONE_HOST
11417 This is a win32 thing, it is ignored on unix, it tells perls
11418 win32host code (which is c++) to clone itself, this is needed on
11419 win32 if you want to run two threads at the same time,
11420 if you just want to do some stuff in a separate perl interpreter
11421 and then throw it away and return to the original one,
11422 you don't need to do anything.
11423
11424 =cut
11425 */
11426
11427 /* XXX the above needs expanding by someone who actually understands it ! */
11428 EXTERN_C PerlInterpreter *
11429 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11430
11431 PerlInterpreter *
11432 perl_clone(PerlInterpreter *proto_perl, UV flags)
11433 {
11434    dVAR;
11435 #ifdef PERL_IMPLICIT_SYS
11436
11437    /* perlhost.h so we need to call into it
11438    to clone the host, CPerlHost should have a c interface, sky */
11439
11440    if (flags & CLONEf_CLONE_HOST) {
11441        return perl_clone_host(proto_perl,flags);
11442    }
11443    return perl_clone_using(proto_perl, flags,
11444                             proto_perl->IMem,
11445                             proto_perl->IMemShared,
11446                             proto_perl->IMemParse,
11447                             proto_perl->IEnv,
11448                             proto_perl->IStdIO,
11449                             proto_perl->ILIO,
11450                             proto_perl->IDir,
11451                             proto_perl->ISock,
11452                             proto_perl->IProc);
11453 }
11454
11455 PerlInterpreter *
11456 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11457                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
11458                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11459                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11460                  struct IPerlDir* ipD, struct IPerlSock* ipS,
11461                  struct IPerlProc* ipP)
11462 {
11463     /* XXX many of the string copies here can be optimized if they're
11464      * constants; they need to be allocated as common memory and just
11465      * their pointers copied. */
11466
11467     IV i;
11468     CLONE_PARAMS clone_params;
11469     CLONE_PARAMS* param = &clone_params;
11470
11471     PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
11472     /* for each stash, determine whether its objects should be cloned */
11473     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11474     PERL_SET_THX(my_perl);
11475
11476 #  ifdef DEBUGGING
11477     Poison(my_perl, 1, PerlInterpreter);
11478     PL_op = Nullop;
11479     PL_curcop = (COP *)Nullop;
11480     PL_markstack = 0;
11481     PL_scopestack = 0;
11482     PL_savestack = 0;
11483     PL_savestack_ix = 0;
11484     PL_savestack_max = -1;
11485     PL_sig_pending = 0;
11486     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11487 #  else /* !DEBUGGING */
11488     Zero(my_perl, 1, PerlInterpreter);
11489 #  endif        /* DEBUGGING */
11490
11491     /* host pointers */
11492     PL_Mem              = ipM;
11493     PL_MemShared        = ipMS;
11494     PL_MemParse         = ipMP;
11495     PL_Env              = ipE;
11496     PL_StdIO            = ipStd;
11497     PL_LIO              = ipLIO;
11498     PL_Dir              = ipD;
11499     PL_Sock             = ipS;
11500     PL_Proc             = ipP;
11501 #else           /* !PERL_IMPLICIT_SYS */
11502     IV i;
11503     CLONE_PARAMS clone_params;
11504     CLONE_PARAMS* param = &clone_params;
11505     PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
11506     /* for each stash, determine whether its objects should be cloned */
11507     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11508     PERL_SET_THX(my_perl);
11509
11510 #    ifdef DEBUGGING
11511     Poison(my_perl, 1, PerlInterpreter);
11512     PL_op = Nullop;
11513     PL_curcop = (COP *)Nullop;
11514     PL_markstack = 0;
11515     PL_scopestack = 0;
11516     PL_savestack = 0;
11517     PL_savestack_ix = 0;
11518     PL_savestack_max = -1;
11519     PL_sig_pending = 0;
11520     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11521 #    else       /* !DEBUGGING */
11522     Zero(my_perl, 1, PerlInterpreter);
11523 #    endif      /* DEBUGGING */
11524 #endif          /* PERL_IMPLICIT_SYS */
11525     param->flags = flags;
11526     param->proto_perl = proto_perl;
11527
11528     /* arena roots */
11529     PL_xnv_arenaroot    = NULL;
11530     PL_xnv_root         = NULL;
11531     PL_xpv_arenaroot    = NULL;
11532     PL_xpv_root         = NULL;
11533     PL_xpviv_arenaroot  = NULL;
11534     PL_xpviv_root       = NULL;
11535     PL_xpvnv_arenaroot  = NULL;
11536     PL_xpvnv_root       = NULL;
11537     PL_xpvcv_arenaroot  = NULL;
11538     PL_xpvcv_root       = NULL;
11539     PL_xpvav_arenaroot  = NULL;
11540     PL_xpvav_root       = NULL;
11541     PL_xpvhv_arenaroot  = NULL;
11542     PL_xpvhv_root       = NULL;
11543     PL_xpvmg_arenaroot  = NULL;
11544     PL_xpvmg_root       = NULL;
11545     PL_xpvgv_arenaroot  = NULL;
11546     PL_xpvgv_root       = NULL;
11547     PL_xpvlv_arenaroot  = NULL;
11548     PL_xpvlv_root       = NULL;
11549     PL_xpvbm_arenaroot  = NULL;
11550     PL_xpvbm_root       = NULL;
11551     PL_he_arenaroot     = NULL;
11552     PL_he_root          = NULL;
11553 #if defined(USE_ITHREADS)
11554     PL_pte_arenaroot    = NULL;
11555     PL_pte_root         = NULL;
11556 #endif
11557     PL_nice_chunk       = NULL;
11558     PL_nice_chunk_size  = 0;
11559     PL_sv_count         = 0;
11560     PL_sv_objcount      = 0;
11561     PL_sv_root          = Nullsv;
11562     PL_sv_arenaroot     = Nullsv;
11563
11564     PL_debug            = proto_perl->Idebug;
11565
11566     PL_hash_seed        = proto_perl->Ihash_seed;
11567     PL_rehash_seed      = proto_perl->Irehash_seed;
11568
11569 #ifdef USE_REENTRANT_API
11570     /* XXX: things like -Dm will segfault here in perlio, but doing
11571      *  PERL_SET_CONTEXT(proto_perl);
11572      * breaks too many other things
11573      */
11574     Perl_reentrant_init(aTHX);
11575 #endif
11576
11577     /* create SV map for pointer relocation */
11578     PL_ptr_table = ptr_table_new();
11579
11580     /* initialize these special pointers as early as possible */
11581     SvANY(&PL_sv_undef)         = NULL;
11582     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
11583     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
11584     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11585
11586     SvANY(&PL_sv_no)            = new_XPVNV();
11587     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
11588     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11589                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11590     SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
11591     SvCUR_set(&PL_sv_no, 0);
11592     SvLEN_set(&PL_sv_no, 1);
11593     SvIV_set(&PL_sv_no, 0);
11594     SvNV_set(&PL_sv_no, 0);
11595     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
11596
11597     SvANY(&PL_sv_yes)           = new_XPVNV();
11598     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
11599     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11600                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11601     SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
11602     SvCUR_set(&PL_sv_yes, 1);
11603     SvLEN_set(&PL_sv_yes, 2);
11604     SvIV_set(&PL_sv_yes, 1);
11605     SvNV_set(&PL_sv_yes, 1);
11606     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11607
11608     /* create (a non-shared!) shared string table */
11609     PL_strtab           = newHV();
11610     HvSHAREKEYS_off(PL_strtab);
11611     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11612     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11613
11614     PL_compiling = proto_perl->Icompiling;
11615
11616     /* These two PVs will be free'd special way so must set them same way op.c does */
11617     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11618     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11619
11620     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
11621     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11622
11623     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11624     if (!specialWARN(PL_compiling.cop_warnings))
11625         PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
11626     if (!specialCopIO(PL_compiling.cop_io))
11627         PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
11628     PL_curcop           = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
11629
11630     /* pseudo environmental stuff */
11631     PL_origargc         = proto_perl->Iorigargc;
11632     PL_origargv         = proto_perl->Iorigargv;
11633
11634     param->stashes      = newAV();  /* Setup array of objects to call clone on */
11635
11636 #ifdef PERLIO_LAYERS
11637     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11638     PerlIO_clone(aTHX_ proto_perl, param);
11639 #endif
11640
11641     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
11642     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
11643     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
11644     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
11645     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
11646     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
11647
11648     /* switches */
11649     PL_minus_c          = proto_perl->Iminus_c;
11650     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
11651     PL_localpatches     = proto_perl->Ilocalpatches;
11652     PL_splitstr         = proto_perl->Isplitstr;
11653     PL_preprocess       = proto_perl->Ipreprocess;
11654     PL_minus_n          = proto_perl->Iminus_n;
11655     PL_minus_p          = proto_perl->Iminus_p;
11656     PL_minus_l          = proto_perl->Iminus_l;
11657     PL_minus_a          = proto_perl->Iminus_a;
11658     PL_minus_F          = proto_perl->Iminus_F;
11659     PL_doswitches       = proto_perl->Idoswitches;
11660     PL_dowarn           = proto_perl->Idowarn;
11661     PL_doextract        = proto_perl->Idoextract;
11662     PL_sawampersand     = proto_perl->Isawampersand;
11663     PL_unsafe           = proto_perl->Iunsafe;
11664     PL_inplace          = SAVEPV(proto_perl->Iinplace);
11665     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
11666     PL_perldb           = proto_perl->Iperldb;
11667     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11668     PL_exit_flags       = proto_perl->Iexit_flags;
11669
11670     /* magical thingies */
11671     /* XXX time(&PL_basetime) when asked for? */
11672     PL_basetime         = proto_perl->Ibasetime;
11673     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
11674
11675     PL_maxsysfd         = proto_perl->Imaxsysfd;
11676     PL_multiline        = proto_perl->Imultiline;
11677     PL_statusvalue      = proto_perl->Istatusvalue;
11678 #ifdef VMS
11679     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
11680 #endif
11681     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
11682
11683     sv_setpvn(PERL_DEBUG_PAD(0), "", 0);        /* For regex debugging. */
11684     sv_setpvn(PERL_DEBUG_PAD(1), "", 0);        /* ext/re needs these */
11685     sv_setpvn(PERL_DEBUG_PAD(2), "", 0);        /* even without DEBUGGING. */
11686
11687     /* Clone the regex array */
11688     PL_regex_padav = newAV();
11689     {
11690         const I32 len = av_len((AV*)proto_perl->Iregex_padav);
11691         SV** regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
11692         IV i;
11693         av_push(PL_regex_padav,
11694                 sv_dup_inc(regexen[0],param));
11695         for(i = 1; i <= len; i++) {
11696             if(SvREPADTMP(regexen[i])) {
11697               av_push(PL_regex_padav, sv_dup_inc(regexen[i], param));
11698             } else {
11699                 av_push(PL_regex_padav,
11700                     SvREFCNT_inc(
11701                         newSViv(PTR2IV(re_dup(INT2PTR(REGEXP *,
11702                              SvIVX(regexen[i])), param)))
11703                        ));
11704             }
11705         }
11706     }
11707     PL_regex_pad = AvARRAY(PL_regex_padav);
11708
11709     /* shortcuts to various I/O objects */
11710     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
11711     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
11712     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
11713     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
11714     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
11715     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
11716
11717     /* shortcuts to regexp stuff */
11718     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
11719
11720     /* shortcuts to misc objects */
11721     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
11722
11723     /* shortcuts to debugging objects */
11724     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
11725     PL_DBline           = gv_dup(proto_perl->IDBline, param);
11726     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
11727     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
11728     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
11729     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
11730     PL_DBassertion      = sv_dup(proto_perl->IDBassertion, param);
11731     PL_lineary          = av_dup(proto_perl->Ilineary, param);
11732     PL_dbargs           = av_dup(proto_perl->Idbargs, param);
11733
11734     /* symbol tables */
11735     PL_defstash         = hv_dup_inc(proto_perl->Tdefstash, param);
11736     PL_curstash         = hv_dup(proto_perl->Tcurstash, param);
11737     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
11738     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
11739     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
11740
11741     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
11742     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
11743     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
11744     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
11745     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
11746     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
11747
11748     PL_sub_generation   = proto_perl->Isub_generation;
11749
11750     /* funky return mechanisms */
11751     PL_forkprocess      = proto_perl->Iforkprocess;
11752
11753     /* subprocess state */
11754     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
11755
11756     /* internal state */
11757     PL_tainting         = proto_perl->Itainting;
11758     PL_taint_warn       = proto_perl->Itaint_warn;
11759     PL_maxo             = proto_perl->Imaxo;
11760     if (proto_perl->Iop_mask)
11761         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11762     else
11763         PL_op_mask      = Nullch;
11764     /* PL_asserting        = proto_perl->Iasserting; */
11765
11766     /* current interpreter roots */
11767     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
11768     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
11769     PL_main_start       = proto_perl->Imain_start;
11770     PL_eval_root        = proto_perl->Ieval_root;
11771     PL_eval_start       = proto_perl->Ieval_start;
11772
11773     /* runtime control stuff */
11774     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11775     PL_copline          = proto_perl->Icopline;
11776
11777     PL_filemode         = proto_perl->Ifilemode;
11778     PL_lastfd           = proto_perl->Ilastfd;
11779     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
11780     PL_Argv             = NULL;
11781     PL_Cmd              = Nullch;
11782     PL_gensym           = proto_perl->Igensym;
11783     PL_preambled        = proto_perl->Ipreambled;
11784     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
11785     PL_laststatval      = proto_perl->Ilaststatval;
11786     PL_laststype        = proto_perl->Ilaststype;
11787     PL_mess_sv          = Nullsv;
11788
11789     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
11790     PL_ofmt             = SAVEPV(proto_perl->Iofmt);
11791
11792     /* interpreter atexit processing */
11793     PL_exitlistlen      = proto_perl->Iexitlistlen;
11794     if (PL_exitlistlen) {
11795         New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11796         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11797     }
11798     else
11799         PL_exitlist     = (PerlExitListEntry*)NULL;
11800     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
11801     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
11802     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11803
11804     PL_profiledata      = NULL;
11805     PL_rsfp             = fp_dup(proto_perl->Irsfp, '<', param);
11806     /* PL_rsfp_filters entries have fake IoDIRP() */
11807     PL_rsfp_filters     = av_dup_inc(proto_perl->Irsfp_filters, param);
11808
11809     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
11810
11811     PAD_CLONE_VARS(proto_perl, param);
11812
11813 #ifdef HAVE_INTERP_INTERN
11814     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11815 #endif
11816
11817     /* more statics moved here */
11818     PL_generation       = proto_perl->Igeneration;
11819     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
11820
11821     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
11822     PL_in_clean_all     = proto_perl->Iin_clean_all;
11823
11824     PL_uid              = proto_perl->Iuid;
11825     PL_euid             = proto_perl->Ieuid;
11826     PL_gid              = proto_perl->Igid;
11827     PL_egid             = proto_perl->Iegid;
11828     PL_nomemok          = proto_perl->Inomemok;
11829     PL_an               = proto_perl->Ian;
11830     PL_evalseq          = proto_perl->Ievalseq;
11831     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
11832     PL_origalen         = proto_perl->Iorigalen;
11833     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
11834     PL_osname           = SAVEPV(proto_perl->Iosname);
11835     PL_sh_path_compat   = proto_perl->Ish_path_compat; /* XXX never deallocated */
11836     PL_sighandlerp      = proto_perl->Isighandlerp;
11837
11838
11839     PL_runops           = proto_perl->Irunops;
11840
11841     Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
11842
11843 #ifdef CSH
11844     PL_cshlen           = proto_perl->Icshlen;
11845     PL_cshname          = proto_perl->Icshname; /* XXX never deallocated */
11846 #endif
11847
11848     PL_lex_state        = proto_perl->Ilex_state;
11849     PL_lex_defer        = proto_perl->Ilex_defer;
11850     PL_lex_expect       = proto_perl->Ilex_expect;
11851     PL_lex_formbrack    = proto_perl->Ilex_formbrack;
11852     PL_lex_dojoin       = proto_perl->Ilex_dojoin;
11853     PL_lex_starts       = proto_perl->Ilex_starts;
11854     PL_lex_stuff        = sv_dup_inc(proto_perl->Ilex_stuff, param);
11855     PL_lex_repl         = sv_dup_inc(proto_perl->Ilex_repl, param);
11856     PL_lex_op           = proto_perl->Ilex_op;
11857     PL_lex_inpat        = proto_perl->Ilex_inpat;
11858     PL_lex_inwhat       = proto_perl->Ilex_inwhat;
11859     PL_lex_brackets     = proto_perl->Ilex_brackets;
11860     i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
11861     PL_lex_brackstack   = SAVEPVN(proto_perl->Ilex_brackstack,i);
11862     PL_lex_casemods     = proto_perl->Ilex_casemods;
11863     i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
11864     PL_lex_casestack    = SAVEPVN(proto_perl->Ilex_casestack,i);
11865
11866     Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
11867     Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
11868     PL_nexttoke         = proto_perl->Inexttoke;
11869
11870     /* XXX This is probably masking the deeper issue of why
11871      * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
11872      * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
11873      * (A little debugging with a watchpoint on it may help.)
11874      */
11875     if (SvANY(proto_perl->Ilinestr)) {
11876         PL_linestr              = sv_dup_inc(proto_perl->Ilinestr, param);
11877         i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr);
11878         PL_bufptr               = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11879         i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr);
11880         PL_oldbufptr    = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11881         i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr);
11882         PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11883         i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr);
11884         PL_linestart    = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11885     }
11886     else {
11887         PL_linestr = NEWSV(65,79);
11888         sv_upgrade(PL_linestr,SVt_PVIV);
11889         sv_setpvn(PL_linestr,"",0);
11890         PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
11891     }
11892     PL_bufend           = SvPVX(PL_linestr) + SvCUR(PL_linestr);
11893     PL_pending_ident    = proto_perl->Ipending_ident;
11894     PL_sublex_info      = proto_perl->Isublex_info;     /* XXX not quite right */
11895
11896     PL_expect           = proto_perl->Iexpect;
11897
11898     PL_multi_start      = proto_perl->Imulti_start;
11899     PL_multi_end        = proto_perl->Imulti_end;
11900     PL_multi_open       = proto_perl->Imulti_open;
11901     PL_multi_close      = proto_perl->Imulti_close;
11902
11903     PL_error_count      = proto_perl->Ierror_count;
11904     PL_subline          = proto_perl->Isubline;
11905     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
11906
11907     /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
11908     if (SvANY(proto_perl->Ilinestr)) {
11909         i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr);
11910         PL_last_uni             = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11911         i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr);
11912         PL_last_lop             = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
11913         PL_last_lop_op  = proto_perl->Ilast_lop_op;
11914     }
11915     else {
11916         PL_last_uni     = SvPVX(PL_linestr);
11917         PL_last_lop     = SvPVX(PL_linestr);
11918         PL_last_lop_op  = 0;
11919     }
11920     PL_in_my            = proto_perl->Iin_my;
11921     PL_in_my_stash      = hv_dup(proto_perl->Iin_my_stash, param);
11922 #ifdef FCRYPT
11923     PL_cryptseen        = proto_perl->Icryptseen;
11924 #endif
11925
11926     PL_hints            = proto_perl->Ihints;
11927
11928     PL_amagic_generation        = proto_perl->Iamagic_generation;
11929
11930 #ifdef USE_LOCALE_COLLATE
11931     PL_collation_ix     = proto_perl->Icollation_ix;
11932     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
11933     PL_collation_standard       = proto_perl->Icollation_standard;
11934     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
11935     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
11936 #endif /* USE_LOCALE_COLLATE */
11937
11938 #ifdef USE_LOCALE_NUMERIC
11939     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
11940     PL_numeric_standard = proto_perl->Inumeric_standard;
11941     PL_numeric_local    = proto_perl->Inumeric_local;
11942     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11943 #endif /* !USE_LOCALE_NUMERIC */
11944
11945     /* utf8 character classes */
11946     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11947     PL_utf8_alnumc      = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11948     PL_utf8_ascii       = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11949     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11950     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
11951     PL_utf8_cntrl       = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11952     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
11953     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
11954     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
11955     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
11956     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
11957     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
11958     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11959     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
11960     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11961     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11962     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11963     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11964     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11965     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11966
11967     /* Did the locale setup indicate UTF-8? */
11968     PL_utf8locale       = proto_perl->Iutf8locale;
11969     /* Unicode features (see perlrun/-C) */
11970     PL_unicode          = proto_perl->Iunicode;
11971
11972     /* Pre-5.8 signals control */
11973     PL_signals          = proto_perl->Isignals;
11974
11975     /* times() ticks per second */
11976     PL_clocktick        = proto_perl->Iclocktick;
11977
11978     /* Recursion stopper for PerlIO_find_layer */
11979     PL_in_load_module   = proto_perl->Iin_load_module;
11980
11981     /* sort() routine */
11982     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
11983
11984     /* Not really needed/useful since the reenrant_retint is "volatile",
11985      * but do it for consistency's sake. */
11986     PL_reentrant_retint = proto_perl->Ireentrant_retint;
11987
11988     /* Hooks to shared SVs and locks. */
11989     PL_sharehook        = proto_perl->Isharehook;
11990     PL_lockhook         = proto_perl->Ilockhook;
11991     PL_unlockhook       = proto_perl->Iunlockhook;
11992     PL_threadhook       = proto_perl->Ithreadhook;
11993
11994     PL_runops_std       = proto_perl->Irunops_std;
11995     PL_runops_dbg       = proto_perl->Irunops_dbg;
11996
11997 #ifdef THREADS_HAVE_PIDS
11998     PL_ppid             = proto_perl->Ippid;
11999 #endif
12000
12001     /* swatch cache */
12002     PL_last_swash_hv    = Nullhv;       /* reinits on demand */
12003     PL_last_swash_klen  = 0;
12004     PL_last_swash_key[0]= '\0';
12005     PL_last_swash_tmps  = (U8*)NULL;
12006     PL_last_swash_slen  = 0;
12007
12008     PL_glob_index       = proto_perl->Iglob_index;
12009     PL_srand_called     = proto_perl->Isrand_called;
12010     PL_uudmap['M']      = 0;            /* reinits on demand */
12011     PL_bitcount         = Nullch;       /* reinits on demand */
12012
12013     if (proto_perl->Ipsig_pend) {
12014         Newz(0, PL_psig_pend, SIG_SIZE, int);
12015     }
12016     else {
12017         PL_psig_pend    = (int*)NULL;
12018     }
12019
12020     if (proto_perl->Ipsig_ptr) {
12021         Newz(0, PL_psig_ptr,  SIG_SIZE, SV*);
12022         Newz(0, PL_psig_name, SIG_SIZE, SV*);
12023         for (i = 1; i < SIG_SIZE; i++) {
12024             PL_psig_ptr[i]  = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
12025             PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
12026         }
12027     }
12028     else {
12029         PL_psig_ptr     = (SV**)NULL;
12030         PL_psig_name    = (SV**)NULL;
12031     }
12032
12033     /* thrdvar.h stuff */
12034
12035     if (flags & CLONEf_COPY_STACKS) {
12036         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
12037         PL_tmps_ix              = proto_perl->Ttmps_ix;
12038         PL_tmps_max             = proto_perl->Ttmps_max;
12039         PL_tmps_floor           = proto_perl->Ttmps_floor;
12040         Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
12041         i = 0;
12042         while (i <= PL_tmps_ix) {
12043             PL_tmps_stack[i]    = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
12044             ++i;
12045         }
12046
12047         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
12048         i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
12049         Newz(54, PL_markstack, i, I32);
12050         PL_markstack_max        = PL_markstack + (proto_perl->Tmarkstack_max
12051                                                   - proto_perl->Tmarkstack);
12052         PL_markstack_ptr        = PL_markstack + (proto_perl->Tmarkstack_ptr
12053                                                   - proto_perl->Tmarkstack);
12054         Copy(proto_perl->Tmarkstack, PL_markstack,
12055              PL_markstack_ptr - PL_markstack + 1, I32);
12056
12057         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12058          * NOTE: unlike the others! */
12059         PL_scopestack_ix        = proto_perl->Tscopestack_ix;
12060         PL_scopestack_max       = proto_perl->Tscopestack_max;
12061         Newz(54, PL_scopestack, PL_scopestack_max, I32);
12062         Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
12063
12064         /* NOTE: si_dup() looks at PL_markstack */
12065         PL_curstackinfo         = si_dup(proto_perl->Tcurstackinfo, param);
12066
12067         /* PL_curstack          = PL_curstackinfo->si_stack; */
12068         PL_curstack             = av_dup(proto_perl->Tcurstack, param);
12069         PL_mainstack            = av_dup(proto_perl->Tmainstack, param);
12070
12071         /* next PUSHs() etc. set *(PL_stack_sp+1) */
12072         PL_stack_base           = AvARRAY(PL_curstack);
12073         PL_stack_sp             = PL_stack_base + (proto_perl->Tstack_sp
12074                                                    - proto_perl->Tstack_base);
12075         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
12076
12077         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
12078          * NOTE: unlike the others! */
12079         PL_savestack_ix         = proto_perl->Tsavestack_ix;
12080         PL_savestack_max        = proto_perl->Tsavestack_max;
12081         /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
12082         PL_savestack            = ss_dup(proto_perl, param);
12083     }
12084     else {
12085         init_stacks();
12086         ENTER;                  /* perl_destruct() wants to LEAVE; */
12087     }
12088
12089     PL_start_env        = proto_perl->Tstart_env;       /* XXXXXX */
12090     PL_top_env          = &PL_start_env;
12091
12092     PL_op               = proto_perl->Top;
12093
12094     PL_Sv               = Nullsv;
12095     PL_Xpv              = (XPV*)NULL;
12096     PL_na               = proto_perl->Tna;
12097
12098     PL_statbuf          = proto_perl->Tstatbuf;
12099     PL_statcache        = proto_perl->Tstatcache;
12100     PL_statgv           = gv_dup(proto_perl->Tstatgv, param);
12101     PL_statname         = sv_dup_inc(proto_perl->Tstatname, param);
12102 #ifdef HAS_TIMES
12103     PL_timesbuf         = proto_perl->Ttimesbuf;
12104 #endif
12105
12106     PL_tainted          = proto_perl->Ttainted;
12107     PL_curpm            = proto_perl->Tcurpm;   /* XXX No PMOP ref count */
12108     PL_rs               = sv_dup_inc(proto_perl->Trs, param);
12109     PL_last_in_gv       = gv_dup(proto_perl->Tlast_in_gv, param);
12110     PL_ofs_sv           = sv_dup_inc(proto_perl->Tofs_sv, param);
12111     PL_defoutgv         = gv_dup_inc(proto_perl->Tdefoutgv, param);
12112     PL_chopset          = proto_perl->Tchopset; /* XXX never deallocated */
12113     PL_toptarget        = sv_dup_inc(proto_perl->Ttoptarget, param);
12114     PL_bodytarget       = sv_dup_inc(proto_perl->Tbodytarget, param);
12115     PL_formtarget       = sv_dup(proto_perl->Tformtarget, param);
12116
12117     PL_restartop        = proto_perl->Trestartop;
12118     PL_in_eval          = proto_perl->Tin_eval;
12119     PL_delaymagic       = proto_perl->Tdelaymagic;
12120     PL_dirty            = proto_perl->Tdirty;
12121     PL_localizing       = proto_perl->Tlocalizing;
12122
12123     PL_errors           = sv_dup_inc(proto_perl->Terrors, param);
12124     PL_hv_fetch_ent_mh  = Nullhe;
12125     PL_modcount         = proto_perl->Tmodcount;
12126     PL_lastgotoprobe    = Nullop;
12127     PL_dumpindent       = proto_perl->Tdumpindent;
12128
12129     PL_sortcop          = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
12130     PL_sortstash        = hv_dup(proto_perl->Tsortstash, param);
12131     PL_firstgv          = gv_dup(proto_perl->Tfirstgv, param);
12132     PL_secondgv         = gv_dup(proto_perl->Tsecondgv, param);
12133     PL_sortcxix         = proto_perl->Tsortcxix;
12134     PL_efloatbuf        = Nullch;               /* reinits on demand */
12135     PL_efloatsize       = 0;                    /* reinits on demand */
12136
12137     /* regex stuff */
12138
12139     PL_screamfirst      = NULL;
12140     PL_screamnext       = NULL;
12141     PL_maxscream        = -1;                   /* reinits on demand */
12142     PL_lastscream       = Nullsv;
12143
12144     PL_watchaddr        = NULL;
12145     PL_watchok          = Nullch;
12146
12147     PL_regdummy         = proto_perl->Tregdummy;
12148     PL_regprecomp       = Nullch;
12149     PL_regnpar          = 0;
12150     PL_regsize          = 0;
12151     PL_colorset         = 0;            /* reinits PL_colors[] */
12152     /*PL_colors[6]      = {0,0,0,0,0,0};*/
12153     PL_reginput         = Nullch;
12154     PL_regbol           = Nullch;
12155     PL_regeol           = Nullch;
12156     PL_regstartp        = (I32*)NULL;
12157     PL_regendp          = (I32*)NULL;
12158     PL_reglastparen     = (U32*)NULL;
12159     PL_reglastcloseparen        = (U32*)NULL;
12160     PL_regtill          = Nullch;
12161     PL_reg_start_tmp    = (char**)NULL;
12162     PL_reg_start_tmpl   = 0;
12163     PL_regdata          = (struct reg_data*)NULL;
12164     PL_bostr            = Nullch;
12165     PL_reg_flags        = 0;
12166     PL_reg_eval_set     = 0;
12167     PL_regnarrate       = 0;
12168     PL_regprogram       = (regnode*)NULL;
12169     PL_regindent        = 0;
12170     PL_regcc            = (CURCUR*)NULL;
12171     PL_reg_call_cc      = (struct re_cc_state*)NULL;
12172     PL_reg_re           = (regexp*)NULL;
12173     PL_reg_ganch        = Nullch;
12174     PL_reg_sv           = Nullsv;
12175     PL_reg_match_utf8   = FALSE;
12176     PL_reg_magic        = (MAGIC*)NULL;
12177     PL_reg_oldpos       = 0;
12178     PL_reg_oldcurpm     = (PMOP*)NULL;
12179     PL_reg_curpm        = (PMOP*)NULL;
12180     PL_reg_oldsaved     = Nullch;
12181     PL_reg_oldsavedlen  = 0;
12182 #ifdef PERL_OLD_COPY_ON_WRITE
12183     PL_nrs              = Nullsv;
12184 #endif
12185     PL_reg_maxiter      = 0;
12186     PL_reg_leftiter     = 0;
12187     PL_reg_poscache     = Nullch;
12188     PL_reg_poscache_size= 0;
12189
12190     /* RE engine - function pointers */
12191     PL_regcompp         = proto_perl->Tregcompp;
12192     PL_regexecp         = proto_perl->Tregexecp;
12193     PL_regint_start     = proto_perl->Tregint_start;
12194     PL_regint_string    = proto_perl->Tregint_string;
12195     PL_regfree          = proto_perl->Tregfree;
12196
12197     PL_reginterp_cnt    = 0;
12198     PL_reg_starttry     = 0;
12199
12200     /* Pluggable optimizer */
12201     PL_peepp            = proto_perl->Tpeepp;
12202
12203     PL_stashcache       = newHV();
12204
12205     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12206         ptr_table_free(PL_ptr_table);
12207         PL_ptr_table = NULL;
12208     }
12209
12210     /* Call the ->CLONE method, if it exists, for each of the stashes
12211        identified by sv_dup() above.
12212     */
12213     while(av_len(param->stashes) != -1) {
12214         HV* stash = (HV*) av_shift(param->stashes);
12215         GV* cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12216         if (cloner && GvCV(cloner)) {
12217             dSP;
12218             ENTER;
12219             SAVETMPS;
12220             PUSHMARK(SP);
12221             XPUSHs(sv_2mortal(newSVhek(HvNAME_HEK(stash))));
12222             PUTBACK;
12223             call_sv((SV*)GvCV(cloner), G_DISCARD);
12224             FREETMPS;
12225             LEAVE;
12226         }
12227     }
12228
12229     SvREFCNT_dec(param->stashes);
12230
12231     /* orphaned? eg threads->new inside BEGIN or use */
12232     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
12233         (void)SvREFCNT_inc(PL_compcv);
12234         SAVEFREESV(PL_compcv);
12235     }
12236
12237     return my_perl;
12238 }
12239
12240 #endif /* USE_ITHREADS */
12241
12242 /*
12243 =head1 Unicode Support
12244
12245 =for apidoc sv_recode_to_utf8
12246
12247 The encoding is assumed to be an Encode object, on entry the PV
12248 of the sv is assumed to be octets in that encoding, and the sv
12249 will be converted into Unicode (and UTF-8).
12250
12251 If the sv already is UTF-8 (or if it is not POK), or if the encoding
12252 is not a reference, nothing is done to the sv.  If the encoding is not
12253 an C<Encode::XS> Encoding object, bad things will happen.
12254 (See F<lib/encoding.pm> and L<Encode>).
12255
12256 The PV of the sv is returned.
12257
12258 =cut */
12259
12260 char *
12261 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12262 {
12263     dVAR;
12264     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12265         SV *uni;
12266         STRLEN len;
12267         const char *s;
12268         dSP;
12269         ENTER;
12270         SAVETMPS;
12271         save_re_context();
12272         PUSHMARK(sp);
12273         EXTEND(SP, 3);
12274         XPUSHs(encoding);
12275         XPUSHs(sv);
12276 /*
12277   NI-S 2002/07/09
12278   Passing sv_yes is wrong - it needs to be or'ed set of constants
12279   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12280   remove converted chars from source.
12281
12282   Both will default the value - let them.
12283
12284         XPUSHs(&PL_sv_yes);
12285 */
12286         PUTBACK;
12287         call_method("decode", G_SCALAR);
12288         SPAGAIN;
12289         uni = POPs;
12290         PUTBACK;
12291         s = SvPV_const(uni, len);
12292         if (s != SvPVX_const(sv)) {
12293             SvGROW(sv, len + 1);
12294             Move(s, SvPVX(sv), len + 1, char);
12295             SvCUR_set(sv, len);
12296         }
12297         FREETMPS;
12298         LEAVE;
12299         SvUTF8_on(sv);
12300         return SvPVX(sv);
12301     }
12302     return SvPOKp(sv) ? SvPVX(sv) : NULL;
12303 }
12304
12305 /*
12306 =for apidoc sv_cat_decode
12307
12308 The encoding is assumed to be an Encode object, the PV of the ssv is
12309 assumed to be octets in that encoding and decoding the input starts
12310 from the position which (PV + *offset) pointed to.  The dsv will be
12311 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
12312 when the string tstr appears in decoding output or the input ends on
12313 the PV of the ssv. The value which the offset points will be modified
12314 to the last input position on the ssv.
12315
12316 Returns TRUE if the terminator was found, else returns FALSE.
12317
12318 =cut */
12319
12320 bool
12321 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12322                    SV *ssv, int *offset, char *tstr, int tlen)
12323 {
12324     dVAR;
12325     bool ret = FALSE;
12326     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12327         SV *offsv;
12328         dSP;
12329         ENTER;
12330         SAVETMPS;
12331         save_re_context();
12332         PUSHMARK(sp);
12333         EXTEND(SP, 6);
12334         XPUSHs(encoding);
12335         XPUSHs(dsv);
12336         XPUSHs(ssv);
12337         XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
12338         XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
12339         PUTBACK;
12340         call_method("cat_decode", G_SCALAR);
12341         SPAGAIN;
12342         ret = SvTRUE(TOPs);
12343         *offset = SvIV(offsv);
12344         PUTBACK;
12345         FREETMPS;
12346         LEAVE;
12347     }
12348     else
12349         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12350     return ret;
12351 }
12352
12353 /*
12354  * Local variables:
12355  * c-indentation-style: bsd
12356  * c-basic-offset: 4
12357  * indent-tabs-mode: t
12358  * End:
12359  *
12360  * ex: set ts=8 sts=4 sw=4 noet:
12361  */