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