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