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