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