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