This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
parser.t: Suppress warning
[perl5.git] / sv.h
CommitLineData
a0d0e21e 1/* sv.h
79072805 2 *
1129b882 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
83706693 4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall and others
79072805
LW
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 *
79072805
LW
9 */
10
a0d0e21e
LW
11#ifdef sv_flags
12#undef sv_flags /* Convex has this in <signal.h> for sigvec() */
13#endif
14
954c1994 15/*
ccfc67b7
JH
16=head1 SV Flags
17
954c1994 18=for apidoc AmU||svtype
75af9d73 19An enum of flags for Perl types. These are found in the file F<sv.h>
954c1994
GS
20in the C<svtype> enum. Test these flags with the C<SvTYPE> macro.
21
a5e62da0
FC
22The types are:
23
24 SVt_NULL
a5e62da0
FC
25 SVt_IV
26 SVt_NV
27 SVt_RV
28 SVt_PV
29 SVt_PVIV
30 SVt_PVNV
31 SVt_PVMG
e94d9b54 32 SVt_INVLIST
a5e62da0
FC
33 SVt_REGEXP
34 SVt_PVGV
35 SVt_PVLV
36 SVt_PVAV
37 SVt_PVHV
38 SVt_PVCV
39 SVt_PVFM
40 SVt_PVIO
41
42These are most easily explained from the bottom up.
43
796b6530
KW
44C<SVt_PVIO> is for I/O objects, C<SVt_PVFM> for formats, C<SVt_PVCV> for
45subroutines, C<SVt_PVHV> for hashes and C<SVt_PVAV> for arrays.
a5e62da0
FC
46
47All the others are scalar types, that is, things that can be bound to a
48C<$> variable. For these, the internal types are mostly orthogonal to
49types in the Perl language.
50
51Hence, checking C<< SvTYPE(sv) < SVt_PVAV >> is the best way to see whether
52something is a scalar.
53
796b6530
KW
54C<SVt_PVGV> represents a typeglob. If C<!SvFAKE(sv)>, then it is a real,
55incoercible typeglob. If C<SvFAKE(sv)>, then it is a scalar to which a
a5e62da0 56typeglob has been assigned. Assigning to it again will stop it from being
796b6530 57a typeglob. C<SVt_PVLV> represents a scalar that delegates to another scalar
a5e62da0
FC
58behind the scenes. It is used, e.g., for the return value of C<substr> and
59for tied hash and array elements. It can hold any scalar value, including
796b6530
KW
60a typeglob. C<SVt_REGEXP> is for regular
61expressions. C<SVt_INVLIST> is for Perl
e94d9b54 62core internal use only.
a5e62da0 63
796b6530 64C<SVt_PVMG> represents a "normal" scalar (not a typeglob, regular expression,
a5e62da0
FC
65or delegate). Since most scalars do not need all the internal fields of a
66PVMG, we save memory by allocating smaller structs when possible. All the
796b6530
KW
67other types are just simpler forms of C<SVt_PVMG>, with fewer internal fields.
68C<SVt_NULL> can only hold undef. C<SVt_IV> can hold undef, an integer, or a
69reference. (C<SVt_RV> is an alias for C<SVt_IV>, which exists for backward
70compatibility.) C<SVt_NV> can hold any of those or a double. C<SVt_PV> can only
71hold C<undef> or a string. C<SVt_PVIV> is a superset of C<SVt_PV> and C<SVt_IV>.
72C<SVt_PVNV> is similar. C<SVt_PVMG> can hold anything C<SVt_PVNV> can hold, but it
a5e62da0
FC
73can, but does not have to, be blessed or magical.
74
75=for apidoc AmU||SVt_NULL
76Type flag for scalars. See L</svtype>.
954c1994
GS
77
78=for apidoc AmU||SVt_IV
a5e62da0 79Type flag for scalars. See L</svtype>.
954c1994
GS
80
81=for apidoc AmU||SVt_NV
a5e62da0
FC
82Type flag for scalars. See L</svtype>.
83
84=for apidoc AmU||SVt_PV
85Type flag for scalars. See L</svtype>.
86
87=for apidoc AmU||SVt_PVIV
88Type flag for scalars. See L</svtype>.
89
90=for apidoc AmU||SVt_PVNV
91Type flag for scalars. See L</svtype>.
954c1994
GS
92
93=for apidoc AmU||SVt_PVMG
a5e62da0
FC
94Type flag for scalars. See L</svtype>.
95
e94d9b54
KW
96=for apidoc AmU||SVt_INVLIST
97Type flag for scalars. See L</svtype>.
98
a5e62da0
FC
99=for apidoc AmU||SVt_REGEXP
100Type flag for regular expressions. See L</svtype>.
101
102=for apidoc AmU||SVt_PVGV
103Type flag for typeglobs. See L</svtype>.
104
105=for apidoc AmU||SVt_PVLV
106Type flag for scalars. See L</svtype>.
954c1994
GS
107
108=for apidoc AmU||SVt_PVAV
a5e62da0 109Type flag for arrays. See L</svtype>.
954c1994
GS
110
111=for apidoc AmU||SVt_PVHV
a5e62da0 112Type flag for hashes. See L</svtype>.
954c1994
GS
113
114=for apidoc AmU||SVt_PVCV
a5e62da0
FC
115Type flag for subroutines. See L</svtype>.
116
117=for apidoc AmU||SVt_PVFM
118Type flag for formats. See L</svtype>.
119
120=for apidoc AmU||SVt_PVIO
121Type flag for I/O objects. See L</svtype>.
954c1994
GS
122
123=cut
1078c6a2
KW
124
125 These are ordered so that the simpler types have a lower value; SvUPGRADE
126 doesn't allow you to upgrade from a higher numbered type to a lower numbered
127 one; also there is code that assumes that anything that has as a PV component
128 has a type numbered >= SVt_PV.
954c1994
GS
129*/
130
1078c6a2 131
79072805 132typedef enum {
a0d0e21e 133 SVt_NULL, /* 0 */
e94d9b54
KW
134 /* BIND was here, before INVLIST replaced it. */
135 SVt_IV, /* 1 */
136 SVt_NV, /* 2 */
4df7f6af 137 /* RV was here, before it was merged with IV. */
e94d9b54
KW
138 SVt_PV, /* 3 */
139 SVt_INVLIST, /* 4, implemented as a PV */
4df7f6af
NC
140 SVt_PVIV, /* 5 */
141 SVt_PVNV, /* 6 */
142 SVt_PVMG, /* 7 */
5c35adbb 143 SVt_REGEXP, /* 8 */
cecf5685 144 /* PVBM was here, before BIND replaced it. */
4ce457a6
TP
145 SVt_PVGV, /* 9 */
146 SVt_PVLV, /* 10 */
147 SVt_PVAV, /* 11 */
148 SVt_PVHV, /* 12 */
149 SVt_PVCV, /* 13 */
a0d0e21e 150 SVt_PVFM, /* 14 */
93e68bfb
JC
151 SVt_PVIO, /* 15 */
152 SVt_LAST /* keep last in enum. used to size arrays */
79072805
LW
153} svtype;
154
f1fb8741 155/* *** any alterations to the SV types above need to be reflected in
e94d9b54
KW
156 * SVt_MASK and the various PL_valid_types_* tables. As of this writing those
157 * tables are in perl.h. There are also two affected names tables in dump.c,
158 * one in B.xs, and 'bodies_by_type[]' in sv.c */
f1fb8741
DM
159
160#define SVt_MASK 0xf /* smallest bitmask that covers all types */
161
cecf5685
NC
162#ifndef PERL_CORE
163/* Although Fast Boyer Moore tables are now being stored in PVGVs, for most
1078c6a2 164 purposes external code wanting to consider PVBM probably needs to think of
cecf5685
NC
165 PVMG instead. */
166# define SVt_PVBM SVt_PVMG
4df7f6af
NC
167/* Anything wanting to create a reference from clean should ensure that it has
168 a scalar of type SVt_IV now: */
169# define SVt_RV SVt_IV
cecf5685
NC
170#endif
171
d2a0f284 172/* There is collusion here with sv_clear - sv_clear exits early for SVt_NULL
db93c0c4
NC
173 so never reaches the clause at the end that uses sv_type_details->body_size
174 to determine whether to call safefree(). Hence body_size can be set
175 non-zero to record the size of HEs, without fear of bogus frees. */
6a93a7e5
NC
176#if defined(PERL_IN_HV_C) || defined(PERL_IN_XS_APITEST)
177#define HE_SVSLOT SVt_NULL
178#endif
ff121dc6
DD
179#ifdef PERL_IN_SV_C
180# define SVt_FIRST SVt_NULL /* the type of SV that new_SV() in sv.c returns */
181#endif
43e6e717 182
232d1c15
NC
183#define PERL_ARENA_ROOTS_SIZE (SVt_LAST)
184
43e6e717
NC
185/* typedefs to eliminate some typing */
186typedef struct he HE;
187typedef struct hek HEK;
188
79072805
LW
189/* Using C's structural equivalence to help emulate C++ inheritance here... */
190
30153bd2
JC
191/* start with 2 sv-head building blocks */
192#define _SV_HEAD(ptrtype) \
193 ptrtype sv_any; /* pointer to body */ \
194 U32 sv_refcnt; /* how many references to us */ \
195 U32 sv_flags /* what we are */
196
5b306eef
DD
197#if NVSIZE <= IVSIZE
198# define _NV_BODYLESS_UNION NV svu_nv;
199#else
200# define _NV_BODYLESS_UNION
201#endif
202
30153bd2
JC
203#define _SV_HEAD_UNION \
204 union { \
2a12fdfc 205 char* svu_pv; /* pointer to malloced string */ \
30153bd2
JC
206 IV svu_iv; \
207 UV svu_uv; \
5b306eef 208 _NV_BODYLESS_UNION \
30153bd2 209 SV* svu_rv; /* pointer to another SV */ \
8d919b0a 210 struct regexp* svu_rx; \
30153bd2
JC
211 SV** svu_array; \
212 HE** svu_hash; \
f7877b28 213 GP* svu_gp; \
6f7e8353 214 PerlIO *svu_fp; \
bb3b7d7b
DD
215 } sv_u \
216 _SV_HEAD_DEBUG
30153bd2 217
bb3b7d7b
DD
218#ifdef DEBUG_LEAKING_SCALARS
219#define _SV_HEAD_DEBUG ;\
220 PERL_BITFIELD32 sv_debug_optype:9; /* the type of OP that allocated us */ \
221 PERL_BITFIELD32 sv_debug_inpad:1; /* was allocated in a pad for an OP */ \
222 PERL_BITFIELD32 sv_debug_line:16; /* the line where we were allocated */ \
223 UV sv_debug_serial; /* serial number of sv allocation */ \
224 char * sv_debug_file; /* the file where we were allocated */ \
225 SV * sv_debug_parent /* what we were cloned from (ithreads)*/
226#else
227#define _SV_HEAD_DEBUG
228#endif
30153bd2 229
5e045b90 230struct STRUCT_SV { /* struct sv { */
30153bd2
JC
231 _SV_HEAD(void*);
232 _SV_HEAD_UNION;
79072805
LW
233};
234
235struct gv {
30153bd2
JC
236 _SV_HEAD(XPVGV*); /* pointer to xpvgv body */
237 _SV_HEAD_UNION;
79072805
LW
238};
239
240struct cv {
30153bd2
JC
241 _SV_HEAD(XPVCV*); /* pointer to xpvcv body */
242 _SV_HEAD_UNION;
79072805
LW
243};
244
245struct av {
0f7b1ae0 246 _SV_HEAD(XPVAV*); /* pointer to xpvav body */
30153bd2 247 _SV_HEAD_UNION;
79072805
LW
248};
249
250struct hv {
30153bd2
JC
251 _SV_HEAD(XPVHV*); /* pointer to xpvhv body */
252 _SV_HEAD_UNION;
8990e307
LW
253};
254
255struct io {
30153bd2
JC
256 _SV_HEAD(XPVIO*); /* pointer to xpvio body */
257 _SV_HEAD_UNION;
79072805
LW
258};
259
d2f13c59
NC
260struct p5rx {
261 _SV_HEAD(struct regexp*); /* pointer to regexp body */
262 _SV_HEAD_UNION;
263};
264
30153bd2 265#undef _SV_HEAD
0f7b1ae0 266#undef _SV_HEAD_UNION /* ensure no pollution */
30153bd2 267
954c1994 268/*
ccfc67b7
JH
269=head1 SV Manipulation Functions
270
954c1994 271=for apidoc Am|U32|SvREFCNT|SV* sv
cb198164
YO
272Returns the value of the object's reference count. Exposed
273to perl code via Internals::SvREFCNT().
954c1994
GS
274
275=for apidoc Am|SV*|SvREFCNT_inc|SV* sv
5df2f140 276Increments the reference count of the given SV, returning the SV.
954c1994 277
796b6530
KW
278All of the following C<SvREFCNT_inc>* macros are optimized versions of
279C<SvREFCNT_inc>, and can be replaced with C<SvREFCNT_inc>.
b37c2d43
AL
280
281=for apidoc Am|SV*|SvREFCNT_inc_NN|SV* sv
796b6530
KW
282Same as C<SvREFCNT_inc>, but can only be used if you know C<sv>
283is not C<NULL>. Since we don't have to check the NULLness, it's faster
b37c2d43
AL
284and smaller.
285
f2403e57 286=for apidoc Am|void|SvREFCNT_inc_void|SV* sv
796b6530 287Same as C<SvREFCNT_inc>, but can only be used if you don't need the
b37c2d43
AL
288return value. The macro doesn't need to return a meaningful value.
289
f2403e57 290=for apidoc Am|void|SvREFCNT_inc_void_NN|SV* sv
796b6530
KW
291Same as C<SvREFCNT_inc>, but can only be used if you don't need the return
292value, and you know that C<sv> is not C<NULL>. The macro doesn't need
b37c2d43
AL
293to return a meaningful value, or check for NULLness, so it's smaller
294and faster.
295
296=for apidoc Am|SV*|SvREFCNT_inc_simple|SV* sv
796b6530 297Same as C<SvREFCNT_inc>, but can only be used with expressions without side
4ea561bc 298effects. Since we don't have to store a temporary value, it's faster.
b37c2d43
AL
299
300=for apidoc Am|SV*|SvREFCNT_inc_simple_NN|SV* sv
796b6530
KW
301Same as C<SvREFCNT_inc_simple>, but can only be used if you know C<sv>
302is not C<NULL>. Since we don't have to check the NULLness, it's faster
b37c2d43
AL
303and smaller.
304
f2403e57 305=for apidoc Am|void|SvREFCNT_inc_simple_void|SV* sv
796b6530 306Same as C<SvREFCNT_inc_simple>, but can only be used if you don't need the
b37c2d43
AL
307return value. The macro doesn't need to return a meaningful value.
308
f2403e57 309=for apidoc Am|void|SvREFCNT_inc_simple_void_NN|SV* sv
796b6530
KW
310Same as C<SvREFCNT_inc>, but can only be used if you don't need the return
311value, and you know that C<sv> is not C<NULL>. The macro doesn't need
e638c624
MHM
312to return a meaningful value, or check for NULLness, so it's smaller
313and faster.
b37c2d43 314
954c1994 315=for apidoc Am|void|SvREFCNT_dec|SV* sv
796b6530 316Decrements the reference count of the given SV. C<sv> may be C<NULL>.
954c1994 317
4a9a56a7 318=for apidoc Am|void|SvREFCNT_dec_NN|SV* sv
796b6530
KW
319Same as C<SvREFCNT_dec>, but can only be used if you know C<sv>
320is not C<NULL>. Since we don't have to check the NULLness, it's faster
4a9a56a7
DM
321and smaller.
322
954c1994 323=for apidoc Am|svtype|SvTYPE|SV* sv
fbe13c60 324Returns the type of the SV. See C<L</svtype>>.
954c1994
GS
325
326=for apidoc Am|void|SvUPGRADE|SV* sv|svtype type
327Used to upgrade an SV to a more complex form. Uses C<sv_upgrade> to
fbe13c60 328perform the upgrade if necessary. See C<L</svtype>>.
954c1994
GS
329
330=cut
331*/
332
463ee0b2 333#define SvANY(sv) (sv)->sv_any
79072805 334#define SvFLAGS(sv) (sv)->sv_flags
aeea060c 335#define SvREFCNT(sv) (sv)->sv_refcnt
a863c7d1 336
27669aa4
FC
337#define SvREFCNT_inc(sv) S_SvREFCNT_inc(MUTABLE_SV(sv))
338#define SvREFCNT_inc_simple(sv) SvREFCNT_inc(sv)
339#define SvREFCNT_inc_NN(sv) S_SvREFCNT_inc_NN(MUTABLE_SV(sv))
340#define SvREFCNT_inc_void(sv) S_SvREFCNT_inc_void(MUTABLE_SV(sv))
8990e307 341
b37c2d43 342/* These guys don't need the curly blocks */
e638c624 343#define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
b1bc3f34
NC
344#define SvREFCNT_inc_simple_NN(sv) (++(SvREFCNT(sv)),MUTABLE_SV(sv))
345#define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT(MUTABLE_SV(sv)))
346#define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT(MUTABLE_SV(sv)))
b37c2d43 347
75e16a44 348#define SvREFCNT_dec(sv) S_SvREFCNT_dec(aTHX_ MUTABLE_SV(sv))
4a9a56a7 349#define SvREFCNT_dec_NN(sv) S_SvREFCNT_dec_NN(aTHX_ MUTABLE_SV(sv))
a863c7d1 350
8990e307 351#define SVTYPEMASK 0xff
1fef4616 352#define SvTYPE(sv) ((svtype)((sv)->sv_flags & SVTYPEMASK))
79072805 353
0565a181
NC
354/* Sadly there are some parts of the core that have pointers to already-freed
355 SV heads, and rely on being able to tell that they are now free. So mark
356 them all by using a consistent macro. */
7667e7f1 357#define SvIS_FREED(sv) UNLIKELY(((sv)->sv_flags == SVTYPEMASK))
0565a181 358
24e08842
DM
359/* this is defined in this peculiar way to avoid compiler warnings.
360 * See the <20121213131428.GD1842@iabyn.com> thread in p5p */
463ea229 361#define SvUPGRADE(sv, mt) \
24e08842 362 ((void)(SvTYPE(sv) >= (mt) || (sv_upgrade(sv, mt),1)))
79072805 363
3f7ef1d4
NC
364#define SVf_IOK 0x00000100 /* has valid public integer value */
365#define SVf_NOK 0x00000200 /* has valid public numeric value */
366#define SVf_POK 0x00000400 /* has valid public pointer value */
367#define SVf_ROK 0x00000800 /* has a valid reference pointer */
368
369#define SVp_IOK 0x00001000 /* has valid non-public integer value */
370#define SVp_NOK 0x00002000 /* has valid non-public numeric value */
371#define SVp_POK 0x00004000 /* has valid non-public pointer value */
fbb778ec 372#define SVp_SCREAM 0x00008000 /* method name is DOES */
63545cd8 373 /* eval cx text is ref counted */
2e5b91de
NC
374#define SVphv_CLONEABLE SVp_SCREAM /* PVHV (stashes) clone its objects */
375#define SVpgv_GP SVp_SCREAM /* GV has a valid GP */
1ccdb730
NC
376#define SVprv_PCS_IMPORTED SVp_SCREAM /* RV is a proxy for a constant
377 subroutine in another package. Set the
7eeb6e4e 378 GvIMPORTED_CV_on() if it needs to be
1ccdb730 379 expanded to a real GV */
fd01b4b7 380#define SVf_PROTECT 0x00010000 /* very read-only */
c0683843 381#define SVs_PADTMP 0x00020000 /* in use as tmp */
c0683843
FC
382#define SVs_PADSTALE 0x00040000 /* lexical has gone out of scope;
383 only used when !PADTMP */
2c39754a 384#define SVs_TEMP 0x00080000 /* mortal (implies string is stealable) */
3f7ef1d4
NC
385#define SVs_OBJECT 0x00100000 /* is "blessed" */
386#define SVs_GMG 0x00200000 /* has magical get method */
387#define SVs_SMG 0x00400000 /* has magical set method */
388#define SVs_RMG 0x00800000 /* has random magical methods */
389
fea3622c 390#define SVf_FAKE 0x01000000 /* 0: glob is just a copy
3f7ef1d4 391 1: SV head arena wasn't malloc()ed
e3918bb7 392 2: For PVCV, whether CvUNIQUE(cv)
3f7ef1d4
NC
393 refers to an eval or once only
394 [CvEVAL(cv), CvSPECIAL(cv)]
0f94cb1f 395 3: HV: informally reserved by DAPM
2c39754a 396 for vtables */
3f7ef1d4
NC
397#define SVf_OOK 0x02000000 /* has valid offset value. For a PVHV this
398 means that a hv_aux struct is present
399 after the main array */
400#define SVf_BREAK 0x04000000 /* refcnt is artificially low - used by
36c662f4
NC
401 SVs in final arena cleanup.
402 Set in S_regtry on PL_reg_curpm, so that
a5f48505
DM
403 perl_destruct will skip it.
404 Used for mark and sweep by OP_AASSIGN
405 */
3f7ef1d4 406#define SVf_READONLY 0x08000000 /* may not be modified */
8990e307 407
a0d0e21e 408
8990e307 409
5bc28da9 410
a623f893
FC
411#define SVf_THINKFIRST (SVf_READONLY|SVf_PROTECT|SVf_ROK|SVf_FAKE \
412 |SVs_RMG|SVf_IsCOW)
5bc28da9 413
a0d0e21e 414#define SVf_OK (SVf_IOK|SVf_NOK|SVf_POK|SVf_ROK| \
2e5b91de 415 SVp_IOK|SVp_NOK|SVp_POK|SVpgv_GP)
a0d0e21e 416
7a77f1af 417#define PRIVSHIFT 4 /* (SVp_?OK >> PRIVSHIFT) == SVf_?OK */
8990e307 418
45eaf8af 419/* Note that SVf_AMAGIC is now only set on stashes. */
cd028baa 420#define SVf_AMAGIC 0x10000000 /* has magical overloaded methods */
45eaf8af
FC
421#define SVf_IsCOW 0x10000000 /* copy on write (shared hash key if
422 SvLEN == 0) */
70bc21b7 423
44b2d6d6
FC
424/* Ensure this value does not clash with the GV_ADD* flags in gv.h, or the
425 CV_CKPROTO_* flags in op.c, or the padadd_* flags in pad.h: */
cd028baa
NC
426#define SVf_UTF8 0x20000000 /* SvPV is UTF-8 encoded
427 This is also set on RVs whose overloaded
428 stringification is UTF-8. This might
429 only happen as a side effect of SvPV() */
70bc21b7
DM
430/* PVHV */
431#define SVphv_SHAREKEYS 0x20000000 /* PVHV keys live on shared string table */
8990e307 432
2e9f07a2
NC
433/* PVAV could probably use 0x2000000 without conflict. I assume that PVFM can
434 be UTF-8 encoded, and PVCVs could well have UTF-8 prototypes. PVIOs haven't
435 been restructured, so sometimes get used as string buffers. */
436
70bc21b7
DM
437
438/* Some private flags. */
439
e1dcbbca 440
0f94cb1f
FC
441/* The SVp_SCREAM|SVpbm_VALID (0x40008000) combination is up for grabs.
442 Formerly it was used for pad names, but now it is available. The core
443 is careful to avoid setting both flags.
e1dcbbca
NC
444
445 SVf_POK, SVp_POK also set:
446 0x00004400 Normal
fbb778ec 447 0x0000C400 method name for DOES (SvSCREAM)
e1dcbbca 448 0x40004400 FBM compiled (SvVALID)
0f94cb1f 449 0x4000C400 *** Formerly used for pad names ***
e1dcbbca
NC
450
451 0x00008000 GV with GP
452 0x00008800 RV with PCS imported
453*/
26a32e18 454/* PVAV */
3f7ef1d4 455#define SVpav_REAL 0x40000000 /* free old entries */
26a32e18 456/* PVHV */
3f7ef1d4 457#define SVphv_LAZYDEL 0x40000000 /* entry in xhv_eiter must be deleted */
69d97907
NC
458/* This is only set true on a PVGV when it's playing "PVBM", but is tested for
459 on any regular scalar (anything <= PVLV) */
5fe1b2e4 460#define SVpbm_VALID 0x40000000
7f83d853 461/* Only used in toke.c on an SV stored in PL_lex_repl */
3f7ef1d4 462#define SVrepl_EVAL 0x40000000 /* Replacement part of s///e */
25da4f38 463
26a32e18 464/* IV, PVIV, PVNV, PVMG, PVGV and (I assume) PVLV */
3f7ef1d4 465#define SVf_IVisUV 0x80000000 /* use XPVUV instead of XPVIV */
26a32e18 466/* PVAV */
3f7ef1d4 467#define SVpav_REIFY 0x80000000 /* can become real */
26a32e18 468/* PVHV */
3f7ef1d4 469#define SVphv_HASKFLAGS 0x80000000 /* keys have flag byte after hash */
cecf5685 470/* PVGV when SVpbm_VALID is true */
41c8d07a 471#define SVpbm_TAIL 0x80000000 /* string has a fake "\n" appended */
26a32e18 472/* RV upwards. However, SVf_ROK and SVp_IOK are exclusive */
3f7ef1d4 473#define SVprv_WEAKREF 0x80000000 /* Weak reference */
d3ce79bd 474/* pad name vars only */
810b8aa5 475
6e128786
NC
476#define _XPV_HEAD \
477 HV* xmg_stash; /* class package */ \
478 union _xmgu xmg_u; \
8de47657 479 STRLEN xpv_cur; /* length of svu_pv as a C string */ \
8d919b0a
FC
480 union { \
481 STRLEN xpvlenu_len; /* allocated size */ \
482 char * xpvlenu_pv; /* regexp string */ \
483 } xpv_len_u
484
485#define xpv_len xpv_len_u.xpvlenu_len
bb02a38f 486
20f4945e
MHM
487union _xnvu {
488 NV xnv_nv; /* numeric value, if any */
489 HV * xgv_stash;
490 struct {
491 U32 xlow;
492 U32 xhigh;
493 } xpad_cop_seq; /* used by pad.c for cop_sequence */
20f4945e
MHM
494};
495
496union _xivu {
497 IV xivu_iv; /* integer value */
20f4945e 498 UV xivu_uv;
20f4945e
MHM
499 HEK * xivu_namehek; /* xpvlv, xpvgv: GvNAME */
500};
501
502union _xmgu {
503 MAGIC* xmg_magic; /* linked list of magicalness */
5bec93be 504 STRLEN xmg_hash_index; /* used while freeing hash entries */
9b7476d7 505};
11ca45c0 506
79072805 507struct xpv {
20f4945e 508 _XPV_HEAD;
79072805
LW
509};
510
511struct xpviv {
20f4945e
MHM
512 _XPV_HEAD;
513 union _xivu xiv_u;
79072805
LW
514};
515
311a25d9
NC
516#define xiv_iv xiv_u.xivu_iv
517
ff68c719 518struct xpvuv {
20f4945e
MHM
519 _XPV_HEAD;
520 union _xivu xuv_u;
ff68c719 521};
522
20f4945e 523#define xuv_uv xuv_u.xivu_uv
311a25d9 524
79072805 525struct xpvnv {
20f4945e
MHM
526 _XPV_HEAD;
527 union _xivu xiv_u;
6e128786 528 union _xnvu xnv_u;
79072805
LW
529};
530
3cd3be43 531/* This structure must match the beginning of struct xpvhv in hv.h. */
79072805 532struct xpvmg {
20f4945e 533 _XPV_HEAD;
6e128786
NC
534 union _xivu xiv_u;
535 union _xnvu xnv_u;
79072805
LW
536};
537
538struct xpvlv {
20f4945e 539 _XPV_HEAD;
6e128786
NC
540 union _xivu xiv_u;
541 union _xnvu xnv_u;
bbfdc870
FC
542 union {
543 STRLEN xlvu_targoff;
544 SSize_t xlvu_stargoff;
545 } xlv_targoff_u;
79072805
LW
546 STRLEN xlv_targlen;
547 SV* xlv_targ;
dd28f7bb
DM
548 char xlv_type; /* k=keys .=pos x=substr v=vec /=join/re
549 * y=alem/helem/iter t=tie T=tied HE */
83f78d1a 550 char xlv_flags; /* 1 = negative offset 2 = negative len */
79072805
LW
551};
552
bbfdc870
FC
553#define xlv_targoff xlv_targoff_u.xlvu_targoff
554
d361b004
KW
555struct xpvinvlist {
556 _XPV_HEAD;
da62e549
KW
557 IV prev_index; /* caches result of previous invlist_search() */
558 STRLEN iterator; /* Stores where we are in iterating */
559 bool is_offset; /* The data structure for all inversion lists
560 begins with an element for code point U+0000.
561 If this bool is set, the actual list contains
562 that 0; otherwise, the list actually begins
563 with the following element. Thus to invert
564 the list, merely toggle this flag */
d361b004
KW
565};
566
cecf5685
NC
567/* This structure works in 3 ways - regular scalar, GV with GP, or fast
568 Boyer-Moore. */
79072805 569struct xpvgv {
20f4945e 570 _XPV_HEAD;
6e128786
NC
571 union _xivu xiv_u;
572 union _xnvu xnv_u;
79072805
LW
573};
574
51c78f1b 575typedef U32 cv_flags_t;
77a005ab 576
20f4945e
MHM
577#define _XPVCV_COMMON \
578 HV * xcv_stash; \
579 union { \
580 OP * xcv_start; \
581 ANY xcv_xsubany; \
582 } xcv_start_u; \
583 union { \
584 OP * xcv_root; \
585 void (*xcv_xsub) (pTHX_ CV*); \
586 } xcv_root_u; \
b290562e
FC
587 union { \
588 GV * xcv_gv; \
589 HEK * xcv_hek; \
590 } xcv_gv_u; \
20f4945e 591 char * xcv_file; \
eacbb379
DD
592 union { \
593 PADLIST * xcv_padlist; \
db6e00bd 594 void * xcv_hscxt; \
eacbb379 595 } xcv_padlist_u; \
20f4945e
MHM
596 CV * xcv_outside; \
597 U32 xcv_outside_seq; /* the COP sequence (at the point of our \
598 * compilation) in the lexically enclosing \
599 * sub */ \
8de47657
FC
600 cv_flags_t xcv_flags; \
601 I32 xcv_depth /* >= 2 indicates recursive call */
8990e307 602
0d856a3a
FC
603/* This structure must match XPVCV in cv.h */
604
20f4945e
MHM
605struct xpvfm {
606 _XPV_HEAD;
20f4945e 607 _XPVCV_COMMON;
79072805
LW
608};
609
167f2c4d 610
8990e307 611struct xpvio {
20f4945e 612 _XPV_HEAD;
6e128786 613 union _xivu xiv_u;
6f7e8353
NC
614 /* ifp and ofp are normally the same, but sockets need separate streams */
615 PerlIO * xio_ofp;
c951e2ad
NC
616 /* Cray addresses everything by word boundaries (64 bits) and
617 * code and data pointers cannot be mixed (which is exactly what
618 * Perl_filter_add() tries to do with the dirp), hence the
619 * following union trick (as suggested by Gurusamy Sarathy).
620 * For further information see Geir Johansen's problem report
4fe48737 621 * titled [ID 20000612.002 (#3366)] Perl problem on Cray system
c951e2ad
NC
622 * The any pointer (known as IoANY()) will also be a good place
623 * to hang any IO disciplines to.
624 */
625 union {
626 DIR * xiou_dirp; /* for opendir, readdir, etc */
627 void * xiou_any; /* for alignment */
628 } xio_dirpu;
629 /* IV xio_lines is now in IVX $. */
630 IV xio_page; /* $% */
631 IV xio_page_len; /* $= */
632 IV xio_lines_left; /* $- */
633 char * xio_top_name; /* $^ */
634 GV * xio_top_gv; /* $^ */
635 char * xio_fmt_name; /* $~ */
636 GV * xio_fmt_gv; /* $~ */
637 char * xio_bottom_name;/* $^B */
638 GV * xio_bottom_gv; /* $^B */
639 char xio_type;
640 U8 xio_flags;
8990e307 641};
167f2c4d 642
4755096e
GS
643#define xio_dirp xio_dirpu.xiou_dirp
644#define xio_any xio_dirpu.xiou_any
8990e307 645
e0c19803
GS
646#define IOf_ARGV 1 /* this fp iterates over ARGV */
647#define IOf_START 2 /* check for null ARGV and substitute '-' */
648#define IOf_FLUSH 4 /* this fp wants a flush after write op */
649#define IOf_DIDTOP 8 /* just did top of form */
650#define IOf_UNTAINT 16 /* consider this fp (and its data) "safe" */
651#define IOf_NOLINE 32 /* slurped a pseudo-line from empty file */
5bb89d25
NC
652#define IOf_FAKE_DIRP 64 /* xio_dirp is fake (source filters kludge)
653 Also, when this is set, SvPVX() is valid */
8990e307 654
ed6116ce
LW
655/* The following macros define implementation-independent predicates on SVs. */
656
954c1994 657/*
fbf9f983
RGS
658=for apidoc Am|U32|SvNIOK|SV* sv
659Returns a U32 value indicating whether the SV contains a number, integer or
954c1994
GS
660double.
661
fbf9f983
RGS
662=for apidoc Am|U32|SvNIOKp|SV* sv
663Returns a U32 value indicating whether the SV contains a number, integer or
fe749c9a 664double. Checks the B<private> setting. Use C<SvNIOK> instead.
954c1994
GS
665
666=for apidoc Am|void|SvNIOK_off|SV* sv
667Unsets the NV/IV status of an SV.
668
fbf9f983 669=for apidoc Am|U32|SvOK|SV* sv
72d33970 670Returns a U32 value indicating whether the value is defined. This is
c0b6140e 671only meaningful for scalars.
954c1994 672
fbf9f983
RGS
673=for apidoc Am|U32|SvIOKp|SV* sv
674Returns a U32 value indicating whether the SV contains an integer. Checks
fe749c9a 675the B<private> setting. Use C<SvIOK> instead.
954c1994 676
fbf9f983
RGS
677=for apidoc Am|U32|SvNOKp|SV* sv
678Returns a U32 value indicating whether the SV contains a double. Checks the
fe749c9a 679B<private> setting. Use C<SvNOK> instead.
954c1994 680
fbf9f983
RGS
681=for apidoc Am|U32|SvPOKp|SV* sv
682Returns a U32 value indicating whether the SV contains a character string.
fe749c9a 683Checks the B<private> setting. Use C<SvPOK> instead.
954c1994 684
fbf9f983
RGS
685=for apidoc Am|U32|SvIOK|SV* sv
686Returns a U32 value indicating whether the SV contains an integer.
954c1994
GS
687
688=for apidoc Am|void|SvIOK_on|SV* sv
689Tells an SV that it is an integer.
690
691=for apidoc Am|void|SvIOK_off|SV* sv
692Unsets the IV status of an SV.
693
694=for apidoc Am|void|SvIOK_only|SV* sv
796b6530 695Tells an SV that it is an integer and disables all other C<OK> bits.
954c1994 696
e331fc52 697=for apidoc Am|void|SvIOK_only_UV|SV* sv
796b6530 698Tells an SV that it is an unsigned integer and disables all other C<OK> bits.
e331fc52 699
12fa07df 700=for apidoc Am|bool|SvIOK_UV|SV* sv
a6ceea06
KW
701Returns a boolean indicating whether the SV contains an integer that must be
702interpreted as unsigned. A non-negative integer whose value is within the
796b6530 703range of both an IV and a UV may be be flagged as either C<SvUOK> or C<SVIOK>.
e331fc52 704
fbf9f983 705=for apidoc Am|bool|SvUOK|SV* sv
a6ceea06
KW
706Returns a boolean indicating whether the SV contains an integer that must be
707interpreted as unsigned. A non-negative integer whose value is within the
796b6530 708range of both an IV and a UV may be be flagged as either C<SvUOK> or C<SVIOK>.
28e5dec8 709
12fa07df 710=for apidoc Am|bool|SvIOK_notUV|SV* sv
d1be9408 711Returns a boolean indicating whether the SV contains a signed integer.
e331fc52 712
fbf9f983
RGS
713=for apidoc Am|U32|SvNOK|SV* sv
714Returns a U32 value indicating whether the SV contains a double.
954c1994
GS
715
716=for apidoc Am|void|SvNOK_on|SV* sv
717Tells an SV that it is a double.
718
719=for apidoc Am|void|SvNOK_off|SV* sv
720Unsets the NV status of an SV.
721
722=for apidoc Am|void|SvNOK_only|SV* sv
723Tells an SV that it is a double and disables all other OK bits.
724
fbf9f983
RGS
725=for apidoc Am|U32|SvPOK|SV* sv
726Returns a U32 value indicating whether the SV contains a character
954c1994
GS
727string.
728
729=for apidoc Am|void|SvPOK_on|SV* sv
730Tells an SV that it is a string.
731
732=for apidoc Am|void|SvPOK_off|SV* sv
733Unsets the PV status of an SV.
734
735=for apidoc Am|void|SvPOK_only|SV* sv
796b6530 736Tells an SV that it is a string and disables all other C<OK> bits.
1e54db1a 737Will also turn off the UTF-8 status.
954c1994 738
b0f01acb
JP
739=for apidoc Am|bool|SvVOK|SV* sv
740Returns a boolean indicating whether the SV contains a v-string.
741
fbf9f983 742=for apidoc Am|U32|SvOOK|SV* sv
69240efd
NC
743Returns a U32 indicating whether the pointer to the string buffer is offset.
744This hack is used internally to speed up removal of characters from the
796b6530
KW
745beginning of a C<SvPV>. When C<SvOOK> is true, then the start of the
746allocated string buffer is actually C<SvOOK_offset()> bytes before C<SvPVX>.
747This offset used to be stored in C<SvIVX>, but is now stored within the spare
69240efd 748part of the buffer.
954c1994 749
fbf9f983 750=for apidoc Am|U32|SvROK|SV* sv
954c1994
GS
751Tests if the SV is an RV.
752
753=for apidoc Am|void|SvROK_on|SV* sv
754Tells an SV that it is an RV.
755
756=for apidoc Am|void|SvROK_off|SV* sv
757Unsets the RV status of an SV.
758
759=for apidoc Am|SV*|SvRV|SV* sv
760Dereferences an RV to return the SV.
761
762=for apidoc Am|IV|SvIVX|SV* sv
645c22ef 763Returns the raw value in the SV's IV slot, without checks or conversions.
796b6530 764Only use when you are sure C<SvIOK> is true. See also C<L</SvIV>>.
954c1994
GS
765
766=for apidoc Am|UV|SvUVX|SV* sv
645c22ef 767Returns the raw value in the SV's UV slot, without checks or conversions.
796b6530 768Only use when you are sure C<SvIOK> is true. See also C<L</SvUV>>.
954c1994
GS
769
770=for apidoc Am|NV|SvNVX|SV* sv
645c22ef 771Returns the raw value in the SV's NV slot, without checks or conversions.
796b6530 772Only use when you are sure C<SvNOK> is true. See also C<L</SvNV>>.
954c1994
GS
773
774=for apidoc Am|char*|SvPVX|SV* sv
645c22ef 775Returns a pointer to the physical string in the SV. The SV must contain a
72d33970
FC
776string. Prior to 5.9.3 it is not safe
777to execute this macro unless the SV's
796b6530 778type >= C<SVt_PV>.
954c1994 779
5b36e945
FC
780This is also used to store the name of an autoloaded subroutine in an XS
781AUTOLOAD routine. See L<perlguts/Autoloading with XSUBs>.
89fc9e2a 782
954c1994 783=for apidoc Am|STRLEN|SvCUR|SV* sv
fbe13c60 784Returns the length of the string which is in the SV. See C<L</SvLEN>>.
954c1994
GS
785
786=for apidoc Am|STRLEN|SvLEN|SV* sv
659239a4 787Returns the size of the string buffer in the SV, not including any part
fbe13c60 788attributable to C<SvOOK>. See C<L</SvCUR>>.
954c1994
GS
789
790=for apidoc Am|char*|SvEND|SV* sv
f990ea3e
FC
791Returns a pointer to the spot just after the last character in
792the string which is in the SV, where there is usually a trailing
417b32ce 793C<NUL> character (even though Perl scalars do not strictly require it).
796b6530 794See C<L</SvCUR>>. Access the character as C<*(SvEND(sv))>.
954c1994 795
f990ea3e
FC
796Warning: If C<SvCUR> is equal to C<SvLEN>, then C<SvEND> points to
797unallocated memory.
798
954c1994
GS
799=for apidoc Am|HV*|SvSTASH|SV* sv
800Returns the stash of the SV.
801
672994ce 802=for apidoc Am|void|SvIV_set|SV* sv|IV val
20799e15
SP
803Set the value of the IV pointer in sv to val. It is possible to perform
804the same function of this macro with an lvalue assignment to C<SvIVX>.
805With future Perls, however, it will be more efficient to use
806C<SvIV_set> instead of the lvalue assignment to C<SvIVX>.
672994ce
SP
807
808=for apidoc Am|void|SvNV_set|SV* sv|NV val
796b6530 809Set the value of the NV pointer in C<sv> to val. See C<L</SvIV_set>>.
672994ce
SP
810
811=for apidoc Am|void|SvPV_set|SV* sv|char* val
f2979eac
DD
812This is probably not what you want to use, you probably wanted
813L</sv_usepvn_flags> or L</sv_setpvn> or L</sv_setpvs>.
235fc044 814
f2979eac 815Set the value of the PV pointer in C<sv> to the Perl allocated
fbe13c60 816C<NUL>-terminated string C<val>. See also C<L</SvIV_set>>.
f2979eac
DD
817
818Remember to free the previous PV buffer. There are many things to check.
235fc044
FC
819Beware that the existing pointer may be involved in copy-on-write or other
820mischief, so do C<SvOOK_off(sv)> and use C<sv_force_normal> or
796b6530 821C<SvPV_force> (or check the C<SvIsCOW> flag) first to make sure this
f2979eac
DD
822modification is safe. Then finally, if it is not a COW, call C<SvPV_free> to
823free the previous PV buffer.
672994ce
SP
824
825=for apidoc Am|void|SvUV_set|SV* sv|UV val
796b6530 826Set the value of the UV pointer in C<sv> to val. See C<L</SvIV_set>>.
672994ce
SP
827
828=for apidoc Am|void|SvRV_set|SV* sv|SV* val
796b6530 829Set the value of the RV pointer in C<sv> to val. See C<L</SvIV_set>>.
672994ce
SP
830
831=for apidoc Am|void|SvMAGIC_set|SV* sv|MAGIC* val
796b6530 832Set the value of the MAGIC pointer in C<sv> to val. See C<L</SvIV_set>>.
672994ce 833
b6f4de24 834=for apidoc Am|void|SvSTASH_set|SV* sv|HV* val
796b6530 835Set the value of the STASH pointer in C<sv> to val. See C<L</SvIV_set>>.
672994ce 836
954c1994 837=for apidoc Am|void|SvCUR_set|SV* sv|STRLEN len
fbe13c60
KW
838Set the current length of the string which is in the SV. See C<L</SvCUR>>
839and C<SvIV_set>>.
672994ce
SP
840
841=for apidoc Am|void|SvLEN_set|SV* sv|STRLEN len
0ff57aee 842Set the size of the string buffer for the SV. See C<L</SvLEN>>.
954c1994
GS
843
844=cut
845*/
846
79072805 847#define SvNIOK(sv) (SvFLAGS(sv) & (SVf_IOK|SVf_NOK))
748a9306 848#define SvNIOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK))
a0d0e21e 849#define SvNIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK| \
25da4f38 850 SVp_IOK|SVp_NOK|SVf_IVisUV))
79072805 851
c7724415
FC
852#define assert_not_ROK(sv) assert_(!SvROK(sv) || !SvRV(sv))
853#define assert_not_glob(sv) assert_(!isGV_with_GP(sv))
906ed6d6 854
3f2ee99a 855#define SvOK(sv) (SvFLAGS(sv) & SVf_OK || isREGEXP(sv))
f7877b28 856#define SvOK_off(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
dd2eae66 857 SvFLAGS(sv) &= ~(SVf_OK| \
d41ff1b8 858 SVf_IVisUV|SVf_UTF8), \
25da4f38 859 SvOOK_off(sv))
54866b45 860#define SvOK_off_exc_UV(sv) (assert_not_ROK(sv) \
dd2eae66 861 SvFLAGS(sv) &= ~(SVf_OK| \
d41ff1b8 862 SVf_UTF8), \
a0d0e21e 863 SvOOK_off(sv))
79072805 864
8990e307
LW
865#define SvOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK))
866#define SvIOKp(sv) (SvFLAGS(sv) & SVp_IOK)
b326ddff 867#define SvIOKp_on(sv) (assert_not_glob(sv) \
765f542d 868 SvFLAGS(sv) |= SVp_IOK)
8990e307 869#define SvNOKp(sv) (SvFLAGS(sv) & SVp_NOK)
f7877b28 870#define SvNOKp_on(sv) (assert_not_glob(sv) SvFLAGS(sv) |= SVp_NOK)
8990e307 871#define SvPOKp(sv) (SvFLAGS(sv) & SVp_POK)
f7877b28 872#define SvPOKp_on(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
906ed6d6 873 SvFLAGS(sv) |= SVp_POK)
463ee0b2 874
79072805 875#define SvIOK(sv) (SvFLAGS(sv) & SVf_IOK)
b326ddff 876#define SvIOK_on(sv) (assert_not_glob(sv) \
765f542d 877 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
25da4f38 878#define SvIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVp_IOK|SVf_IVisUV))
0c34ef67 879#define SvIOK_only(sv) (SvOK_off(sv), \
a0d0e21e 880 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
f7877b28 881#define SvIOK_only_UV(sv) (assert_not_glob(sv) SvOK_off_exc_UV(sv), \
25da4f38 882 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
70401c6b 883
25da4f38
IZ
884#define SvIOK_UV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \
885 == (SVf_IOK|SVf_IVisUV))
28e5dec8 886#define SvUOK(sv) SvIOK_UV(sv)
25da4f38
IZ
887#define SvIOK_notUV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \
888 == SVf_IOK)
889
890#define SvIsUV(sv) (SvFLAGS(sv) & SVf_IVisUV)
891#define SvIsUV_on(sv) (SvFLAGS(sv) |= SVf_IVisUV)
892#define SvIsUV_off(sv) (SvFLAGS(sv) &= ~SVf_IVisUV)
79072805
LW
893
894#define SvNOK(sv) (SvFLAGS(sv) & SVf_NOK)
f7877b28
NC
895#define SvNOK_on(sv) (assert_not_glob(sv) \
896 SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))
8990e307 897#define SvNOK_off(sv) (SvFLAGS(sv) &= ~(SVf_NOK|SVp_NOK))
0c34ef67 898#define SvNOK_only(sv) (SvOK_off(sv), \
a0d0e21e 899 SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))
79072805 900
914184e1 901/*
fbf9f983 902=for apidoc Am|U32|SvUTF8|SV* sv
3c813ed0
KW
903Returns a U32 value indicating the UTF-8 status of an SV. If things are set-up
904properly, this indicates whether or not the SV contains UTF-8 encoded data.
796b6530 905You should use this I<after> a call to C<SvPV()> or one of its variants, in
fd142383 906case any call to string overloading updates the internal flag.
914184e1 907
119bc988
KW
908If you want to take into account the L<bytes> pragma, use C<L</DO_UTF8>>
909instead.
910
914184e1 911=for apidoc Am|void|SvUTF8_on|SV *sv
1e54db1a 912Turn on the UTF-8 status of an SV (the data is not changed, just the flag).
d5ce4a7c 913Do not use frivolously.
914184e1
JH
914
915=for apidoc Am|void|SvUTF8_off|SV *sv
3c813ed0
KW
916Unsets the UTF-8 status of an SV (the data is not changed, just the flag).
917Do not use frivolously.
914184e1
JH
918
919=for apidoc Am|void|SvPOK_only_UTF8|SV* sv
796b6530 920Tells an SV that it is a string and disables all other C<OK> bits,
1e54db1a 921and leaves the UTF-8 status as it was.
f1a1024e 922
914184e1
JH
923=cut
924 */
925
7a5fd60d
NC
926/* Ensure the return value of this macro does not clash with the GV_ADD* flags
927in gv.h: */
a7cb1f99
GS
928#define SvUTF8(sv) (SvFLAGS(sv) & SVf_UTF8)
929#define SvUTF8_on(sv) (SvFLAGS(sv) |= (SVf_UTF8))
930#define SvUTF8_off(sv) (SvFLAGS(sv) &= ~(SVf_UTF8))
5bc28da9 931
79072805 932#define SvPOK(sv) (SvFLAGS(sv) & SVf_POK)
f7877b28 933#define SvPOK_on(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
906ed6d6 934 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
8990e307 935#define SvPOK_off(sv) (SvFLAGS(sv) &= ~(SVf_POK|SVp_POK))
f7877b28 936#define SvPOK_only(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
dd2eae66 937 SvFLAGS(sv) &= ~(SVf_OK| \
d41ff1b8
GS
938 SVf_IVisUV|SVf_UTF8), \
939 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
f7877b28 940#define SvPOK_only_UTF8(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
dd2eae66 941 SvFLAGS(sv) &= ~(SVf_OK| \
d41ff1b8 942 SVf_IVisUV), \
a0d0e21e 943 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
79072805 944
4f2da183 945#define SvVOK(sv) (SvMAGICAL(sv) \
b0a11fe1
RGS
946 && mg_find(sv,PERL_MAGIC_vstring))
947/* returns the vstring magic, if any */
948#define SvVSTRING_mg(sv) (SvMAGICAL(sv) \
4f2da183 949 ? mg_find(sv,PERL_MAGIC_vstring) : NULL)
b0a11fe1 950
79072805 951#define SvOOK(sv) (SvFLAGS(sv) & SVf_OOK)
a4f658f7 952#define SvOOK_on(sv) (SvFLAGS(sv) |= SVf_OOK)
fa7a1e49 953#define SvOOK_off(sv) ((void)(SvOOK(sv) && (sv_backoff(sv),0)))
79072805 954
a0d0e21e
LW
955#define SvFAKE(sv) (SvFLAGS(sv) & SVf_FAKE)
956#define SvFAKE_on(sv) (SvFLAGS(sv) |= SVf_FAKE)
957#define SvFAKE_off(sv) (SvFLAGS(sv) &= ~SVf_FAKE)
958
ed6116ce 959#define SvROK(sv) (SvFLAGS(sv) & SVf_ROK)
a0d0e21e 960#define SvROK_on(sv) (SvFLAGS(sv) |= SVf_ROK)
dd2eae66 961#define SvROK_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK))
79072805 962
8990e307
LW
963#define SvMAGICAL(sv) (SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG))
964#define SvMAGICAL_on(sv) (SvFLAGS(sv) |= (SVs_GMG|SVs_SMG|SVs_RMG))
965#define SvMAGICAL_off(sv) (SvFLAGS(sv) &= ~(SVs_GMG|SVs_SMG|SVs_RMG))
79072805 966
8990e307
LW
967#define SvGMAGICAL(sv) (SvFLAGS(sv) & SVs_GMG)
968#define SvGMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_GMG)
969#define SvGMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_GMG)
ed6116ce 970
8990e307
LW
971#define SvSMAGICAL(sv) (SvFLAGS(sv) & SVs_SMG)
972#define SvSMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_SMG)
973#define SvSMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_SMG)
ed6116ce 974
8990e307
LW
975#define SvRMAGICAL(sv) (SvFLAGS(sv) & SVs_RMG)
976#define SvRMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_RMG)
977#define SvRMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_RMG)
ed6116ce 978
a1cd65be 979#define SvAMAGIC(sv) (SvROK(sv) && SvOBJECT(SvRV(sv)) && \
54c554f3 980 HvAMAGIC(SvSTASH(SvRV(sv))))
a0d0e21e 981
0adc25b0
FC
982/* To be used on the stashes themselves: */
983#define HvAMAGIC(hv) (SvFLAGS(hv) & SVf_AMAGIC)
984#define HvAMAGIC_on(hv) (SvFLAGS(hv) |= SVf_AMAGIC)
985#define HvAMAGIC_off(hv) (SvFLAGS(hv) &=~ SVf_AMAGIC)
986
4bac9ae4 987
1078c6a2 988/* "nog" means "doesn't have get magic" */
4bac9ae4
CS
989#define SvPOK_nog(sv) ((SvFLAGS(sv) & (SVf_POK|SVs_GMG)) == SVf_POK)
990#define SvIOK_nog(sv) ((SvFLAGS(sv) & (SVf_IOK|SVs_GMG)) == SVf_IOK)
991#define SvUOK_nog(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV|SVs_GMG)) == (SVf_IOK|SVf_IVisUV))
992#define SvNOK_nog(sv) ((SvFLAGS(sv) & (SVf_NOK|SVs_GMG)) == SVf_NOK)
993#define SvNIOK_nog(sv) (SvNIOK(sv) && !(SvFLAGS(sv) & SVs_GMG))
994
995#define SvPOK_nogthink(sv) ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST|SVs_GMG)) == SVf_POK)
996#define SvIOK_nogthink(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_THINKFIRST|SVs_GMG)) == SVf_IOK)
997#define SvUOK_nogthink(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV|SVf_THINKFIRST|SVs_GMG)) == (SVf_IOK|SVf_IVisUV))
998#define SvNOK_nogthink(sv) ((SvFLAGS(sv) & (SVf_NOK|SVf_THINKFIRST|SVs_GMG)) == SVf_NOK)
999#define SvNIOK_nogthink(sv) (SvNIOK(sv) && !(SvFLAGS(sv) & (SVf_THINKFIRST|SVs_GMG)))
1000
1001#define SvPOK_utf8_nog(sv) ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVs_GMG)) == (SVf_POK|SVf_UTF8))
1002#define SvPOK_utf8_nogthink(sv) ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVf_THINKFIRST|SVs_GMG)) == (SVf_POK|SVf_UTF8))
1003
1004#define SvPOK_byte_nog(sv) ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVs_GMG)) == SVf_POK)
1005#define SvPOK_byte_nogthink(sv) ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVf_THINKFIRST|SVs_GMG)) == SVf_POK)
1006
8bb025ae
CS
1007#define SvPOK_pure_nogthink(sv) \
1008 ((SvFLAGS(sv) & (SVf_POK|SVf_IOK|SVf_NOK|SVf_ROK|SVpgv_GP|SVf_THINKFIRST|SVs_GMG)) == SVf_POK)
1009#define SvPOK_utf8_pure_nogthink(sv) \
1010 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVf_IOK|SVf_NOK|SVf_ROK|SVpgv_GP|SVf_THINKFIRST|SVs_GMG)) == (SVf_POK|SVf_UTF8))
1011#define SvPOK_byte_pure_nogthink(sv) \
1012 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVf_IOK|SVf_NOK|SVf_ROK|SVpgv_GP|SVf_THINKFIRST|SVs_GMG)) == SVf_POK)
1013
d34786ba 1014/*
458b44e7 1015=for apidoc Am|U32|SvGAMAGIC|SV* sv
d34786ba 1016
8554e7a0
FC
1017Returns true if the SV has get magic or
1018overloading. If either is true then
d34786ba 1019the scalar is active data, and has the potential to return a new value every
8554e7a0
FC
1020time it is accessed. Hence you must be careful to
1021only read it once per user logical operation and work
1022with that returned value. If neither is true then
d34786ba
NC
1023the scalar's value cannot change unless written to.
1024
1025=cut
1026*/
1027
dd2eae66 1028#define SvGAMAGIC(sv) (SvGMAGICAL(sv) || SvAMAGIC(sv))
1426bbf4 1029
9299023c 1030#define Gv_AMG(stash) \
d3c7a87b
FC
1031 (HvNAME(stash) && Gv_AMupdate(stash,FALSE) \
1032 ? 1 \
1033 : (HvAMAGIC_off(stash), 0))
a0d0e21e 1034
810b8aa5
GS
1035#define SvWEAKREF(sv) ((SvFLAGS(sv) & (SVf_ROK|SVprv_WEAKREF)) \
1036 == (SVf_ROK|SVprv_WEAKREF))
1037#define SvWEAKREF_on(sv) (SvFLAGS(sv) |= (SVf_ROK|SVprv_WEAKREF))
1038#define SvWEAKREF_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVprv_WEAKREF))
1039
1ccdb730
NC
1040#define SvPCS_IMPORTED(sv) ((SvFLAGS(sv) & (SVf_ROK|SVprv_PCS_IMPORTED)) \
1041 == (SVf_ROK|SVprv_PCS_IMPORTED))
1042#define SvPCS_IMPORTED_on(sv) (SvFLAGS(sv) |= (SVf_ROK|SVprv_PCS_IMPORTED))
1043#define SvPCS_IMPORTED_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVprv_PCS_IMPORTED))
1044
a11eaecb
FC
1045/*
1046=for apidoc m|U32|SvTHINKFIRST|SV *sv
1047
796b6530
KW
1048A quick flag check to see whether an C<sv> should be passed to C<sv_force_normal>
1049to be "downgraded" before C<SvIVX> or C<SvPVX> can be modified directly.
a11eaecb 1050
796b6530
KW
1051For example, if your scalar is a reference and you want to modify the C<SvIVX>
1052slot, you can't just do C<SvROK_off>, as that will leak the referent.
a11eaecb
FC
1053
1054This is used internally by various sv-modifying functions, such as
ef058b33 1055C<sv_setsv>, C<sv_setiv> and C<sv_pvn_force>.
a11eaecb
FC
1056
1057One case that this does not handle is a gv without SvFAKE set. After
1058
1059 if (SvTHINKFIRST(gv)) sv_force_normal(gv);
1060
1061it will still be a gv.
1062
796b6530
KW
1063C<SvTHINKFIRST> sometimes produces false positives. In those cases
1064C<sv_force_normal> does nothing.
a11eaecb
FC
1065
1066=cut
1067*/
1068
a0d0e21e 1069#define SvTHINKFIRST(sv) (SvFLAGS(sv) & SVf_THINKFIRST)
ed6116ce 1070
c0683843
FC
1071#define SVs_PADMY 0
1072#define SvPADMY(sv) !(SvFLAGS(sv) & SVs_PADTMP)
145bf8ee
FC
1073#ifndef PERL_CORE
1074# define SvPADMY_on(sv) SvPADTMP_off(sv)
1075#endif
d9d18af6 1076
c0683843
FC
1077#define SvPADTMP(sv) (SvFLAGS(sv) & (SVs_PADTMP))
1078#define SvPADSTALE(sv) (SvFLAGS(sv) & (SVs_PADSTALE))
62bb6514 1079
145bf8ee
FC
1080#define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP)
1081#define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP)
541377b1
FC
1082#define SvPADSTALE_on(sv) S_SvPADSTALE_on(MUTABLE_SV(sv))
1083#define SvPADSTALE_off(sv) S_SvPADSTALE_off(MUTABLE_SV(sv))
ed6116ce 1084
8990e307
LW
1085#define SvTEMP(sv) (SvFLAGS(sv) & SVs_TEMP)
1086#define SvTEMP_on(sv) (SvFLAGS(sv) |= SVs_TEMP)
1087#define SvTEMP_off(sv) (SvFLAGS(sv) &= ~SVs_TEMP)
79072805 1088
8990e307
LW
1089#define SvOBJECT(sv) (SvFLAGS(sv) & SVs_OBJECT)
1090#define SvOBJECT_on(sv) (SvFLAGS(sv) |= SVs_OBJECT)
1091#define SvOBJECT_off(sv) (SvFLAGS(sv) &= ~SVs_OBJECT)
79072805 1092
cb198164
YO
1093/*
1094=for apidoc Am|U32|SvREADONLY|SV* sv
1095Returns true if the argument is readonly, otherwise returns false.
1096Exposed to to perl code via Internals::SvREADONLY().
1097
1098=for apidoc Am|U32|SvREADONLY_on|SV* sv
1099Mark an object as readonly. Exactly what this means depends on the object
1100type. Exposed to perl code via Internals::SvREADONLY().
1101
1102=for apidoc Am|U32|SvREADONLY_off|SV* sv
1103Mark an object as not-readonly. Exactly what this mean depends on the
1104object type. Exposed to perl code via Internals::SvREADONLY().
1105
1106=cut
1107*/
1108
a623f893
FC
1109#define SvREADONLY(sv) (SvFLAGS(sv) & (SVf_READONLY|SVf_PROTECT))
1110#ifdef PERL_CORE
1111# define SvREADONLY_on(sv) (SvFLAGS(sv) |= (SVf_READONLY|SVf_PROTECT))
1112# define SvREADONLY_off(sv) (SvFLAGS(sv) &=~(SVf_READONLY|SVf_PROTECT))
1113#else
1114# define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)
1115# define SvREADONLY_off(sv) (SvFLAGS(sv) &= ~SVf_READONLY)
1116#endif
79072805 1117
180488f8 1118#define SvSCREAM(sv) ((SvFLAGS(sv) & (SVp_SCREAM|SVp_POK)) == (SVp_SCREAM|SVp_POK))
8990e307
LW
1119#define SvSCREAM_on(sv) (SvFLAGS(sv) |= SVp_SCREAM)
1120#define SvSCREAM_off(sv) (SvFLAGS(sv) &= ~SVp_SCREAM)
79072805 1121
74e0ddf7
NC
1122#ifndef PERL_CORE
1123# define SvCOMPILED(sv) 0
1124# define SvCOMPILED_on(sv)
1125# define SvCOMPILED_off(sv)
1126#endif
79072805 1127
25da4f38
IZ
1128#define SvEVALED(sv) (SvFLAGS(sv) & SVrepl_EVAL)
1129#define SvEVALED_on(sv) (SvFLAGS(sv) |= SVrepl_EVAL)
1130#define SvEVALED_off(sv) (SvFLAGS(sv) &= ~SVrepl_EVAL)
1131
85efc3a5 1132#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
e9726144 1133# define SvVALID(sv) ({ const SV *const _svvalid = (const SV*)(sv); \
654c0d3f 1134 if (SvFLAGS(_svvalid) & SVpbm_VALID && !SvSCREAM(_svvalid)) \
e5ae200f
RU
1135 assert(!isGV_with_GP(_svvalid)); \
1136 (SvFLAGS(_svvalid) & SVpbm_VALID); \
85ffbbb0 1137 })
b1bc3f34 1138# define SvVALID_on(sv) ({ SV *const _svvalid = MUTABLE_SV(sv); \
e5ae200f 1139 assert(!isGV_with_GP(_svvalid)); \
654c0d3f 1140 assert(!SvSCREAM(_svvalid)); \
e5ae200f 1141 (SvFLAGS(_svvalid) |= SVpbm_VALID); \
85ffbbb0 1142 })
b1bc3f34 1143# define SvVALID_off(sv) ({ SV *const _svvalid = MUTABLE_SV(sv); \
e5ae200f 1144 assert(!isGV_with_GP(_svvalid)); \
654c0d3f 1145 assert(!SvSCREAM(_svvalid)); \
e5ae200f 1146 (SvFLAGS(_svvalid) &= ~SVpbm_VALID); \
85ffbbb0
NC
1147 })
1148
e9726144 1149# define SvTAIL(sv) ({ const SV *const _svtail = (const SV *)(sv); \
654c0d3f
RU
1150 assert(SvTYPE(_svtail) != SVt_PVAV); \
1151 assert(SvTYPE(_svtail) != SVt_PVHV); \
1152 assert(!SvSCREAM(_svtail)); \
78d0cf80
NC
1153 (SvFLAGS(sv) & (SVpbm_TAIL|SVpbm_VALID)) \
1154 == (SVpbm_TAIL|SVpbm_VALID); \
85efc3a5
NC
1155 })
1156#else
654c0d3f 1157# define SvVALID(sv) ((SvFLAGS(sv) & SVpbm_VALID) && !SvSCREAM(sv))
85ffbbb0
NC
1158# define SvVALID_on(sv) (SvFLAGS(sv) |= SVpbm_VALID)
1159# define SvVALID_off(sv) (SvFLAGS(sv) &= ~SVpbm_VALID)
78d0cf80 1160# define SvTAIL(sv) ((SvFLAGS(sv) & (SVpbm_TAIL|SVpbm_VALID)) \
fe901688 1161 == (SVpbm_TAIL|SVpbm_VALID))
78d0cf80 1162
85efc3a5 1163#endif
8990e307
LW
1164#define SvTAIL_on(sv) (SvFLAGS(sv) |= SVpbm_TAIL)
1165#define SvTAIL_off(sv) (SvFLAGS(sv) &= ~SVpbm_TAIL)
1166
ed6116ce
LW
1167#define SvRVx(sv) SvRV(sv)
1168
f599b64b 1169#ifdef PERL_DEBUG_COW
8ed30cc1
DD
1170/* Need -0.0 for SvNVX to preserve IEEE FP "negative zero" because
1171 +0.0 + -0.0 => +0.0 but -0.0 + -0.0 => -0.0 */
771ba71a
NC
1172# define SvIVX(sv) (0 + ((XPVIV*) SvANY(sv))->xiv_iv)
1173# define SvUVX(sv) (0 + ((XPVUV*) SvANY(sv))->xuv_uv)
58430790 1174# define SvNVX(sv) (-0.0 + ((XPVNV*) SvANY(sv))->xnv_u.xnv_nv)
ac09da3b 1175# define SvRV(sv) (0 + (sv)->sv_u.svu_rv)
f19a12a3 1176# define SvRV_const(sv) (0 + (sv)->sv_u.svu_rv)
c0e1089a 1177/* Don't test the core XS code yet. */
771ba71a 1178# if defined (PERL_CORE) && PERL_DEBUG_COW > 1
c7724415 1179# define SvPVX(sv) (0 + (assert_(!SvREADONLY(sv)) (sv)->sv_u.svu_pv))
771ba71a
NC
1180# else
1181# define SvPVX(sv) SvPVX_mutable(sv)
1182# endif
771ba71a
NC
1183# define SvCUR(sv) (0 + ((XPV*) SvANY(sv))->xpv_cur)
1184# define SvLEN(sv) (0 + ((XPV*) SvANY(sv))->xpv_len)
1185# define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur)
1186
c7724415
FC
1187# define SvMAGIC(sv) (0 + *(assert_(SvTYPE(sv) >= SVt_PVMG) &((XPVMG*) SvANY(sv))->xmg_u.xmg_magic))
1188# define SvSTASH(sv) (0 + *(assert_(SvTYPE(sv) >= SVt_PVMG) &((XPVMG*) SvANY(sv))->xmg_stash))
f599b64b 1189#else
771ba71a
NC
1190# define SvLEN(sv) ((XPV*) SvANY(sv))->xpv_len
1191# define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur)
1192
05ef5f8f
NC
1193# if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
1194/* These get expanded inside other macros that already use a variable _sv */
f7877b28 1195# define SvPVX(sv) \
d2c6dc5e 1196 (*({ SV *const _svpvx = MUTABLE_SV(sv); \
f1fb8741 1197 assert(PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]); \
e5ae200f 1198 assert(!isGV_with_GP(_svpvx)); \
5bb89d25
NC
1199 assert(!(SvTYPE(_svpvx) == SVt_PVIO \
1200 && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))); \
e5ae200f 1201 &((_svpvx)->sv_u.svu_pv); \
f7877b28 1202 }))
08002bbf 1203# define SvCUR(sv) \
b1bc3f34 1204 (*({ const SV *const _svcur = (const SV *)(sv); \
8d919b0a
FC
1205 assert(PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK] \
1206 || SvTYPE(_svcur) == SVt_REGEXP); \
e5ae200f 1207 assert(!isGV_with_GP(_svcur)); \
6f7e8353
NC
1208 assert(!(SvTYPE(_svcur) == SVt_PVIO \
1209 && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))); \
b1bc3f34 1210 &(((XPV*) MUTABLE_PTR(SvANY(_svcur)))->xpv_cur); \
08002bbf 1211 }))
05ef5f8f 1212# define SvIVX(sv) \
b1bc3f34 1213 (*({ const SV *const _svivx = (const SV *)(sv); \
f1fb8741 1214 assert(PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]); \
e5ae200f 1215 assert(!isGV_with_GP(_svivx)); \
b1bc3f34 1216 &(((XPVIV*) MUTABLE_PTR(SvANY(_svivx)))->xiv_iv); \
05ef5f8f
NC
1217 }))
1218# define SvUVX(sv) \
b1bc3f34 1219 (*({ const SV *const _svuvx = (const SV *)(sv); \
f1fb8741 1220 assert(PL_valid_types_IVX[SvTYPE(_svuvx) & SVt_MASK]); \
e5ae200f 1221 assert(!isGV_with_GP(_svuvx)); \
b1bc3f34 1222 &(((XPVUV*) MUTABLE_PTR(SvANY(_svuvx)))->xuv_uv); \
05ef5f8f
NC
1223 }))
1224# define SvNVX(sv) \
b1bc3f34 1225 (*({ const SV *const _svnvx = (const SV *)(sv); \
f1fb8741 1226 assert(PL_valid_types_NVX[SvTYPE(_svnvx) & SVt_MASK]); \
e5ae200f 1227 assert(!isGV_with_GP(_svnvx)); \
b1bc3f34 1228 &(((XPVNV*) MUTABLE_PTR(SvANY(_svnvx)))->xnv_u.xnv_nv); \
05ef5f8f 1229 }))
ac09da3b 1230# define SvRV(sv) \
f19a12a3 1231 (*({ SV *const _svrv = MUTABLE_SV(sv); \
f1fb8741 1232 assert(PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]); \
e5ae200f 1233 assert(!isGV_with_GP(_svrv)); \
6f7e8353
NC
1234 assert(!(SvTYPE(_svrv) == SVt_PVIO \
1235 && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))); \
e5ae200f 1236 &((_svrv)->sv_u.svu_rv); \
ac09da3b 1237 }))
f19a12a3
MHM
1238# define SvRV_const(sv) \
1239 ({ const SV *const _svrv = (const SV *)(sv); \
f1fb8741 1240 assert(PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]); \
f19a12a3 1241 assert(!isGV_with_GP(_svrv)); \
6f7e8353
NC
1242 assert(!(SvTYPE(_svrv) == SVt_PVIO \
1243 && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))); \
f19a12a3
MHM
1244 (_svrv)->sv_u.svu_rv; \
1245 })
05ef5f8f 1246# define SvMAGIC(sv) \
b1bc3f34 1247 (*({ const SV *const _svmagic = (const SV *)(sv); \
e5ae200f 1248 assert(SvTYPE(_svmagic) >= SVt_PVMG); \
b1bc3f34 1249 &(((XPVMG*) MUTABLE_PTR(SvANY(_svmagic)))->xmg_u.xmg_magic); \
05ef5f8f
NC
1250 }))
1251# define SvSTASH(sv) \
b1bc3f34 1252 (*({ const SV *const _svstash = (const SV *)(sv); \
e5ae200f 1253 assert(SvTYPE(_svstash) >= SVt_PVMG); \
b1bc3f34 1254 &(((XPVMG*) MUTABLE_PTR(SvANY(_svstash)))->xmg_stash); \
05ef5f8f 1255 }))
03687789 1256# else
08002bbf
NC
1257# define SvPVX(sv) ((sv)->sv_u.svu_pv)
1258# define SvCUR(sv) ((XPV*) SvANY(sv))->xpv_cur
05ef5f8f
NC
1259# define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv
1260# define SvUVX(sv) ((XPVUV*) SvANY(sv))->xuv_uv
58430790 1261# define SvNVX(sv) ((XPVNV*) SvANY(sv))->xnv_u.xnv_nv
ac09da3b 1262# define SvRV(sv) ((sv)->sv_u.svu_rv)
f19a12a3 1263# define SvRV_const(sv) (0 + (sv)->sv_u.svu_rv)
e736a858 1264# define SvMAGIC(sv) ((XPVMG*) SvANY(sv))->xmg_u.xmg_magic
771ba71a 1265# define SvSTASH(sv) ((XPVMG*) SvANY(sv))->xmg_stash
03687789 1266# endif
62703e72
NC
1267#endif
1268
06c0cc96 1269#ifndef PERL_POISON
bb496845
SP
1270/* Given that these two are new, there can't be any existing code using them
1271 * as LVALUEs */
06c0cc96
NC
1272# define SvPVX_mutable(sv) (0 + (sv)->sv_u.svu_pv)
1273# define SvPVX_const(sv) ((const char*)(0 + (sv)->sv_u.svu_pv))
1274#else
1275/* Except for the poison code, which uses & to scribble over the pointer after
1276 free() is called. */
1277# define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv)
1278# define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv))
1279#endif
bb496845 1280
62703e72
NC
1281#define SvIVXx(sv) SvIVX(sv)
1282#define SvUVXx(sv) SvUVX(sv)
1283#define SvNVXx(sv) SvNVX(sv)
1284#define SvPVXx(sv) SvPVX(sv)
1285#define SvLENx(sv) SvLEN(sv)
1286#define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv))
1287
1288
28e5dec8
JH
1289/* Ask a scalar nicely to try to become an IV, if possible.
1290 Not guaranteed to stay returning void */
1291/* Macro won't actually call sv_2iv if already IOK */
1292#define SvIV_please(sv) \
3ea8bc93 1293 STMT_START {if (!SvIOKp(sv) && (SvFLAGS(sv) & (SVf_NOK|SVf_POK))) \
28e5dec8 1294 (void) SvIV(sv); } STMT_END
6f1401dc 1295#define SvIV_please_nomg(sv) \
3ea8bc93
DD
1296 (!(SvFLAGS(sv) & (SVf_IOK|SVp_IOK)) && (SvFLAGS(sv) & (SVf_NOK|SVf_POK)) \
1297 ? (sv_2iv_flags(sv, 0), SvIOK(sv)) \
8a68f328 1298 : SvIOK(sv))
79072805 1299#define SvIV_set(sv, val) \
f1fb8741
DM
1300 STMT_START { \
1301 assert(PL_valid_types_IV_set[SvTYPE(sv) & SVt_MASK]); \
08002bbf 1302 assert(!isGV_with_GP(sv)); \
b19bbeda 1303 (((XPVIV*) SvANY(sv))->xiv_iv = (val)); } STMT_END
79072805 1304#define SvNV_set(sv, val) \
f1fb8741
DM
1305 STMT_START { \
1306 assert(PL_valid_types_NV_set[SvTYPE(sv) & SVt_MASK]); \
08002bbf 1307 assert(!isGV_with_GP(sv)); \
58430790 1308 (((XPVNV*)SvANY(sv))->xnv_u.xnv_nv = (val)); } STMT_END
79072805 1309#define SvPV_set(sv, val) \
f1fb8741
DM
1310 STMT_START { \
1311 assert(PL_valid_types_PVX[SvTYPE(sv) & SVt_MASK]); \
08002bbf 1312 assert(!isGV_with_GP(sv)); \
6f7e8353
NC
1313 assert(!(SvTYPE(sv) == SVt_PVIO \
1314 && !(IoFLAGS(sv) & IOf_FAKE_DIRP))); \
339049b0 1315 ((sv)->sv_u.svu_pv = (val)); } STMT_END
607fa7f2 1316#define SvUV_set(sv, val) \
f1fb8741
DM
1317 STMT_START { \
1318 assert(PL_valid_types_IV_set[SvTYPE(sv) & SVt_MASK]); \
08002bbf 1319 assert(!isGV_with_GP(sv)); \
607fa7f2 1320 (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END
b162af07 1321#define SvRV_set(sv, val) \
f1fb8741
DM
1322 STMT_START { \
1323 assert(PL_valid_types_RV[SvTYPE(sv) & SVt_MASK]); \
08002bbf 1324 assert(!isGV_with_GP(sv)); \
6f7e8353
NC
1325 assert(!(SvTYPE(sv) == SVt_PVIO \
1326 && !(IoFLAGS(sv) & IOf_FAKE_DIRP))); \
339049b0 1327 ((sv)->sv_u.svu_rv = (val)); } STMT_END
b162af07
SP
1328#define SvMAGIC_set(sv, val) \
1329 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
e736a858 1330 (((XPVMG*)SvANY(sv))->xmg_u.xmg_magic = (val)); } STMT_END
b162af07
SP
1331#define SvSTASH_set(sv, val) \
1332 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
1333 (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
79072805 1334#define SvCUR_set(sv, val) \
f1fb8741 1335 STMT_START { \
8d919b0a
FC
1336 assert(PL_valid_types_PVX[SvTYPE(sv) & SVt_MASK] \
1337 || SvTYPE(sv) == SVt_REGEXP); \
08002bbf 1338 assert(!isGV_with_GP(sv)); \
6f7e8353
NC
1339 assert(!(SvTYPE(sv) == SVt_PVIO \
1340 && !(IoFLAGS(sv) & IOf_FAKE_DIRP))); \
b162af07 1341 (((XPV*) SvANY(sv))->xpv_cur = (val)); } STMT_END
79072805 1342#define SvLEN_set(sv, val) \
f1fb8741
DM
1343 STMT_START { \
1344 assert(PL_valid_types_PVX[SvTYPE(sv) & SVt_MASK]); \
f7877b28 1345 assert(!isGV_with_GP(sv)); \
6f7e8353
NC
1346 assert(!(SvTYPE(sv) == SVt_PVIO \
1347 && !(IoFLAGS(sv) & IOf_FAKE_DIRP))); \
b162af07 1348 (((XPV*) SvANY(sv))->xpv_len = (val)); } STMT_END
7ae8ee9e
NC
1349#define SvEND_set(sv, val) \
1350 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
3ec35e0f 1351 SvCUR_set(sv, (val) - SvPVX(sv)); } STMT_END
79072805 1352
b7e9a5c2 1353#define SvPV_renew(sv,n) \
1da4ca5f
NC
1354 STMT_START { SvLEN_set(sv, n); \
1355 SvPV_set((sv), (MEM_WRAP_CHECK_(n,char) \
1356 (char*)saferealloc((Malloc_t)SvPVX(sv), \
1357 (MEM_SIZE)((n))))); \
1358 } STMT_END
1359
1360#define SvPV_shrink_to_cur(sv) STMT_START { \
1361 const STRLEN _lEnGtH = SvCUR(sv) + 1; \
1362 SvPV_renew(sv, _lEnGtH); \
1363 } STMT_END
b7e9a5c2 1364
771ba71a
NC
1365#define SvPV_free(sv) \
1366 STMT_START { \
1367 assert(SvTYPE(sv) >= SVt_PV); \
1368 if (SvLEN(sv)) { \
e537ac38 1369 assert(!SvROK(sv)); \
5d9574c1 1370 if(UNLIKELY(SvOOK(sv))) { \
69240efd
NC
1371 STRLEN zok; \
1372 SvOOK_offset(sv, zok); \
1373 SvPV_set(sv, SvPVX_mutable(sv) - zok); \
771ba71a
NC
1374 SvFLAGS(sv) &= ~SVf_OOK; \
1375 } \
1376 Safefree(SvPVX(sv)); \
1377 } \
1378 } STMT_END
8bd4d4c5 1379
43230e26
NC
1380#ifdef PERL_CORE
1381/* Code that crops up in three places to take a scalar and ready it to hold
1382 a reference */
1383# define prepare_SV_for_RV(sv) \
1384 STMT_START { \
1385 if (SvTYPE(sv) < SVt_PV && SvTYPE(sv) != SVt_IV) \
1386 sv_upgrade(sv, SVt_IV); \
662f1f9e 1387 else if (SvTYPE(sv) >= SVt_PV) { \
43230e26
NC
1388 SvPV_free(sv); \
1389 SvLEN_set(sv, 0); \
1390 SvCUR_set(sv, 0); \
1391 } \
1392 } STMT_END
1393#endif
373b357f 1394
cffe132d
NC
1395#ifndef PERL_CORE
1396# define BmFLAGS(sv) (SvTAIL(sv) ? FBMcf_TAIL : 0)
1397#endif
6976cee3 1398
60c8298a 1399#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
60c8298a 1400# define BmUSEFUL(sv) \
b1bc3f34 1401 (*({ SV *const _bmuseful = MUTABLE_SV(sv); \
408dc2ec 1402 assert(SvTYPE(_bmuseful) >= SVt_PVIV); \
e5ae200f 1403 assert(SvVALID(_bmuseful)); \
408dc2ec
NC
1404 assert(!SvIOK(_bmuseful)); \
1405 &(((XPVIV*) SvANY(_bmuseful))->xiv_u.xivu_iv); \
8eeaf79a 1406 }))
60c8298a 1407#else
50c7be83 1408# define BmUSEFUL(sv) ((XPVIV*) SvANY(sv))->xiv_u.xivu_iv
b4f6c04b 1409
60c8298a 1410#endif
79072805 1411
8922e438
FC
1412#ifndef PERL_CORE
1413# define BmRARE(sv) 0
1414# define BmPREVIOUS(sv) 0
1415#endif
1416
f2da823f 1417#define FmLINES(sv) ((XPVIV*) SvANY(sv))->xiv_iv
79072805
LW
1418
1419#define LvTYPE(sv) ((XPVLV*) SvANY(sv))->xlv_type
1420#define LvTARG(sv) ((XPVLV*) SvANY(sv))->xlv_targ
1421#define LvTARGOFF(sv) ((XPVLV*) SvANY(sv))->xlv_targoff
bbfdc870 1422#define LvSTARGOFF(sv) ((XPVLV*) SvANY(sv))->xlv_targoff_u.xlvu_stargoff
79072805 1423#define LvTARGLEN(sv) ((XPVLV*) SvANY(sv))->xlv_targlen
83f78d1a 1424#define LvFLAGS(sv) ((XPVLV*) SvANY(sv))->xlv_flags
79072805 1425
6f7e8353 1426#define IoIFP(sv) (sv)->sv_u.svu_fp
8990e307
LW
1427#define IoOFP(sv) ((XPVIO*) SvANY(sv))->xio_ofp
1428#define IoDIRP(sv) ((XPVIO*) SvANY(sv))->xio_dirp
4755096e 1429#define IoANY(sv) ((XPVIO*) SvANY(sv))->xio_any
c490b21c 1430#define IoLINES(sv) ((XPVIO*) SvANY(sv))->xiv_u.xivu_iv
8990e307
LW
1431#define IoPAGE(sv) ((XPVIO*) SvANY(sv))->xio_page
1432#define IoPAGE_LEN(sv) ((XPVIO*) SvANY(sv))->xio_page_len
1433#define IoLINES_LEFT(sv)((XPVIO*) SvANY(sv))->xio_lines_left
1434#define IoTOP_NAME(sv) ((XPVIO*) SvANY(sv))->xio_top_name
1435#define IoTOP_GV(sv) ((XPVIO*) SvANY(sv))->xio_top_gv
1436#define IoFMT_NAME(sv) ((XPVIO*) SvANY(sv))->xio_fmt_name
1437#define IoFMT_GV(sv) ((XPVIO*) SvANY(sv))->xio_fmt_gv
1438#define IoBOTTOM_NAME(sv)((XPVIO*) SvANY(sv))->xio_bottom_name
1439#define IoBOTTOM_GV(sv) ((XPVIO*) SvANY(sv))->xio_bottom_gv
8990e307
LW
1440#define IoTYPE(sv) ((XPVIO*) SvANY(sv))->xio_type
1441#define IoFLAGS(sv) ((XPVIO*) SvANY(sv))->xio_flags
1442
50952442 1443/* IoTYPE(sv) is a single character telling the type of I/O connection. */
3b6c1aba
JH
1444#define IoTYPE_RDONLY '<'
1445#define IoTYPE_WRONLY '>'
1446#define IoTYPE_RDWR '+'
1447#define IoTYPE_APPEND 'a'
1448#define IoTYPE_PIPE '|'
1449#define IoTYPE_STD '-' /* stdin or stdout */
1450#define IoTYPE_SOCKET 's'
1451#define IoTYPE_CLOSED ' '
1452#define IoTYPE_IMPLICIT 'I' /* stdin or stdout or stderr */
1453#define IoTYPE_NUMERIC '#' /* fdopen */
03fcf2fc
GS
1454
1455/*
954c1994 1456=for apidoc Am|bool|SvTAINTED|SV* sv
8554e7a0 1457Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
954c1994
GS
1458not.
1459
1460=for apidoc Am|void|SvTAINTED_on|SV* sv
c55831ac 1461Marks an SV as tainted if tainting is enabled.
954c1994
GS
1462
1463=for apidoc Am|void|SvTAINTED_off|SV* sv
8554e7a0
FC
1464Untaints an SV. Be I<very> careful with this routine, as it short-circuits
1465some of Perl's fundamental security features. XS module authors should not
954c1994 1466use this function unless they fully understand all the implications of
72d33970 1467unconditionally untainting the value. Untainting should be done in the
954c1994
GS
1468standard perl fashion, via a carefully crafted regexp, rather than directly
1469untainting variables.
1470
1471=for apidoc Am|void|SvTAINT|SV* sv
c98cdb04
FC
1472Taints an SV if tainting is enabled, and if some input to the current
1473expression is tainted--usually a variable, but possibly also implicit
1474inputs such as locale settings. C<SvTAINT> propagates that taintedness to
1475the outputs of an expression in a pessimistic fashion; i.e., without paying
1476attention to precisely which outputs are influenced by which inputs.
954c1994
GS
1477
1478=cut
1479*/
1480
a0714e2c 1481#define sv_taint(sv) sv_magic((sv), NULL, PERL_MAGIC_taint, NULL, 0)
aae9cea0 1482
dc6d7f5c 1483#ifdef NO_TAINT_SUPPORT
284167a5
S
1484# define SvTAINTED(sv) 0
1485#else
1486# define SvTAINTED(sv) (SvMAGICAL(sv) && sv_tainted(sv))
1487#endif
5d9574c1
DM
1488#define SvTAINTED_on(sv) STMT_START{ if(UNLIKELY(TAINTING_get)){sv_taint(sv);} }STMT_END
1489#define SvTAINTED_off(sv) STMT_START{ if(UNLIKELY(TAINTING_get)){sv_untaint(sv);} }STMT_END
bbce6d69 1490
c6ee37c5
MB
1491#define SvTAINT(sv) \
1492 STMT_START { \
d48c660d
DM
1493 assert(TAINTING_get || !TAINT_get); \
1494 if (UNLIKELY(TAINT_get)) \
1495 SvTAINTED_on(sv); \
c6ee37c5 1496 } STMT_END
79072805 1497
954c1994
GS
1498/*
1499=for apidoc Am|char*|SvPV_force|SV* sv|STRLEN len
8bb025ae 1500Like C<SvPV> but will force the SV into containing a string (C<SvPOK>), and
fd142383 1501only a string (C<SvPOK_only>), by hook or by crook. You need force if you are
8bb025ae 1502going to update the C<SvPVX> directly. Processes get magic.
954c1994 1503
fd142383 1504Note that coercing an arbitrary scalar into a plain PV will potentially
72d33970 1505strip useful data from it. For example if the SV was C<SvROK>, then the
fd142383
DM
1506referent will have its reference count decremented, and the SV itself may
1507be converted to an C<SvPOK> scalar with a string buffer containing a value
1508such as C<"ARRAY(0x1234)">.
1509
645c22ef 1510=for apidoc Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
fd142383 1511Like C<SvPV_force>, but doesn't process get magic.
645c22ef 1512
954c1994 1513=for apidoc Am|char*|SvPV|SV* sv|STRLEN len
5f08bad4
ST
1514Returns a pointer to the string in the SV, or a stringified form of
1515the SV if the SV does not contain a string. The SV may cache the
cfe3322a
DG
1516stringified version becoming C<SvPOK>. Handles 'get' magic. The
1517C<len> variable will be set to the length of the string (this is a macro, so
fbe13c60 1518don't use C<&len>). See also C<L</SvPVx>> for a version which guarantees to
796b6530 1519evaluate C<sv> only once.
645c22ef 1520
fd142383 1521Note that there is no guarantee that the return value of C<SvPV()> is
fe02ddb7 1522equal to C<SvPVX(sv)>, or that C<SvPVX(sv)> contains valid data, or that
c07def6d 1523successive calls to C<SvPV(sv)> will return the same pointer value each
72d33970 1524time. This is due to the way that things like overloading and
fe02ddb7 1525Copy-On-Write are handled. In these cases, the return value may point to
796b6530 1526a temporary buffer or similar. If you absolutely need the C<SvPVX> field to
fe02ddb7 1527be valid (for example, if you intend to write to it), then see
fbe13c60 1528C<L</SvPV_force>>.
fd142383 1529
645c22ef 1530=for apidoc Am|char*|SvPVx|SV* sv|STRLEN len
4ea561bc
NC
1531A version of C<SvPV> which guarantees to evaluate C<sv> only once.
1532Only use this if C<sv> is an expression with side effects, otherwise use the
b3adf4c0 1533more efficient C<SvPV>.
954c1994 1534
891f9566
YST
1535=for apidoc Am|char*|SvPV_nomg|SV* sv|STRLEN len
1536Like C<SvPV> but doesn't process magic.
1537
954c1994 1538=for apidoc Am|char*|SvPV_nolen|SV* sv
fd142383 1539Like C<SvPV> but doesn't set a length variable.
954c1994 1540
71eb6d8c
TC
1541=for apidoc Am|char*|SvPV_nomg_nolen|SV* sv
1542Like C<SvPV_nolen> but doesn't process magic.
1543
954c1994 1544=for apidoc Am|IV|SvIV|SV* sv
fbe13c60 1545Coerces the given SV to an integer and returns it. See C<L</SvIVx>> for a
796b6530 1546version which guarantees to evaluate C<sv> only once.
645c22ef 1547
891f9566
YST
1548=for apidoc Am|IV|SvIV_nomg|SV* sv
1549Like C<SvIV> but doesn't process magic.
1550
645c22ef 1551=for apidoc Am|IV|SvIVx|SV* sv
8554e7a0
FC
1552Coerces the given SV to an integer and returns it.
1553Guarantees to evaluate C<sv> only once. Only use
1554this if C<sv> is an expression with side effects,
4ea561bc 1555otherwise use the more efficient C<SvIV>.
954c1994
GS
1556
1557=for apidoc Am|NV|SvNV|SV* sv
fbe13c60 1558Coerce the given SV to a double and return it. See C<L</SvNVx>> for a version
796b6530 1559which guarantees to evaluate C<sv> only once.
645c22ef 1560
6f1401dc
DM
1561=for apidoc Am|NV|SvNV_nomg|SV* sv
1562Like C<SvNV> but doesn't process magic.
1563
645c22ef 1564=for apidoc Am|NV|SvNVx|SV* sv
8554e7a0
FC
1565Coerces the given SV to a double and returns it.
1566Guarantees to evaluate C<sv> only once. Only use
1567this if C<sv> is an expression with side effects,
4ea561bc 1568otherwise use the more efficient C<SvNV>.
954c1994
GS
1569
1570=for apidoc Am|UV|SvUV|SV* sv
fbe13c60 1571Coerces the given SV to an unsigned integer and returns it. See C<L</SvUVx>>
796b6530 1572for a version which guarantees to evaluate C<sv> only once.
645c22ef 1573
891f9566
YST
1574=for apidoc Am|UV|SvUV_nomg|SV* sv
1575Like C<SvUV> but doesn't process magic.
1576
645c22ef 1577=for apidoc Am|UV|SvUVx|SV* sv
8554e7a0 1578Coerces the given SV to an unsigned integer and
feba1f01 1579returns it. Guarantees to evaluate C<sv> only once. Only
8554e7a0 1580use this if C<sv> is an expression with side effects,
4ea561bc 1581otherwise use the more efficient C<SvUV>.
954c1994
GS
1582
1583=for apidoc Am|bool|SvTRUE|SV* sv
1584Returns a boolean indicating whether Perl would evaluate the SV as true or
796b6530
KW
1585false. See C<L</SvOK>> for a defined/undefined test. Handles 'get' magic
1586unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
06c841cf
FC
1587private flags).
1588
1589=for apidoc Am|bool|SvTRUE_nomg|SV* sv
1590Returns a boolean indicating whether Perl would evaluate the SV as true or
796b6530 1591false. See C<L</SvOK>> for a defined/undefined test. Does not handle 'get' magic.
954c1994 1592
645c22ef 1593=for apidoc Am|char*|SvPVutf8_force|SV* sv|STRLEN len
4a4088c4 1594Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
645c22ef
DM
1595
1596=for apidoc Am|char*|SvPVutf8|SV* sv|STRLEN len
4a4088c4 1597Like C<SvPV>, but converts C<sv> to UTF-8 first if necessary.
645c22ef 1598
b70b15d2 1599=for apidoc Am|char*|SvPVutf8_nolen|SV* sv
4a4088c4 1600Like C<SvPV_nolen>, but converts C<sv> to UTF-8 first if necessary.
645c22ef
DM
1601
1602=for apidoc Am|char*|SvPVbyte_force|SV* sv|STRLEN len
796b6530 1603Like C<SvPV_force>, but converts C<sv> to byte representation first if necessary.
645c22ef
DM
1604
1605=for apidoc Am|char*|SvPVbyte|SV* sv|STRLEN len
796b6530 1606Like C<SvPV>, but converts C<sv> to byte representation first if necessary.
645c22ef 1607
b70b15d2 1608=for apidoc Am|char*|SvPVbyte_nolen|SV* sv
796b6530 1609Like C<SvPV_nolen>, but converts C<sv> to byte representation first if necessary.
645c22ef
DM
1610
1611=for apidoc Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
4a4088c4 1612Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
796b6530 1613Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVutf8_force>
645c22ef
DM
1614otherwise.
1615
1616=for apidoc Am|char*|SvPVutf8x|SV* sv|STRLEN len
4a4088c4 1617Like C<SvPV>, but converts C<sv> to UTF-8 first if necessary.
796b6530 1618Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVutf8>
645c22ef
DM
1619otherwise.
1620
1621=for apidoc Am|char*|SvPVbytex_force|SV* sv|STRLEN len
796b6530
KW
1622Like C<SvPV_force>, but converts C<sv> to byte representation first if necessary.
1623Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte_force>
645c22ef
DM
1624otherwise.
1625
1626=for apidoc Am|char*|SvPVbytex|SV* sv|STRLEN len
796b6530
KW
1627Like C<SvPV>, but converts C<sv> to byte representation first if necessary.
1628Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte>
645c22ef
DM
1629otherwise.
1630
df8dcb28
DD
1631=for apidoc Am|U32|SvIsCOW|SV* sv
1632Returns a U32 value indicating whether the SV is Copy-On-Write (either shared
19dbb8f1 1633hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for
8554e7a0 1634COW).
19dbb8f1
NC
1635
1636=for apidoc Am|bool|SvIsCOW_shared_hash|SV* sv
1637Returns a boolean indicating whether the SV is Copy-On-Write shared hash key
1638scalar.
645c22ef 1639
0f76ff59
MHM
1640=for apidoc Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
1641Like C<sv_catpvn> but doesn't process magic.
1642
9dcc53ea
Z
1643=for apidoc Am|void|sv_catpv_nomg|SV* sv|const char* ptr
1644Like C<sv_catpv> but doesn't process magic.
1645
0f76ff59
MHM
1646=for apidoc Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
1647Like C<sv_setsv> but doesn't process magic.
1648
1649=for apidoc Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
1650Like C<sv_catsv> but doesn't process magic.
1651
dc960812
SP
1652=for apidoc Amdb|STRLEN|sv_utf8_upgrade_nomg|NN SV *sv
1653
796b6530 1654Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
dc960812 1655
954c1994
GS
1656=cut
1657*/
1658
25da4f38 1659/* Let us hope that bitmaps for UV and IV are the same */
4bac9ae4
CS
1660#define SvIV(sv) (SvIOK_nog(sv) ? SvIVX(sv) : sv_2iv(sv))
1661#define SvUV(sv) (SvUOK_nog(sv) ? SvUVX(sv) : sv_2uv(sv))
1662#define SvNV(sv) (SvNOK_nog(sv) ? SvNVX(sv) : sv_2nv(sv))
79072805 1663
891f9566
YST
1664#define SvIV_nomg(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv_flags(sv, 0))
1665#define SvUV_nomg(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
6f1401dc 1666#define SvNV_nomg(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv_flags(sv, 0))
891f9566 1667
baca2b92 1668/* ----*/
8d6d96c1 1669
4bac9ae4
CS
1670#define SvPV(sv, lp) SvPV_flags(sv, lp, SV_GMAGIC)
1671#define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC)
44d22300 1672#define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
8d6d96c1 1673
8d6d96c1 1674#define SvPV_flags(sv, lp, flags) \
4bac9ae4 1675 (SvPOK_nog(sv) \
8d6d96c1 1676 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
32a5c6ec 1677#define SvPV_flags_const(sv, lp, flags) \
4bac9ae4 1678 (SvPOK_nog(sv) \
32a5c6ec 1679 ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
c77ed9ca 1680 (const char*) sv_2pv_flags(sv, &lp, (flags|SV_CONST_RETURN)))
2596d9fe 1681#define SvPV_flags_const_nolen(sv, flags) \
4bac9ae4 1682 (SvPOK_nog(sv) \
2596d9fe 1683 ? SvPVX_const(sv) : \
c77ed9ca 1684 (const char*) sv_2pv_flags(sv, 0, (flags|SV_CONST_RETURN)))
44d22300 1685#define SvPV_flags_mutable(sv, lp, flags) \
4bac9ae4 1686 (SvPOK_nog(sv) \
44d22300 1687 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
c77ed9ca 1688 sv_2pv_flags(sv, &lp, (flags|SV_MUTABLE_RETURN)))
79072805 1689
8d6d96c1 1690#define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
13c5b33c 1691#define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
32a5c6ec 1692#define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
baca2b92 1693
8d6d96c1 1694#define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
2596d9fe 1695#define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
8d6d96c1 1696
8d6d96c1 1697#define SvPV_force_flags(sv, lp, flags) \
8bb025ae 1698 (SvPOK_pure_nogthink(sv) \
4bac9ae4
CS
1699 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
1700
13c5b33c 1701#define SvPV_force_flags_nolen(sv, flags) \
8bb025ae 1702 (SvPOK_pure_nogthink(sv) \
4bac9ae4
CS
1703 ? SvPVX(sv) : sv_pvn_force_flags(sv, 0, flags))
1704
32a5c6ec 1705#define SvPV_force_flags_mutable(sv, lp, flags) \
8bb025ae 1706 (SvPOK_pure_nogthink(sv) \
4bac9ae4 1707 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
32a5c6ec 1708 : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
a0d0e21e 1709
1fa8b10d 1710#define SvPV_nolen(sv) \
4bac9ae4 1711 (SvPOK_nog(sv) \
dafda6d1 1712 ? SvPVX(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC))
70401c6b 1713
0334097d 1714/* "_nomg" in these defines means no mg_get() */
71eb6d8c 1715#define SvPV_nomg_nolen(sv) \
4bac9ae4 1716 (SvPOK_nog(sv) \
71eb6d8c
TC
1717 ? SvPVX(sv) : sv_2pv_flags(sv, 0, 0))
1718
9ce348e8 1719#define SvPV_nolen_const(sv) \
4bac9ae4 1720 (SvPOK_nog(sv) \
9ce348e8
NC
1721 ? SvPVX_const(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC|SV_CONST_RETURN))
1722
baca2b92 1723#define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
9ce348e8 1724#define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
2596d9fe 1725#define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
5bc28da9 1726
baca2b92 1727/* ----*/
70401c6b 1728
5bc28da9 1729#define SvPVutf8(sv, lp) \
4bac9ae4 1730 (SvPOK_utf8_nog(sv) \
5bc28da9 1731 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
70401c6b 1732
5bc28da9 1733#define SvPVutf8_force(sv, lp) \
8bb025ae 1734 (SvPOK_utf8_pure_nogthink(sv) \
5bc28da9
NIS
1735 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
1736
5bc28da9 1737#define SvPVutf8_nolen(sv) \
4bac9ae4 1738 (SvPOK_utf8_nog(sv) \
dafda6d1 1739 ? SvPVX(sv) : sv_2pvutf8(sv, 0))
70401c6b 1740
baca2b92
DM
1741/* ----*/
1742
5bc28da9 1743#define SvPVbyte(sv, lp) \
4bac9ae4 1744 (SvPOK_byte_nog(sv) \
5bc28da9 1745 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
70401c6b 1746
5bc28da9 1747#define SvPVbyte_force(sv, lp) \
8bb025ae 1748 (SvPOK_byte_pure_nogthink(sv) \
a7ec4e2e 1749 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &lp))
5bc28da9 1750
5bc28da9 1751#define SvPVbyte_nolen(sv) \
4bac9ae4 1752 (SvPOK_byte_nog(sv) \
dafda6d1 1753 ? SvPVX(sv) : sv_2pvbyte(sv, 0))
70401c6b 1754
baca2b92
DM
1755
1756/* define FOOx(): idempotent versions of FOO(). If possible, use a local
1757 * var to evaluate the arg once; failing that, use a global if possible;
1758 * failing that, call a function to do the work
1759 */
1760
1761#define SvPVx_force(sv, lp) sv_pvn_force(sv, &lp)
1762#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
1763#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
1764
5d9574c1
DM
1765#define SvTRUE(sv) (LIKELY(sv) && (UNLIKELY(SvGMAGICAL(sv)) ? sv_2bool(sv) : SvTRUE_common(sv, sv_2bool_nomg(sv))))
1766#define SvTRUE_nomg(sv) (LIKELY(sv) && ( SvTRUE_common(sv, sv_2bool_nomg(sv))))
1767#define SvTRUE_NN(sv) (UNLIKELY(SvGMAGICAL(sv)) ? sv_2bool(sv) : SvTRUE_common(sv, sv_2bool_nomg(sv)))
716ae3b0 1768#define SvTRUE_nomg_NN(sv) ( SvTRUE_common(sv, sv_2bool_nomg(sv)))
4bac9ae4
CS
1769#define SvTRUE_common(sv,fallback) ( \
1770 !SvOK(sv) \
1771 ? 0 \
762dbf22
FC
1772 : SvPOK(sv) \
1773 ? SvPVXtrue(sv) \
1774 : (SvFLAGS(sv) & (SVf_IOK|SVf_NOK)) \
1775 ? ( (SvIOK(sv) && SvIVX(sv) != 0) \
659c4b96 1776 || (SvNOK(sv) && SvNVX(sv) != 0.0)) \
4bac9ae4
CS
1777 : (fallback))
1778
5dc8bdac 1779#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
baca2b92 1780
b1bc3f34
NC
1781# define SvIVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvIV(_sv); })
1782# define SvUVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvUV(_sv); })
1783# define SvNVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvNV(_sv); })
3de3296f 1784# define SvPVx(sv, lp) ({SV *_sv = (sv); SvPV(_sv, lp); })
32a5c6ec 1785# define SvPVx_const(sv, lp) ({SV *_sv = (sv); SvPV_const(_sv, lp); })
002e4c74 1786# define SvPVx_nolen(sv) ({SV *_sv = (sv); SvPV_nolen(_sv); })
9ce348e8 1787# define SvPVx_nolen_const(sv) ({SV *_sv = (sv); SvPV_nolen_const(_sv); })
3de3296f
AE
1788# define SvPVutf8x(sv, lp) ({SV *_sv = (sv); SvPVutf8(_sv, lp); })
1789# define SvPVbytex(sv, lp) ({SV *_sv = (sv); SvPVbyte(_sv, lp); })
002e4c74 1790# define SvPVbytex_nolen(sv) ({SV *_sv = (sv); SvPVbyte_nolen(_sv); })
4bac9ae4
CS
1791# define SvTRUEx(sv) ({SV *_sv = (sv); SvTRUE(_sv); })
1792# define SvTRUEx_nomg(sv) ({SV *_sv = (sv); SvTRUE_nomg(_sv); })
baca2b92 1793
a80f87c4 1794#else /* __GNUC__ */
baca2b92 1795
a80f87c4
GS
1796/* These inlined macros use globals, which will require a thread
1797 * declaration in user code, so we avoid them under threads */
1798
3db8f154
MB
1799# define SvIVx(sv) ((PL_Sv = (sv)), SvIV(PL_Sv))
1800# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
1801# define SvNVx(sv) ((PL_Sv = (sv)), SvNV(PL_Sv))
1802# define SvPVx(sv, lp) ((PL_Sv = (sv)), SvPV(PL_Sv, lp))
32a5c6ec 1803# define SvPVx_const(sv, lp) ((PL_Sv = (sv)), SvPV_const(PL_Sv, lp))
002e4c74 1804# define SvPVx_nolen(sv) ((PL_Sv = (sv)), SvPV_nolen(PL_Sv))
5f1478c3 1805# define SvPVx_nolen_const(sv) ((PL_Sv = (sv)), SvPV_nolen_const(PL_Sv))
3db8f154
MB
1806# define SvPVutf8x(sv, lp) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, lp))
1807# define SvPVbytex(sv, lp) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, lp))
002e4c74 1808# define SvPVbytex_nolen(sv) ((PL_Sv = (sv)), SvPVbyte_nolen(PL_Sv))
4bac9ae4
CS
1809# define SvTRUEx(sv) ((PL_Sv = (sv)), SvTRUE(PL_Sv))
1810# define SvTRUEx_nomg(sv) ((PL_Sv = (sv)), SvTRUE_nomg(PL_Sv))
baca2b92
DM
1811#endif /* __GNU__ */
1812
630b72b0
DD
1813#define SvPVXtrue(sv) ( \
1814 ((XPV*)SvANY((sv))) \
1815 && ( \
1816 ((XPV*)SvANY((sv)))->xpv_cur > 1 \
1817 || ( \
1818 ((XPV*)SvANY((sv)))->xpv_cur \
1819 && *(sv)->sv_u.svu_pv != '0' \
1820 ) \
1821 ) \
1822)
1823
e3918bb7
FC
1824#define SvIsCOW(sv) (SvFLAGS(sv) & SVf_IsCOW)
1825#define SvIsCOW_on(sv) (SvFLAGS(sv) |= SVf_IsCOW)
1826#define SvIsCOW_off(sv) (SvFLAGS(sv) &= ~SVf_IsCOW)
46187eeb 1827#define SvIsCOW_shared_hash(sv) (SvIsCOW(sv) && SvLEN(sv) == 0)
baca2b92 1828
bdd68bc3
NC
1829#define SvSHARED_HEK_FROM_PV(pvx) \
1830 ((struct hek*)(pvx - STRUCT_OFFSET(struct hek, hek_key)))
0a356b31 1831#define SvSHARED_HASH(sv) (0 + SvSHARED_HEK_FROM_PV(SvPVX_const(sv))->hek_hash)
c158a4fd 1832
baca2b92
DM
1833/* flag values for sv_*_flags functions */
1834#define SV_IMMEDIATE_UNREF 1
1835#define SV_GMAGIC 2
765f542d 1836#define SV_COW_DROP_PV 4
88632417 1837#define SV_UTF8_NO_ENCODING 8
5fcdf167 1838#define SV_NOSTEAL 16
32a5c6ec
NC
1839#define SV_CONST_RETURN 32
1840#define SV_MUTABLE_RETURN 64
bddd5118 1841#define SV_SMAGIC 128
c1c21316 1842#define SV_HAS_TRAILING_NUL 256
34482cd6 1843#define SV_COW_SHARED_HASH_KEYS 512
cb23d5b1 1844/* This one is only enabled for PERL_OLD_COPY_ON_WRITE */
b7adcee4
FC
1845/* XXX This flag actually enabled for any COW. But it appears not to do
1846 anything. Can we just remove it? Or will it serve some future
1847 purpose. */
cb23d5b1 1848#define SV_COW_OTHER_PVS 1024
9f621bb0
NC
1849/* Make sv_2pv_flags return NULL if something is undefined. */
1850#define SV_UNDEF_RETURNS_NULL 2048
b3ab6785
KW
1851/* Tell sv_utf8_upgrade() to not check to see if an upgrade is really needed.
1852 * This is used when the caller has already determined it is, and avoids
1853 * redundant work */
1854#define SV_FORCE_UTF8_UPGRADE 4096
aee036bb
DM
1855/* if (after resolving magic etc), the SV is found to be overloaded,
1856 * don't call the overload magic, just return as-is */
1857#define SV_SKIP_OVERLOAD 8192
20c88bf7
FC
1858#define SV_CATBYTES 16384
1859#define SV_CATUTF8 32768
34482cd6
NC
1860
1861/* The core is safe for this COW optimisation. XS code on CPAN may not be.
1862 So only default to doing the COW setup if we're in the core.
1863 */
1864#ifdef PERL_CORE
1865# ifndef SV_DO_COW_SVSETSV
cb23d5b1 1866# define SV_DO_COW_SVSETSV SV_COW_SHARED_HASH_KEYS|SV_COW_OTHER_PVS
34482cd6
NC
1867# endif
1868#endif
1869
1870#ifndef SV_DO_COW_SVSETSV
1871# define SV_DO_COW_SVSETSV 0
1872#endif
1873
765f542d 1874
5abc721d
NC
1875#define sv_unref(sv) sv_unref_flags(sv, 0)
1876#define sv_force_normal(sv) sv_force_normal_flags(sv, 0)
47518d95
NC
1877#define sv_usepvn(sv, p, l) sv_usepvn_flags(sv, p, l, 0)
1878#define sv_usepvn_mg(sv, p, l) sv_usepvn_flags(sv, p, l, SV_SMAGIC)
174c73e3 1879
46187eeb
NC
1880/* We are about to replace the SV's current value. So if it's copy on write
1881 we need to normalise it. Use the SV_COW_DROP_PV flag hint to say that
1882 the value is about to get thrown away, so drop the PV rather than go to
1883 the effort of making a read-write copy only for it to get immediately
1884 discarded. */
765f542d
NC
1885
1886#define SV_CHECK_THINKFIRST_COW_DROP(sv) if (SvTHINKFIRST(sv)) \
1887 sv_force_normal_flags(sv, SV_COW_DROP_PV)
46187eeb 1888
93c10d60 1889#ifdef PERL_COPY_ON_WRITE
db2c6cb3
FC
1890# define SvCANCOW(sv) \
1891 (SvIsCOW(sv) \
1892 ? SvLEN(sv) ? CowREFCNT(sv) != SV_COW_REFCNT_MAX : 1 \
1893 : (SvFLAGS(sv) & CAN_COW_MASK) == CAN_COW_FLAGS \
1894 && SvCUR(sv)+1 < SvLEN(sv))
1895 /* Note: To allow 256 COW "copies", a refcnt of 0 means 1. */
1896# define CowREFCNT(sv) (*(U8 *)(SvPVX(sv)+SvLEN(sv)-1))
1897# define SV_COW_REFCNT_MAX ((1 << sizeof(U8)*8) - 1)
f7a8268c 1898# define CAN_COW_MASK (SVf_POK|SVf_ROK|SVp_POK|SVf_FAKE| \
a623f893 1899 SVf_OOK|SVf_BREAK|SVf_READONLY|SVf_PROTECT)
b7adcee4 1900#endif
ed252734 1901
ed252734
NC
1902#define CAN_COW_FLAGS (SVp_POK|SVf_POK)
1903
765f542d
NC
1904#define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) \
1905 sv_force_normal_flags(sv, 0)
1906
1907
baca2b92
DM
1908/* all these 'functions' are now just macros */
1909
1910#define sv_pv(sv) SvPV_nolen(sv)
1911#define sv_pvutf8(sv) SvPVutf8_nolen(sv)
1912#define sv_pvbyte(sv) SvPVbyte_nolen(sv)
1913
1914#define sv_pvn_force_nomg(sv, lp) sv_pvn_force_flags(sv, lp, 0)
b3ab6785 1915#define sv_utf8_upgrade_flags(sv, flags) sv_utf8_upgrade_flags_grow(sv, flags, 0)
baca2b92
DM
1916#define sv_utf8_upgrade_nomg(sv) sv_utf8_upgrade_flags(sv, 0)
1917#define sv_catpvn_nomg(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, 0)
9dcc53ea 1918#define sv_catpv_nomg(dsv, sstr) sv_catpv_flags(dsv, sstr, 0)
34482cd6
NC
1919#define sv_setsv(dsv, ssv) \
1920 sv_setsv_flags(dsv, ssv, SV_GMAGIC|SV_DO_COW_SVSETSV)
1921#define sv_setsv_nomg(dsv, ssv) sv_setsv_flags(dsv, ssv, SV_DO_COW_SVSETSV)
baca2b92
DM
1922#define sv_catsv(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC)
1923#define sv_catsv_nomg(dsv, ssv) sv_catsv_flags(dsv, ssv, 0)
b347df82 1924#define sv_catsv_mg(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC|SV_SMAGIC)
baca2b92 1925#define sv_catpvn(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC)
4bac9ae4
CS
1926#define sv_catpvn_mg(sv, sstr, slen) sv_catpvn_flags(sv, sstr, slen, SV_GMAGIC|SV_SMAGIC);
1927#define sv_copypv(dsv, ssv) sv_copypv_flags(dsv, ssv, SV_GMAGIC)
1928#define sv_copypv_nomg(dsv, ssv) sv_copypv_flags(dsv, ssv, 0)
baca2b92 1929#define sv_2pv(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC)
cb2f1b7b
NC
1930#define sv_2pv_nolen(sv) sv_2pv(sv, 0)
1931#define sv_2pvbyte_nolen(sv) sv_2pvbyte(sv, 0)
1932#define sv_2pvutf8_nolen(sv) sv_2pvutf8(sv, 0)
baca2b92
DM
1933#define sv_2pv_nomg(sv, lp) sv_2pv_flags(sv, lp, 0)
1934#define sv_pvn_force(sv, lp) sv_pvn_force_flags(sv, lp, SV_GMAGIC)
1935#define sv_utf8_upgrade(sv) sv_utf8_upgrade_flags(sv, SV_GMAGIC)
891f9566
YST
1936#define sv_2iv(sv) sv_2iv_flags(sv, SV_GMAGIC)
1937#define sv_2uv(sv) sv_2uv_flags(sv, SV_GMAGIC)
39d5de13 1938#define sv_2nv(sv) sv_2nv_flags(sv, SV_GMAGIC)
078504b2 1939#define sv_eq(sv1, sv2) sv_eq_flags(sv1, sv2, SV_GMAGIC)
e8c9c9d4
NC
1940#define sv_cmp(sv1, sv2) sv_cmp_flags(sv1, sv2, SV_GMAGIC)
1941#define sv_cmp_locale(sv1, sv2) sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC)
078504b2 1942#define sv_collxfrm(sv, nxp) sv_cmp_flags(sv, nxp, SV_GMAGIC)
06c841cf 1943#define sv_2bool(sv) sv_2bool_flags(sv, SV_GMAGIC)
4bac9ae4 1944#define sv_2bool_nomg(sv) sv_2bool_flags(sv, 0)
84335ee9
NC
1945#define sv_insert(bigstr, offset, len, little, littlelen) \
1946 Perl_sv_insert_flags(aTHX_ (bigstr),(offset), (len), (little), \
1947 (littlelen), SV_GMAGIC)
108cb980
FC
1948#define sv_mortalcopy(sv) \
1949 Perl_sv_mortalcopy_flags(aTHX_ sv, SV_GMAGIC|SV_DO_COW_SVSETSV)
f34d8cdd
FC
1950#define sv_cathek(sv,hek) \
1951 STMT_START { \
1952 HEK * const bmxk = hek; \
1953 sv_catpvn_flags(sv, HEK_KEY(bmxk), HEK_LEN(bmxk), \
1954 HEK_UTF8(bmxk) ? SV_CATUTF8 : SV_CATBYTES); \
1955 } STMT_END
baca2b92 1956
db79b45b 1957/* Should be named SvCatPVN_utf8_upgrade? */
4bac9ae4 1958#define sv_catpvn_nomg_utf8_upgrade(dsv, sstr, slen, nsv) \
db79b45b
JH
1959 STMT_START { \
1960 if (!(nsv)) \
ad25789c 1961 nsv = newSVpvn_flags(sstr, slen, SVs_TEMP); \
db79b45b
JH
1962 else \
1963 sv_setpvn(nsv, sstr, slen); \
1964 SvUTF8_off(nsv); \
1965 sv_utf8_upgrade(nsv); \
4bac9ae4 1966 sv_catsv_nomg(dsv, nsv); \
db79b45b 1967 } STMT_END
64534138
FC
1968#define sv_catpvn_nomg_maybeutf8(dsv, sstr, slen, is_utf8) \
1969 sv_catpvn_flags(dsv, sstr, slen, (is_utf8)?SV_CATUTF8:SV_CATBYTES)
79072805 1970
25fdce4a 1971#if defined(PERL_CORE) || defined(PERL_EXT)
aec43834
FC
1972# define sv_or_pv_len_utf8(sv, pv, bytelen) \
1973 (SvGAMAGIC(sv) \
1974 ? utf8_length((U8 *)(pv), (U8 *)(pv)+(bytelen)) \
1975 : sv_len_utf8(sv))
aec43834
FC
1976#endif
1977
954c1994
GS
1978/*
1979=for apidoc Am|SV*|newRV_inc|SV* sv
1980
1981Creates an RV wrapper for an SV. The reference count for the original SV is
1982incremented.
1983
1984=cut
1985*/
1986
5f05dabc 1987#define newRV_inc(sv) newRV(sv)
5f05dabc 1988
796b6530 1989/* the following macros update any magic values this C<sv> is associated with */
79072805 1990
954c1994 1991/*
ccfc67b7
JH
1992=head1 Magical Functions
1993
954c1994 1994=for apidoc Am|void|SvGETMAGIC|SV* sv
f7e029ab
FC
1995Invokes C<mg_get> on an SV if it has 'get' magic. For example, this
1996will call C<FETCH> on a tied variable. This macro evaluates its
954c1994
GS
1997argument more than once.
1998
1999=for apidoc Am|void|SvSETMAGIC|SV* sv
f7e029ab
FC
2000Invokes C<mg_set> on an SV if it has 'set' magic. This is necessary
2001after modifying a scalar, in case it is a magical variable like C<$|>
2002or a tied variable (it calls C<STORE>). This macro evaluates its
954c1994
GS
2003argument more than once.
2004
87ef9da8 2005=for apidoc Am|void|SvSetSV|SV* dsv|SV* ssv
796b6530 2006Calls C<sv_setsv> if C<dsv> is not the same as C<ssv>. May evaluate arguments
f31006c9 2007more than once. Does not handle 'set' magic on the destination SV.
954c1994
GS
2008
2009=for apidoc Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
796b6530
KW
2010Calls a non-destructive version of C<sv_setsv> if C<dsv> is not the same as
2011C<ssv>. May evaluate arguments more than once.
954c1994 2012
87ef9da8 2013=for apidoc Am|void|SvSetMagicSV|SV* dsv|SV* ssv
645c22ef
DM
2014Like C<SvSetSV>, but does any set magic required afterwards.
2015
2016=for apidoc Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
80663158 2017Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
645c22ef 2018
68795e93 2019=for apidoc Am|void|SvSHARE|SV* sv
796b6530 2020Arranges for C<sv> to be shared between threads if a suitable module
68795e93
NIS
2021has been loaded.
2022
2023=for apidoc Am|void|SvLOCK|SV* sv
796b6530 2024Arranges for a mutual exclusion lock to be obtained on C<sv> if a suitable module
68795e93
NIS
2025has been loaded.
2026
2027=for apidoc Am|void|SvUNLOCK|SV* sv
796b6530 2028Releases a mutual exclusion lock on C<sv> if a suitable module
68795e93
NIS
2029has been loaded.
2030
ccfc67b7
JH
2031=head1 SV Manipulation Functions
2032
679ac26e 2033=for apidoc Am|char *|SvGROW|SV* sv|STRLEN len
954c1994
GS
2034Expands the character buffer in the SV so that it has room for the
2035indicated number of bytes (remember to reserve space for an extra trailing
6602b933 2036C<NUL> character). Calls C<sv_grow> to perform the expansion if necessary.
72d33970 2037Returns a pointer to the character
796b6530 2038buffer. SV must be of type >= C<SVt_PV>. One
4b1e7f06 2039alternative is to call C<sv_grow> if you are not sure of the type of SV.
954c1994
GS
2040
2041=cut
2042*/
2043
16c91539
BM
2044#define SvSHARE(sv) PL_sharehook(aTHX_ sv)
2045#define SvLOCK(sv) PL_lockhook(aTHX_ sv)
2046#define SvUNLOCK(sv) PL_unlockhook(aTHX_ sv)
2047#define SvDESTROYABLE(sv) PL_destroyhook(aTHX_ sv)
68795e93 2048
5d9574c1
DM
2049#define SvGETMAGIC(x) ((void)(UNLIKELY(SvGMAGICAL(x)) && mg_get(x)))
2050#define SvSETMAGIC(x) STMT_START { if (UNLIKELY(SvSMAGICAL(x))) mg_set(x); } STMT_END
79072805 2051
54310121 2052#define SvSetSV_and(dst,src,finally) \
189b2af5 2053 STMT_START { \
5d9574c1 2054 if (LIKELY((dst) != (src))) { \
54310121 2055 sv_setsv(dst, src); \
2056 finally; \
189b2af5
GS
2057 } \
2058 } STMT_END
54310121 2059#define SvSetSV_nosteal_and(dst,src,finally) \
189b2af5 2060 STMT_START { \
5d9574c1 2061 if (LIKELY((dst) != (src))) { \
34482cd6 2062 sv_setsv_flags(dst, src, SV_GMAGIC | SV_NOSTEAL | SV_DO_COW_SVSETSV); \
54310121 2063 finally; \
189b2af5
GS
2064 } \
2065 } STMT_END
79072805 2066
54310121 2067#define SvSetSV(dst,src) \
c9d716f7 2068 SvSetSV_and(dst,src,/*nothing*/;)
54310121 2069#define SvSetSV_nosteal(dst,src) \
c9d716f7 2070 SvSetSV_nosteal_and(dst,src,/*nothing*/;)
54310121 2071
2072#define SvSetMagicSV(dst,src) \
4e3a8365 2073 SvSetSV_and(dst,src,SvSETMAGIC(dst))
54310121 2074#define SvSetMagicSV_nosteal(dst,src) \
4e3a8365 2075 SvSetSV_nosteal_and(dst,src,SvSETMAGIC(dst))
54310121 2076
db79b45b 2077
1045810a 2078#if !defined(SKIP_DEBUGGING)
79072805 2079#define SvPEEK(sv) sv_peek(sv)
3967c732
JD
2080#else
2081#define SvPEEK(sv) ""
2082#endif
79072805 2083
3041a168 2084#define SvIMMORTAL(sv) (SvREADONLY(sv) && ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes || (sv)==&PL_sv_no || (sv)==&PL_sv_placeholder))
36477c24 2085
fe54beba
DM
2086#ifdef DEBUGGING
2087 /* exercise the immortal resurrection code in sv_free2() */
2088# define SvREFCNT_IMMORTAL 1000
2089#else
2090# define SvREFCNT_IMMORTAL ((~(U32)0)/2)
2091#endif
2092
567f3b56
TC
2093/*
2094=for apidoc Am|SV *|boolSV|bool b
2095
2096Returns a true SV if C<b> is a true value, or a false SV if C<b> is 0.
2097
fbe13c60 2098See also C<L</PL_sv_yes>> and C<L</PL_sv_no>>.
567f3b56
TC
2099
2100=cut
2101*/
2102
3280af22 2103#define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
54310121 2104
79072805 2105#define isGV(sv) (SvTYPE(sv) == SVt_PVGV)
f7877b28
NC
2106/* If I give every macro argument a different name, then there won't be bugs
2107 where nested macros get confused. Been there, done that. */
2108#define isGV_with_GP(pwadak) \
2e5b91de 2109 (((SvFLAGS(pwadak) & (SVp_POK|SVpgv_GP)) == SVpgv_GP) \
f7877b28 2110 && (SvTYPE(pwadak) == SVt_PVGV || SvTYPE(pwadak) == SVt_PVLV))
2e5b91de 2111#define isGV_with_GP_on(sv) STMT_START { \
70ad9799
SP
2112 assert (SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV); \
2113 assert (!SvPOKp(sv)); \
2114 assert (!SvIOKp(sv)); \
2115 (SvFLAGS(sv) |= SVpgv_GP); \
2e5b91de
NC
2116 } STMT_END
2117#define isGV_with_GP_off(sv) STMT_START { \
70ad9799
SP
2118 assert (SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV); \
2119 assert (!SvPOKp(sv)); \
2120 assert (!SvIOKp(sv)); \
2e5b91de
NC
2121 (SvFLAGS(sv) &= ~SVpgv_GP); \
2122 } STMT_END
8d919b0a
FC
2123#define isREGEXP(sv) \
2124 (SvTYPE(sv) == SVt_REGEXP \
2125 || (SvFLAGS(sv) & (SVTYPEMASK|SVp_POK|SVpgv_GP|SVf_FAKE)) \
2126 == (SVt_PVLV|SVf_FAKE))
2e5b91de 2127
79072805 2128
bba82a09 2129#ifdef PERL_ANY_COW
db2c6cb3 2130# define SvGROW(sv,len) \
6bbd724f 2131 (SvIsCOW(sv) || SvLEN(sv) < (len) ? sv_grow(sv,len) : SvPVX(sv))
db2c6cb3 2132#else
6bbd724f 2133# define SvGROW(sv,len) (SvLEN(sv) < (len) ? sv_grow(sv,len) : SvPVX(sv))
db2c6cb3 2134#endif
6bbd724f
DM
2135#define SvGROW_mutable(sv,len) \
2136 (SvLEN(sv) < (len) ? sv_grow(sv,len) : SvPVX_mutable(sv))
933fea7f 2137#define Sv_Grow sv_grow
3d35f11b 2138
a0739874
DM
2139#define CLONEf_COPY_STACKS 1
2140#define CLONEf_KEEP_PTR_TABLE 2
c43294b8 2141#define CLONEf_CLONE_HOST 4
0405e91e 2142#define CLONEf_JOIN_IN 8
a0739874 2143
8cf8f3d1 2144struct clone_params {
d2d73c3e
AB
2145 AV* stashes;
2146 UV flags;
59b40662 2147 PerlInterpreter *proto_perl;
1db366cc 2148 PerlInterpreter *new_perl;
d08d57ef 2149 AV *unreferenced;
8cf8f3d1 2150};
102d3b8a
NC
2151
2152/*
740cce10
NC
2153=for apidoc Am|SV*|newSVpvn_utf8|NULLOK const char* s|STRLEN len|U32 utf8
2154
30a15352 2155Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
796b6530 2156characters) into it. If C<utf8> is true, calls
740cce10
NC
2157C<SvUTF8_on> on the new SV. Implemented as a wrapper around C<newSVpvn_flags>.
2158
2159=cut
2160*/
2161
2162#define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
2163
2164/*
35e035cc
FC
2165=for apidoc Amx|SV*|newSVpadname|PADNAME *pn
2166
0f94cb1f 2167Creates a new SV containing the pad name.
35e035cc
FC
2168
2169=cut
2170*/
2171
0f94cb1f 2172#define newSVpadname(pn) newSVpvn_utf8(PadnamePV(pn), PadnameLEN(pn), TRUE)
35e035cc
FC
2173
2174/*
69240efd
NC
2175=for apidoc Am|void|SvOOK_offset|NN SV*sv|STRLEN len
2176
796b6530 2177Reads into C<len> the offset from C<SvPVX> back to the true start of the
69240efd 2178allocated buffer, which will be non-zero if C<sv_chop> has been used to
8554e7a0 2179efficiently remove characters from start of the buffer. Implemented as a
2d7f6611
KW
2180macro, which takes the address of C<len>, which must be of type C<STRLEN>.
2181Evaluates C<sv> more than once. Sets C<len> to 0 if C<SvOOK(sv)> is false.
69240efd
NC
2182
2183=cut
2184*/
2185
2186#ifdef DEBUGGING
2187/* Does the bot know something I don't?
218810:28 <@Nicholas> metabatman
218910:28 <+meta> Nicholas: crash
2190*/
2191# define SvOOK_offset(sv, offset) STMT_START { \
2192 assert(sizeof(offset) == sizeof(STRLEN)); \
2193 if (SvOOK(sv)) { \
d845901f
CS
2194 const U8 *_crash = (U8*)SvPVX_const(sv); \
2195 (offset) = *--_crash; \
2196 if (!(offset)) { \
2197 _crash -= sizeof(STRLEN); \
2198 Copy(_crash, (U8 *)&(offset), sizeof(STRLEN), U8); \
69240efd
NC
2199 } \
2200 { \
2201 /* Validate the preceding buffer's sentinels to \
2202 verify that no-one is using it. */ \
d845901f
CS
2203 const U8 *const _bonk = (U8*)SvPVX_const(sv) - (offset);\
2204 while (_crash > _bonk) { \
2205 --_crash; \
2206 assert (*_crash == (U8)PTR2UV(_crash)); \
69240efd
NC
2207 } \
2208 } \
2209 } else { \
d845901f 2210 (offset) = 0; \
69240efd
NC
2211 } \
2212 } STMT_END
2213#else
2214 /* This is the same code, but avoids using any temporary variables: */
2215# define SvOOK_offset(sv, offset) STMT_START { \
2216 assert(sizeof(offset) == sizeof(STRLEN)); \
2217 if (SvOOK(sv)) { \
d845901f
CS
2218 (offset) = ((U8*)SvPVX_const(sv))[-1]; \
2219 if (!(offset)) { \
69240efd 2220 Copy(SvPVX_const(sv) - 1 - sizeof(STRLEN), \
d845901f 2221 (U8*)&(offset), sizeof(STRLEN), U8); \
69240efd
NC
2222 } \
2223 } else { \
d845901f 2224 (offset) = 0; \
69240efd
NC
2225 } \
2226 } STMT_END
2227#endif
85dca89a
NC
2228
2229#define newIO() MUTABLE_IO(newSV_type(SVt_PVIO))
2230
a38ab475
RZ
2231#define SV_CONST(name) \
2232 PL_sv_consts[SV_CONST_##name] \
2233 ? PL_sv_consts[SV_CONST_##name] \
2234 : (PL_sv_consts[SV_CONST_##name] = newSVpv_share(#name, 0))
2235
2236#define SV_CONST_TIESCALAR 0
2237#define SV_CONST_TIEARRAY 1
2238#define SV_CONST_TIEHASH 2
2239#define SV_CONST_TIEHANDLE 3
2240
2241#define SV_CONST_FETCH 4
2242#define SV_CONST_FETCHSIZE 5
2243#define SV_CONST_STORE 6
2244#define SV_CONST_STORESIZE 7
2245#define SV_CONST_EXISTS 8
2246
2247#define SV_CONST_PUSH 9
2248#define SV_CONST_POP 10
2249#define SV_CONST_SHIFT 11
2250#define SV_CONST_UNSHIFT 12
2251#define SV_CONST_SPLICE 13
2252#define SV_CONST_EXTEND 14
2253
2254#define SV_CONST_FIRSTKEY 15
2255#define SV_CONST_NEXTKEY 16
2256#define SV_CONST_SCALAR 17
2257
2258#define SV_CONST_OPEN 18
2259#define SV_CONST_WRITE 19
2260#define SV_CONST_PRINT 20
2261#define SV_CONST_PRINTF 21
2262#define SV_CONST_READ 22
2263#define SV_CONST_READLINE 23
2264#define SV_CONST_GETC 24
2265#define SV_CONST_SEEK 25
2266#define SV_CONST_TELL 26
2267#define SV_CONST_EOF 27
2268#define SV_CONST_BINMODE 28
2269#define SV_CONST_FILENO 29
2270#define SV_CONST_CLOSE 30
2271
2272#define SV_CONST_DELETE 31
2273#define SV_CONST_CLEAR 32
2274#define SV_CONST_UNTIE 33
2275#define SV_CONST_DESTROY 34
2276
2277#define SV_CONSTS_COUNT 35
2278
69240efd 2279/*
82fce3d0
DM
2280 * Bodyless IVs and NVs!
2281 *
2282 * Since 5.9.2, we can avoid allocating a body for SVt_IV-type SVs.
2283 * Since the larger IV-holding variants of SVs store their integer
2284 * values in their respective bodies, the family of SvIV() accessor
2285 * macros would naively have to branch on the SV type to find the
2286 * integer value either in the HEAD or BODY. In order to avoid this
2287 * expensive branch, a clever soul has deployed a great hack:
2288 * We set up the SvANY pointer such that instead of pointing to a
2289 * real body, it points into the memory before the location of the
2290 * head. We compute this pointer such that the location of
2291 * the integer member of the hypothetical body struct happens to
2292 * be the same as the location of the integer member of the bodyless
2293 * SV head. This now means that the SvIV() family of accessors can
2294 * always read from the (hypothetical or real) body via SvANY.
2295 *
2296 * Since the 5.21 dev series, we employ the same trick for NVs
2297 * if the architecture can support it (NVSIZE <= IVSIZE).
2298 */
2299
2300/* The following two macros compute the necessary offsets for the above
2301 * trick and store them in SvANY for SvIV() (and friends) to use. */
2302
2303#ifdef PERL_CORE
2304# define SET_SVANY_FOR_BODYLESS_IV(sv) \
2305 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) \
2306 - STRUCT_OFFSET(XPVIV, xiv_iv))
2307
2308# define SET_SVANY_FOR_BODYLESS_NV(sv) \
2309 SvANY(sv) = (XPVNV*)((char*)&(sv->sv_u.svu_nv) \
2310 - STRUCT_OFFSET(XPVNV, xnv_u.xnv_nv))
2311#endif
2312
2313/*
14d04a33 2314 * ex: set ts=8 sts=4 sw=4 et:
102d3b8a 2315 */