This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: [PATCH] Errno doesnt rebuild when things it depends on in Config.pm change
[perl5.git] / sv.h
CommitLineData
a0d0e21e 1/* sv.h
79072805 2 *
4bb101f2 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
acde74e1 4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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
22=for apidoc AmU||SVt_PV
23Pointer type flag for scalars. See C<svtype>.
24
25=for apidoc AmU||SVt_IV
26Integer type flag for scalars. See C<svtype>.
27
28=for apidoc AmU||SVt_NV
29Double type flag for scalars. See C<svtype>.
30
31=for apidoc AmU||SVt_PVMG
32Type flag for blessed scalars. See C<svtype>.
33
34=for apidoc AmU||SVt_PVAV
35Type flag for arrays. See C<svtype>.
36
37=for apidoc AmU||SVt_PVHV
38Type flag for hashes. See C<svtype>.
39
40=for apidoc AmU||SVt_PVCV
41Type flag for code refs. See C<svtype>.
42
43=cut
44*/
45
79072805 46typedef enum {
a0d0e21e
LW
47 SVt_NULL, /* 0 */
48 SVt_IV, /* 1 */
49 SVt_NV, /* 2 */
50 SVt_RV, /* 3 */
cecf5685
NC
51 SVt_BIND, /* 4 */
52 SVt_PV, /* 5 */
53 SVt_PVIV, /* 6 */
54 SVt_PVNV, /* 7 */
55 SVt_PVMG, /* 8 */
56 /* PVBM was here, before BIND replaced it. */
4ce457a6
TP
57 SVt_PVGV, /* 9 */
58 SVt_PVLV, /* 10 */
59 SVt_PVAV, /* 11 */
60 SVt_PVHV, /* 12 */
61 SVt_PVCV, /* 13 */
a0d0e21e 62 SVt_PVFM, /* 14 */
93e68bfb
JC
63 SVt_PVIO, /* 15 */
64 SVt_LAST /* keep last in enum. used to size arrays */
79072805
LW
65} svtype;
66
cecf5685
NC
67#ifndef PERL_CORE
68/* Although Fast Boyer Moore tables are now being stored in PVGVs, for most
69 purposes eternal code wanting to consider PVBM probably needs to think of
70 PVMG instead. */
71# define SVt_PVBM SVt_PVMG
72#endif
73
d2a0f284
JC
74/* There is collusion here with sv_clear - sv_clear exits early for SVt_NULL
75 and SVt_IV, so never reaches the clause at the end that uses
76 sv_type_details->body_size to determine whether to call safefree(). Hence
77 body_size can be set no-zero to record the size of PTEs and HEs, without
78 fear of bogus frees. */
028b03ee 79#ifdef PERL_IN_SV_C
d2a0f284 80#define PTE_SVSLOT SVt_IV
028b03ee 81#endif
6a93a7e5
NC
82#if defined(PERL_IN_HV_C) || defined(PERL_IN_XS_APITEST)
83#define HE_SVSLOT SVt_NULL
84#endif
43e6e717 85
232d1c15
NC
86#define PERL_ARENA_ROOTS_SIZE (SVt_LAST)
87
43e6e717
NC
88/* typedefs to eliminate some typing */
89typedef struct he HE;
90typedef struct hek HEK;
91
79072805
LW
92/* Using C's structural equivalence to help emulate C++ inheritance here... */
93
30153bd2
JC
94/* start with 2 sv-head building blocks */
95#define _SV_HEAD(ptrtype) \
96 ptrtype sv_any; /* pointer to body */ \
97 U32 sv_refcnt; /* how many references to us */ \
98 U32 sv_flags /* what we are */
99
100#define _SV_HEAD_UNION \
101 union { \
102 IV svu_iv; \
103 UV svu_uv; \
104 SV* svu_rv; /* pointer to another SV */ \
105 char* svu_pv; /* pointer to malloced string */ \
106 SV** svu_array; \
107 HE** svu_hash; \
f7877b28 108 GP* svu_gp; \
30153bd2
JC
109 } sv_u
110
111
5e045b90 112struct STRUCT_SV { /* struct sv { */
30153bd2
JC
113 _SV_HEAD(void*);
114 _SV_HEAD_UNION;
fd0854ff
DM
115#ifdef DEBUG_LEAKING_SCALARS
116 unsigned sv_debug_optype:9; /* the type of OP that allocated us */
117 unsigned sv_debug_inpad:1; /* was allocated in a pad for an OP */
118 unsigned sv_debug_cloned:1; /* was cloned for an ithread */
119 unsigned sv_debug_line:16; /* the line where we were allocated */
120 char * sv_debug_file; /* the file where we were allocated */
121#endif
79072805
LW
122};
123
124struct gv {
30153bd2
JC
125 _SV_HEAD(XPVGV*); /* pointer to xpvgv body */
126 _SV_HEAD_UNION;
79072805
LW
127};
128
129struct cv {
30153bd2
JC
130 _SV_HEAD(XPVCV*); /* pointer to xpvcv body */
131 _SV_HEAD_UNION;
79072805
LW
132};
133
134struct av {
0f7b1ae0 135 _SV_HEAD(XPVAV*); /* pointer to xpvav body */
30153bd2 136 _SV_HEAD_UNION;
79072805
LW
137};
138
139struct hv {
30153bd2
JC
140 _SV_HEAD(XPVHV*); /* pointer to xpvhv body */
141 _SV_HEAD_UNION;
8990e307
LW
142};
143
144struct io {
30153bd2
JC
145 _SV_HEAD(XPVIO*); /* pointer to xpvio body */
146 _SV_HEAD_UNION;
79072805
LW
147};
148
30153bd2 149#undef _SV_HEAD
0f7b1ae0 150#undef _SV_HEAD_UNION /* ensure no pollution */
30153bd2 151
954c1994 152/*
ccfc67b7
JH
153=head1 SV Manipulation Functions
154
954c1994
GS
155=for apidoc Am|U32|SvREFCNT|SV* sv
156Returns the value of the object's reference count.
157
158=for apidoc Am|SV*|SvREFCNT_inc|SV* sv
159Increments the reference count of the given SV.
160
b37c2d43
AL
161All of the following SvREFCNT_inc* macros are optimized versions of
162SvREFCNT_inc, and can be replaced with SvREFCNT_inc.
163
164=for apidoc Am|SV*|SvREFCNT_inc_NN|SV* sv
165Same as SvREFCNT_inc, but can only be used if you know I<sv>
166is not NULL. Since we don't have to check the NULLness, it's faster
167and smaller.
168
f2403e57 169=for apidoc Am|void|SvREFCNT_inc_void|SV* sv
b37c2d43
AL
170Same as SvREFCNT_inc, but can only be used if you don't need the
171return value. The macro doesn't need to return a meaningful value.
172
f2403e57 173=for apidoc Am|void|SvREFCNT_inc_void_NN|SV* sv
b37c2d43
AL
174Same as SvREFCNT_inc, but can only be used if you don't need the return
175value, and you know that I<sv> is not NULL. The macro doesn't need
176to return a meaningful value, or check for NULLness, so it's smaller
177and faster.
178
179=for apidoc Am|SV*|SvREFCNT_inc_simple|SV* sv
180Same as SvREFCNT_inc, but can only be used with simple variables, not
181expressions or pointer dereferences. Since we don't have to store a
182temporary value, it's faster.
183
184=for apidoc Am|SV*|SvREFCNT_inc_simple_NN|SV* sv
185Same as SvREFCNT_inc_simple, but can only be used if you know I<sv>
186is not NULL. Since we don't have to check the NULLness, it's faster
187and smaller.
188
f2403e57 189=for apidoc Am|void|SvREFCNT_inc_simple_void|SV* sv
b37c2d43
AL
190Same as SvREFCNT_inc_simple, but can only be used if you don't need the
191return value. The macro doesn't need to return a meaningful value.
192
f2403e57 193=for apidoc Am|void|SvREFCNT_inc_simple_void_NN|SV* sv
e638c624
MHM
194Same as SvREFCNT_inc, but can only be used if you don't need the return
195value, and you know that I<sv> is not NULL. The macro doesn't need
196to return a meaningful value, or check for NULLness, so it's smaller
197and faster.
b37c2d43 198
954c1994
GS
199=for apidoc Am|void|SvREFCNT_dec|SV* sv
200Decrements the reference count of the given SV.
201
202=for apidoc Am|svtype|SvTYPE|SV* sv
203Returns the type of the SV. See C<svtype>.
204
205=for apidoc Am|void|SvUPGRADE|SV* sv|svtype type
206Used to upgrade an SV to a more complex form. Uses C<sv_upgrade> to
207perform the upgrade if necessary. See C<svtype>.
208
209=cut
210*/
211
463ee0b2 212#define SvANY(sv) (sv)->sv_any
79072805 213#define SvFLAGS(sv) (sv)->sv_flags
aeea060c 214#define SvREFCNT(sv) (sv)->sv_refcnt
a863c7d1 215
93189314 216#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
dce16143
MB
217# define SvREFCNT_inc(sv) \
218 ({ \
a3b680e6 219 SV * const _sv = (SV*)(sv); \
3de3296f
AE
220 if (_sv) \
221 (SvREFCNT(_sv))++; \
222 _sv; \
dce16143 223 })
b37c2d43
AL
224# define SvREFCNT_inc_simple(sv) \
225 ({ \
226 if (sv) \
227 (SvREFCNT(sv))++; \
0181a44d 228 (SV *)(sv); \
b37c2d43
AL
229 })
230# define SvREFCNT_inc_NN(sv) \
231 ({ \
232 SV * const _sv = (SV*)(sv); \
233 SvREFCNT(_sv)++; \
234 _sv; \
235 })
236# define SvREFCNT_inc_void(sv) \
237 ({ \
238 SV * const _sv = (SV*)(sv); \
239 if (_sv) \
240 (void)(SvREFCNT(_sv)++); \
241 })
8990e307 242#else
3db8f154 243# define SvREFCNT_inc(sv) \
b37c2d43
AL
244 ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
245# define SvREFCNT_inc_simple(sv) \
246 ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
247# define SvREFCNT_inc_NN(sv) \
248 (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
249# define SvREFCNT_inc_void(sv) \
250 (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
8990e307
LW
251#endif
252
b37c2d43 253/* These guys don't need the curly blocks */
e638c624 254#define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
b37c2d43
AL
255#define SvREFCNT_inc_simple_NN(sv) (++(SvREFCNT(sv)),(SV*)(sv))
256#define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
257#define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
258
8c4d3c90
NC
259#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
260# define SvREFCNT_dec(sv) \
261 ({ \
a3b680e6 262 SV * const _sv = (SV*)(sv); \
3de3296f
AE
263 if (_sv) { \
264 if (SvREFCNT(_sv)) { \
265 if (--(SvREFCNT(_sv)) == 0) \
266 Perl_sv_free2(aTHX_ _sv); \
8c4d3c90 267 } else { \
3de3296f 268 sv_free(_sv); \
8c4d3c90
NC
269 } \
270 } \
271 })
272#else
91f3b821 273#define SvREFCNT_dec(sv) sv_free((SV*)(sv))
8c4d3c90 274#endif
a863c7d1 275
8990e307 276#define SVTYPEMASK 0xff
42d0e0b7 277#define SvTYPE(sv) (svtype)((sv)->sv_flags & SVTYPEMASK)
79072805 278
0565a181
NC
279/* Sadly there are some parts of the core that have pointers to already-freed
280 SV heads, and rely on being able to tell that they are now free. So mark
281 them all by using a consistent macro. */
282#define SvIS_FREED(sv) ((sv)->sv_flags == SVTYPEMASK)
283
63f97190 284#define SvUPGRADE(sv, mt) (SvTYPE(sv) >= (mt) || (sv_upgrade(sv, mt), 1))
79072805 285
3f7ef1d4
NC
286#define SVf_IOK 0x00000100 /* has valid public integer value */
287#define SVf_NOK 0x00000200 /* has valid public numeric value */
288#define SVf_POK 0x00000400 /* has valid public pointer value */
289#define SVf_ROK 0x00000800 /* has a valid reference pointer */
290
291#define SVp_IOK 0x00001000 /* has valid non-public integer value */
292#define SVp_NOK 0x00002000 /* has valid non-public numeric value */
293#define SVp_POK 0x00004000 /* has valid non-public pointer value */
294#define SVp_SCREAM 0x00008000 /* has been studied? */
295#define SVphv_CLONEABLE 0x00008000 /* PVHV (stashes) clone its objects */
296
297#define SVs_PADSTALE 0x00010000 /* lexical has gone out of scope */
298#define SVpad_STATE 0x00010000 /* pad name is a "state" var */
299#define SVs_PADTMP 0x00020000 /* in use as tmp */
300#define SVpad_TYPED 0x00020000 /* pad name is a Typed Lexical */
301#define SVs_PADMY 0x00040000 /* in use a "my" variable */
302#define SVpad_OUR 0x00040000 /* pad name is "our" instead of "my" */
303#define SVs_TEMP 0x00080000 /* string is stealable? */
304#define SVs_OBJECT 0x00100000 /* is "blessed" */
305#define SVs_GMG 0x00200000 /* has magical get method */
306#define SVs_SMG 0x00400000 /* has magical set method */
307#define SVs_RMG 0x00800000 /* has random magical methods */
308
309#define SVf_FAKE 0x01000000 /* 0: glob or lexical is just a copy
310 1: SV head arena wasn't malloc()ed
311 2: in conjunction with SVf_READONLY
312 marks a shared hash key scalar
313 (SvLEN == 0) or a copy on write
314 string (SvLEN != 0) [SvIsCOW(sv)]
315 3: For PVCV, whether CvUNIQUE(cv)
316 refers to an eval or once only
317 [CvEVAL(cv), CvSPECIAL(cv)]
318 4: Whether the regexp pointer is in
319 fact an offset [SvREPADTMP(sv)]
320 5: On a pad name SV, that slot in the
321 frame AV is a REFCNT'ed reference
322 to a lexical from "outside". */
323#define SVphv_REHASH SVf_FAKE /* 6: On a PVHV, hash values are being
324 recalculated */
325#define SVf_OOK 0x02000000 /* has valid offset value. For a PVHV this
326 means that a hv_aux struct is present
327 after the main array */
328#define SVf_BREAK 0x04000000 /* refcnt is artificially low - used by
329 SV's in final arena cleanup */
330#define SVf_READONLY 0x08000000 /* may not be modified */
8990e307 331
a0d0e21e 332
8990e307 333
5bc28da9 334
430eacda 335#define SVf_THINKFIRST (SVf_READONLY|SVf_ROK|SVf_FAKE)
5bc28da9 336
a0d0e21e 337#define SVf_OK (SVf_IOK|SVf_NOK|SVf_POK|SVf_ROK| \
180488f8 338 SVp_IOK|SVp_NOK|SVp_POK|SVp_SCREAM)
a0d0e21e 339
7a77f1af 340#define PRIVSHIFT 4 /* (SVp_?OK >> PRIVSHIFT) == SVf_?OK */
8990e307 341
26a32e18
NC
342#define SVf_AMAGIC 0x10000000 /* has magical overloaded methods */
343#define SVf_UTF8 0x20000000 /* SvPV is UTF-8 encoded */
344/* Ensure this value does not clash with the GV_ADD* flags in gv.h */
345
8990e307
LW
346/* Some private flags. */
347
26a32e18 348/* PVHV */
3f7ef1d4 349#define SVphv_SHAREKEYS 0x20000000 /* PVHV keys live on shared string table */
a72e56b0 350/* PVNV, PVMG, presumably only inside pads */
3f7ef1d4
NC
351#define SVpad_NAME 0x40000000 /* This SV is a name in the PAD, so
352 SVpad_TYPED, SVpad_OUR and SVpad_STATE
353 apply */
26a32e18 354/* PVAV */
3f7ef1d4 355#define SVpav_REAL 0x40000000 /* free old entries */
26a32e18 356/* PVHV */
3f7ef1d4 357#define SVphv_LAZYDEL 0x40000000 /* entry in xhv_eiter must be deleted */
69d97907
NC
358/* This is only set true on a PVGV when it's playing "PVBM", but is tested for
359 on any regular scalar (anything <= PVLV) */
5fe1b2e4 360#define SVpbm_VALID 0x40000000
26a32e18 361/* ??? */
3f7ef1d4 362#define SVrepl_EVAL 0x40000000 /* Replacement part of s///e */
25da4f38 363
26a32e18
NC
364/* IV, PVIV, PVNV, PVMG, PVGV and (I assume) PVLV */
365/* Presumably IVs aren't stored in pads */
3f7ef1d4 366#define SVf_IVisUV 0x80000000 /* use XPVUV instead of XPVIV */
26a32e18 367/* PVAV */
3f7ef1d4 368#define SVpav_REIFY 0x80000000 /* can become real */
26a32e18 369/* PVHV */
3f7ef1d4 370#define SVphv_HASKFLAGS 0x80000000 /* keys have flag byte after hash */
26a32e18 371/* PVFM */
3f7ef1d4 372#define SVpfm_COMPILED 0x80000000 /* FORMLINE is compiled */
cecf5685 373/* PVGV when SVpbm_VALID is true */
5fe1b2e4 374#define SVpbm_TAIL 0x80000000
26a32e18 375/* RV upwards. However, SVf_ROK and SVp_IOK are exclusive */
3f7ef1d4 376#define SVprv_WEAKREF 0x80000000 /* Weak reference */
810b8aa5 377
11ca45c0 378
79072805 379struct xpv {
58430790
NC
380 union {
381 NV xnv_nv; /* numeric value, if any */
382 HV * xgv_stash;
383 } xnv_u;
339049b0 384 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 385 STRLEN xpv_len; /* allocated size */
79072805
LW
386};
387
9f1501b2 388#if 0
59813432 389typedef struct xpv xpv_allocated;
9f1501b2
NC
390#else
391typedef struct {
339049b0 392 STRLEN xpv_cur; /* length of svu_pv as a C string */
9f1501b2
NC
393 STRLEN xpv_len; /* allocated size */
394} xpv_allocated;
395#endif
59813432 396
79072805 397struct xpviv {
58430790
NC
398 union {
399 NV xnv_nv; /* numeric value, if any */
400 HV * xgv_stash;
401 } xnv_u;
339049b0 402 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 403 STRLEN xpv_len; /* allocated size */
311a25d9
NC
404 union {
405 IV xivu_iv; /* integer value or pv offset */
406 UV xivu_uv;
407 void * xivu_p1;
bb172083 408 I32 xivu_i32;
69ecfd12 409 HEK * xivu_namehek;
311a25d9 410 } xiv_u;
79072805
LW
411};
412
311a25d9
NC
413#if 0
414typedef struct xpviv xpviv_allocated;
415#else
416typedef struct {
417 STRLEN xpv_cur; /* length of svu_pv as a C string */
418 STRLEN xpv_len; /* allocated size */
419 union {
420 IV xivu_iv; /* integer value or pv offset */
421 UV xivu_uv;
422 void * xivu_p1;
bb172083 423 I32 xivu_i32;
69ecfd12 424 HEK * xivu_namehek;
311a25d9
NC
425 } xiv_u;
426} xpviv_allocated;
427#endif
428
429#define xiv_iv xiv_u.xivu_iv
430
ff68c719 431struct xpvuv {
58430790
NC
432 union {
433 NV xnv_nv; /* numeric value, if any */
434 HV * xgv_stash;
435 } xnv_u;
339049b0 436 STRLEN xpv_cur; /* length of svu_pv as a C string */
ff68c719 437 STRLEN xpv_len; /* allocated size */
311a25d9
NC
438 union {
439 IV xuvu_iv;
440 UV xuvu_uv; /* unsigned value or pv offset */
441 void * xuvu_p1;
69ecfd12 442 HEK * xivu_namehek;
311a25d9 443 } xuv_u;
ff68c719
PP
444};
445
311a25d9
NC
446#define xuv_uv xuv_u.xuvu_uv
447
79072805 448struct xpvnv {
58430790
NC
449 union {
450 NV xnv_nv; /* numeric value, if any */
451 HV * xgv_stash;
452 } xnv_u;
339049b0 453 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 454 STRLEN xpv_len; /* allocated size */
e4305a63 455 union {
311a25d9
NC
456 IV xivu_iv; /* integer value or pv offset */
457 UV xivu_uv;
458 void * xivu_p1;
bb172083 459 I32 xivu_i32;
69ecfd12 460 HEK * xivu_namehek;
311a25d9 461 } xiv_u;
79072805
LW
462};
463
6ee623d5 464/* These structure must match the beginning of struct xpvhv in hv.h. */
79072805 465struct xpvmg {
58430790
NC
466 union {
467 NV xnv_nv; /* numeric value, if any */
468 HV * xgv_stash;
469 } xnv_u;
339049b0 470 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 471 STRLEN xpv_len; /* allocated size */
e4305a63 472 union {
311a25d9
NC
473 IV xivu_iv; /* integer value or pv offset */
474 UV xivu_uv;
475 void * xivu_p1;
bb172083 476 I32 xivu_i32;
69ecfd12 477 HEK * xivu_namehek;
311a25d9 478 } xiv_u;
e736a858
NC
479 union {
480 MAGIC* xmg_magic; /* linked list of magicalness */
481 HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
482 } xmg_u;
79072805
LW
483 HV* xmg_stash; /* class package */
484};
485
486struct xpvlv {
58430790
NC
487 union {
488 NV xnv_nv; /* numeric value, if any */
489 HV * xgv_stash;
490 } xnv_u;
339049b0 491 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 492 STRLEN xpv_len; /* allocated size */
e4305a63 493 union {
311a25d9
NC
494 IV xivu_iv; /* integer value or pv offset */
495 UV xivu_uv;
496 void * xivu_p1;
bb172083 497 I32 xivu_i32;
69ecfd12 498 HEK * xivu_namehek; /* GvNAME */
311a25d9 499 } xiv_u;
e736a858
NC
500 union {
501 MAGIC* xmg_magic; /* linked list of magicalness */
502 HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
503 } xmg_u;
79072805 504 HV* xmg_stash; /* class package */
8990e307 505
79072805
LW
506 STRLEN xlv_targoff;
507 STRLEN xlv_targlen;
508 SV* xlv_targ;
dd28f7bb
DM
509 char xlv_type; /* k=keys .=pos x=substr v=vec /=join/re
510 * y=alem/helem/iter t=tie T=tied HE */
79072805
LW
511};
512
cecf5685
NC
513/* This structure works in 3 ways - regular scalar, GV with GP, or fast
514 Boyer-Moore. */
79072805 515struct xpvgv {
58430790
NC
516 union {
517 NV xnv_nv;
518 HV * xgv_stash; /* The stash of this GV */
519 } xnv_u;
5526b5b3
NC
520 STRLEN xpv_cur; /* xgv_flags */
521 STRLEN xpv_len; /* 0 */
e4305a63 522 union {
69ecfd12 523 IV xivu_iv;
311a25d9
NC
524 UV xivu_uv;
525 void * xivu_p1;
cecf5685 526 I32 xivu_i32; /* is this constant pattern being useful? */
69ecfd12 527 HEK * xivu_namehek; /* GvNAME */
311a25d9 528 } xiv_u;
e736a858
NC
529 union {
530 MAGIC* xmg_magic; /* linked list of magicalness */
531 HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
532 } xmg_u;
79072805 533 HV* xmg_stash; /* class package */
8990e307 534
79072805
LW
535};
536
fd40b977 537/* This structure must match XPVCV in cv.h */
44a8e56a 538
77a005ab
MB
539typedef U16 cv_flags_t;
540
79072805 541struct xpvfm {
58430790
NC
542 union {
543 NV xnv_nv; /* numeric value, if any */
544 HV * xgv_stash;
545 } xnv_u;
339049b0 546 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 547 STRLEN xpv_len; /* allocated size */
e4305a63 548 union {
bb172083 549 IV xivu_iv; /* PVFMs use the pv offset */
311a25d9
NC
550 UV xivu_uv;
551 void * xivu_p1;
bb172083 552 I32 xivu_i32;
69ecfd12 553 HEK * xivu_namehek;
311a25d9 554 } xiv_u;
e736a858
NC
555 union {
556 MAGIC* xmg_magic; /* linked list of magicalness */
557 HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
558 } xmg_u;
79072805 559 HV* xmg_stash; /* class package */
8990e307 560
79072805 561 HV * xcv_stash;
bf53b3a5
NC
562 union {
563 OP * xcv_start;
564 ANY xcv_xsubany;
565 } xcv_start_u;
d04ba589
NC
566 union {
567 OP * xcv_root;
568 void (*xcv_xsub) (pTHX_ CV*);
569 } xcv_root_u;
a0d0e21e 570 GV * xcv_gv;
57843af0 571 char * xcv_file;
79072805 572 AV * xcv_padlist;
748a9306 573 CV * xcv_outside;
a3985cdc
DM
574 U32 xcv_outside_seq; /* the COP sequence (at the point of our
575 * compilation) in the lexically enclosing
576 * sub */
bb172083 577 cv_flags_t xcv_flags;
11a7ac70 578 IV xfm_lines;
79072805
LW
579};
580
3038937b
NC
581typedef struct {
582 STRLEN xpv_cur; /* length of svu_pv as a C string */
583 STRLEN xpv_len; /* allocated size */
584 union {
bb172083 585 IV xivu_iv; /* PVFMs use the pv offset */
3038937b
NC
586 UV xivu_uv;
587 void * xivu_p1;
bb172083 588 I32 xivu_i32;
69ecfd12 589 HEK * xivu_namehek;
3038937b 590 } xiv_u;
e736a858
NC
591 union {
592 MAGIC* xmg_magic; /* linked list of magicalness */
593 HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
594 } xmg_u;
3038937b
NC
595 HV* xmg_stash; /* class package */
596
597 HV * xcv_stash;
d04ba589
NC
598 union {
599 OP * xcv_start;
600 ANY xcv_xsubany;
601 } xcv_start_u;
602 union {
603 OP * xcv_root;
604 void (*xcv_xsub) (pTHX_ CV*);
605 } xcv_root_u;
3038937b
NC
606 GV * xcv_gv;
607 char * xcv_file;
3038937b
NC
608 AV * xcv_padlist;
609 CV * xcv_outside;
3038937b
NC
610 U32 xcv_outside_seq; /* the COP sequence (at the point of our
611 * compilation) in the lexically enclosing
612 * sub */
bb172083 613 cv_flags_t xcv_flags;
3038937b
NC
614 IV xfm_lines;
615} xpvfm_allocated;
616
8990e307 617struct xpvio {
58430790
NC
618 union {
619 NV xnv_nv; /* numeric value, if any */
620 HV * xgv_stash;
621 } xnv_u;
339049b0 622 STRLEN xpv_cur; /* length of svu_pv as a C string */
8990e307 623 STRLEN xpv_len; /* allocated size */
e4305a63 624 union {
311a25d9
NC
625 IV xivu_iv; /* integer value or pv offset */
626 UV xivu_uv;
627 void * xivu_p1;
bb172083 628 I32 xivu_i32;
69ecfd12 629 HEK * xivu_namehek;
311a25d9 630 } xiv_u;
e736a858
NC
631 union {
632 MAGIC* xmg_magic; /* linked list of magicalness */
633 HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
634 } xmg_u;
8990e307
LW
635 HV* xmg_stash; /* class package */
636
760ac839
LW
637 PerlIO * xio_ifp; /* ifp and ofp are normally the same */
638 PerlIO * xio_ofp; /* but sockets need separate streams */
4755096e
GS
639 /* Cray addresses everything by word boundaries (64 bits) and
640 * code and data pointers cannot be mixed (which is exactly what
641 * Perl_filter_add() tries to do with the dirp), hence the following
642 * union trick (as suggested by Gurusamy Sarathy).
643 * For further information see Geir Johansen's problem report titled
644 [ID 20000612.002] Perl problem on Cray system
645 * The any pointer (known as IoANY()) will also be a good place
646 * to hang any IO disciplines to.
647 */
648 union {
649 DIR * xiou_dirp; /* for opendir, readdir, etc */
650 void * xiou_any; /* for alignment */
651 } xio_dirpu;
11a7ac70
JH
652 IV xio_lines; /* $. */
653 IV xio_page; /* $% */
654 IV xio_page_len; /* $= */
655 IV xio_lines_left; /* $- */
8990e307
LW
656 char * xio_top_name; /* $^ */
657 GV * xio_top_gv; /* $^ */
658 char * xio_fmt_name; /* $~ */
659 GV * xio_fmt_gv; /* $~ */
660 char * xio_bottom_name;/* $^B */
661 GV * xio_bottom_gv; /* $^B */
662 short xio_subprocess; /* -| or |- */
663 char xio_type;
664 char xio_flags;
665};
4755096e
GS
666#define xio_dirp xio_dirpu.xiou_dirp
667#define xio_any xio_dirpu.xiou_any
8990e307 668
e0c19803
GS
669#define IOf_ARGV 1 /* this fp iterates over ARGV */
670#define IOf_START 2 /* check for null ARGV and substitute '-' */
671#define IOf_FLUSH 4 /* this fp wants a flush after write op */
672#define IOf_DIDTOP 8 /* just did top of form */
673#define IOf_UNTAINT 16 /* consider this fp (and its data) "safe" */
674#define IOf_NOLINE 32 /* slurped a pseudo-line from empty file */
675#define IOf_FAKE_DIRP 64 /* xio_dirp is fake (source filters kludge) */
8990e307 676
ed6116ce
LW
677/* The following macros define implementation-independent predicates on SVs. */
678
954c1994
GS
679/*
680=for apidoc Am|bool|SvNIOK|SV* sv
681Returns a boolean indicating whether the SV contains a number, integer or
682double.
683
684=for apidoc Am|bool|SvNIOKp|SV* sv
685Returns a boolean indicating whether the SV contains a number, integer or
686double. Checks the B<private> setting. Use C<SvNIOK>.
687
688=for apidoc Am|void|SvNIOK_off|SV* sv
689Unsets the NV/IV status of an SV.
690
691=for apidoc Am|bool|SvOK|SV* sv
9adebda4
SB
692Returns a boolean indicating whether the value is an SV. It also tells
693whether the value is defined or not.
954c1994
GS
694
695=for apidoc Am|bool|SvIOKp|SV* sv
696Returns a boolean indicating whether the SV contains an integer. Checks
697the B<private> setting. Use C<SvIOK>.
698
699=for apidoc Am|bool|SvNOKp|SV* sv
700Returns a boolean indicating whether the SV contains a double. Checks the
701B<private> setting. Use C<SvNOK>.
702
703=for apidoc Am|bool|SvPOKp|SV* sv
704Returns a boolean indicating whether the SV contains a character string.
705Checks the B<private> setting. Use C<SvPOK>.
706
707=for apidoc Am|bool|SvIOK|SV* sv
708Returns a boolean indicating whether the SV contains an integer.
709
710=for apidoc Am|void|SvIOK_on|SV* sv
711Tells an SV that it is an integer.
712
713=for apidoc Am|void|SvIOK_off|SV* sv
714Unsets the IV status of an SV.
715
716=for apidoc Am|void|SvIOK_only|SV* sv
717Tells an SV that it is an integer and disables all other OK bits.
718
e331fc52
JH
719=for apidoc Am|void|SvIOK_only_UV|SV* sv
720Tells and SV that it is an unsigned integer and disables all other OK bits.
721
12fa07df 722=for apidoc Am|bool|SvIOK_UV|SV* sv
e331fc52
JH
723Returns a boolean indicating whether the SV contains an unsigned integer.
724
28e5dec8
JH
725=for apidoc Am|void|SvUOK|SV* sv
726Returns a boolean indicating whether the SV contains an unsigned integer.
727
12fa07df 728=for apidoc Am|bool|SvIOK_notUV|SV* sv
d1be9408 729Returns a boolean indicating whether the SV contains a signed integer.
e331fc52 730
954c1994
GS
731=for apidoc Am|bool|SvNOK|SV* sv
732Returns a boolean indicating whether the SV contains a double.
733
734=for apidoc Am|void|SvNOK_on|SV* sv
735Tells an SV that it is a double.
736
737=for apidoc Am|void|SvNOK_off|SV* sv
738Unsets the NV status of an SV.
739
740=for apidoc Am|void|SvNOK_only|SV* sv
741Tells an SV that it is a double and disables all other OK bits.
742
743=for apidoc Am|bool|SvPOK|SV* sv
744Returns a boolean indicating whether the SV contains a character
745string.
746
747=for apidoc Am|void|SvPOK_on|SV* sv
748Tells an SV that it is a string.
749
750=for apidoc Am|void|SvPOK_off|SV* sv
751Unsets the PV status of an SV.
752
753=for apidoc Am|void|SvPOK_only|SV* sv
754Tells an SV that it is a string and disables all other OK bits.
1e54db1a 755Will also turn off the UTF-8 status.
954c1994 756
b0f01acb
JP
757=for apidoc Am|bool|SvVOK|SV* sv
758Returns a boolean indicating whether the SV contains a v-string.
759
954c1994
GS
760=for apidoc Am|bool|SvOOK|SV* sv
761Returns a boolean indicating whether the SvIVX is a valid offset value for
762the SvPVX. This hack is used internally to speed up removal of characters
763from the beginning of a SvPV. When SvOOK is true, then the start of the
764allocated string buffer is really (SvPVX - SvIVX).
765
766=for apidoc Am|bool|SvROK|SV* sv
767Tests if the SV is an RV.
768
769=for apidoc Am|void|SvROK_on|SV* sv
770Tells an SV that it is an RV.
771
772=for apidoc Am|void|SvROK_off|SV* sv
773Unsets the RV status of an SV.
774
775=for apidoc Am|SV*|SvRV|SV* sv
776Dereferences an RV to return the SV.
777
778=for apidoc Am|IV|SvIVX|SV* sv
645c22ef
DM
779Returns the raw value in the SV's IV slot, without checks or conversions.
780Only use when you are sure SvIOK is true. See also C<SvIV()>.
954c1994
GS
781
782=for apidoc Am|UV|SvUVX|SV* sv
645c22ef
DM
783Returns the raw value in the SV's UV slot, without checks or conversions.
784Only use when you are sure SvIOK is true. See also C<SvUV()>.
954c1994
GS
785
786=for apidoc Am|NV|SvNVX|SV* sv
645c22ef
DM
787Returns the raw value in the SV's NV slot, without checks or conversions.
788Only use when you are sure SvNOK is true. See also C<SvNV()>.
954c1994
GS
789
790=for apidoc Am|char*|SvPVX|SV* sv
645c22ef 791Returns a pointer to the physical string in the SV. The SV must contain a
954c1994
GS
792string.
793
794=for apidoc Am|STRLEN|SvCUR|SV* sv
795Returns the length of the string which is in the SV. See C<SvLEN>.
796
797=for apidoc Am|STRLEN|SvLEN|SV* sv
659239a4
MG
798Returns the size of the string buffer in the SV, not including any part
799attributable to C<SvOOK>. See C<SvCUR>.
954c1994
GS
800
801=for apidoc Am|char*|SvEND|SV* sv
802Returns a pointer to the last character in the string which is in the SV.
803See C<SvCUR>. Access the character as *(SvEND(sv)).
804
805=for apidoc Am|HV*|SvSTASH|SV* sv
806Returns the stash of the SV.
807
672994ce 808=for apidoc Am|void|SvIV_set|SV* sv|IV val
20799e15
SP
809Set the value of the IV pointer in sv to val. It is possible to perform
810the same function of this macro with an lvalue assignment to C<SvIVX>.
811With future Perls, however, it will be more efficient to use
812C<SvIV_set> instead of the lvalue assignment to C<SvIVX>.
672994ce
SP
813
814=for apidoc Am|void|SvNV_set|SV* sv|NV val
20799e15 815Set the value of the NV pointer in sv to val. See C<SvIV_set>.
672994ce
SP
816
817=for apidoc Am|void|SvPV_set|SV* sv|char* val
20799e15 818Set the value of the PV pointer in sv to val. See C<SvIV_set>.
672994ce
SP
819
820=for apidoc Am|void|SvUV_set|SV* sv|UV val
20799e15 821Set the value of the UV pointer in sv to val. See C<SvIV_set>.
672994ce
SP
822
823=for apidoc Am|void|SvRV_set|SV* sv|SV* val
20799e15 824Set the value of the RV pointer in sv to val. See C<SvIV_set>.
672994ce
SP
825
826=for apidoc Am|void|SvMAGIC_set|SV* sv|MAGIC* val
20799e15 827Set the value of the MAGIC pointer in sv to val. See C<SvIV_set>.
672994ce 828
b6f4de24 829=for apidoc Am|void|SvSTASH_set|SV* sv|HV* val
20799e15 830Set the value of the STASH pointer in sv to val. See C<SvIV_set>.
672994ce 831
954c1994 832=for apidoc Am|void|SvCUR_set|SV* sv|STRLEN len
20799e15
SP
833Set the current length of the string which is in the SV. See C<SvCUR>
834and C<SvIV_set>.
672994ce
SP
835
836=for apidoc Am|void|SvLEN_set|SV* sv|STRLEN len
20799e15 837Set the actual length of the string which is in the SV. See C<SvIV_set>.
954c1994
GS
838
839=cut
840*/
841
79072805 842#define SvNIOK(sv) (SvFLAGS(sv) & (SVf_IOK|SVf_NOK))
748a9306 843#define SvNIOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK))
a0d0e21e 844#define SvNIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK| \
25da4f38 845 SVp_IOK|SVp_NOK|SVf_IVisUV))
79072805 846
5dc8bdac 847#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
29e97371 848#define assert_not_ROK(sv) ({assert(!SvROK(sv) || !SvRV(sv));}),
f7877b28 849#define assert_not_glob(sv) ({assert(!isGV_with_GP(sv));}),
906ed6d6 850#else
54866b45 851#define assert_not_ROK(sv)
f7877b28 852#define assert_not_glob(sv)
906ed6d6
NC
853#endif
854
463ee0b2 855#define SvOK(sv) (SvFLAGS(sv) & SVf_OK)
f7877b28 856#define SvOK_off(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
dd2eae66 857 SvFLAGS(sv) &= ~(SVf_OK| \
d41ff1b8 858 SVf_IVisUV|SVf_UTF8), \
25da4f38 859 SvOOK_off(sv))
54866b45 860#define SvOK_off_exc_UV(sv) (assert_not_ROK(sv) \
dd2eae66 861 SvFLAGS(sv) &= ~(SVf_OK| \
d41ff1b8 862 SVf_UTF8), \
a0d0e21e 863 SvOOK_off(sv))
79072805 864
8990e307
LW
865#define SvOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK))
866#define SvIOKp(sv) (SvFLAGS(sv) & SVp_IOK)
f7877b28 867#define SvIOKp_on(sv) (assert_not_glob(sv) SvRELEASE_IVX(sv), \
765f542d 868 SvFLAGS(sv) |= SVp_IOK)
8990e307 869#define SvNOKp(sv) (SvFLAGS(sv) & SVp_NOK)
f7877b28 870#define SvNOKp_on(sv) (assert_not_glob(sv) SvFLAGS(sv) |= SVp_NOK)
8990e307 871#define SvPOKp(sv) (SvFLAGS(sv) & SVp_POK)
f7877b28 872#define SvPOKp_on(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
906ed6d6 873 SvFLAGS(sv) |= SVp_POK)
463ee0b2 874
79072805 875#define SvIOK(sv) (SvFLAGS(sv) & SVf_IOK)
f7877b28 876#define SvIOK_on(sv) (assert_not_glob(sv) SvRELEASE_IVX(sv), \
765f542d 877 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
25da4f38 878#define SvIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVp_IOK|SVf_IVisUV))
0c34ef67 879#define SvIOK_only(sv) (SvOK_off(sv), \
a0d0e21e 880 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
f7877b28 881#define SvIOK_only_UV(sv) (assert_not_glob(sv) SvOK_off_exc_UV(sv), \
25da4f38 882 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
70401c6b 883
25da4f38
IZ
884#define SvIOK_UV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \
885 == (SVf_IOK|SVf_IVisUV))
28e5dec8 886#define SvUOK(sv) SvIOK_UV(sv)
25da4f38
IZ
887#define SvIOK_notUV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \
888 == SVf_IOK)
889
890#define SvIsUV(sv) (SvFLAGS(sv) & SVf_IVisUV)
891#define SvIsUV_on(sv) (SvFLAGS(sv) |= SVf_IVisUV)
892#define SvIsUV_off(sv) (SvFLAGS(sv) &= ~SVf_IVisUV)
79072805
LW
893
894#define SvNOK(sv) (SvFLAGS(sv) & SVf_NOK)
f7877b28
NC
895#define SvNOK_on(sv) (assert_not_glob(sv) \
896 SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))
8990e307 897#define SvNOK_off(sv) (SvFLAGS(sv) &= ~(SVf_NOK|SVp_NOK))
0c34ef67 898#define SvNOK_only(sv) (SvOK_off(sv), \
a0d0e21e 899 SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))
79072805 900
914184e1 901/*
12fa07df 902=for apidoc Am|bool|SvUTF8|SV* sv
914184e1
JH
903Returns a boolean indicating whether the SV contains UTF-8 encoded data.
904
905=for apidoc Am|void|SvUTF8_on|SV *sv
1e54db1a 906Turn on the UTF-8 status of an SV (the data is not changed, just the flag).
d5ce4a7c 907Do not use frivolously.
914184e1
JH
908
909=for apidoc Am|void|SvUTF8_off|SV *sv
1e54db1a 910Unsets the UTF-8 status of an SV.
914184e1
JH
911
912=for apidoc Am|void|SvPOK_only_UTF8|SV* sv
d5ce4a7c 913Tells an SV that it is a string and disables all other OK bits,
1e54db1a 914and leaves the UTF-8 status as it was.
f1a1024e 915
914184e1
JH
916=cut
917 */
918
7a5fd60d
NC
919/* Ensure the return value of this macro does not clash with the GV_ADD* flags
920in gv.h: */
a7cb1f99
GS
921#define SvUTF8(sv) (SvFLAGS(sv) & SVf_UTF8)
922#define SvUTF8_on(sv) (SvFLAGS(sv) |= (SVf_UTF8))
923#define SvUTF8_off(sv) (SvFLAGS(sv) &= ~(SVf_UTF8))
5bc28da9 924
79072805 925#define SvPOK(sv) (SvFLAGS(sv) & SVf_POK)
f7877b28 926#define SvPOK_on(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
906ed6d6 927 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
8990e307 928#define SvPOK_off(sv) (SvFLAGS(sv) &= ~(SVf_POK|SVp_POK))
f7877b28 929#define SvPOK_only(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
dd2eae66 930 SvFLAGS(sv) &= ~(SVf_OK| \
d41ff1b8
GS
931 SVf_IVisUV|SVf_UTF8), \
932 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
f7877b28 933#define SvPOK_only_UTF8(sv) (assert_not_ROK(sv) assert_not_glob(sv) \
dd2eae66 934 SvFLAGS(sv) &= ~(SVf_OK| \
d41ff1b8 935 SVf_IVisUV), \
a0d0e21e 936 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
79072805 937
4f2da183 938#define SvVOK(sv) (SvMAGICAL(sv) \
b0a11fe1
RGS
939 && mg_find(sv,PERL_MAGIC_vstring))
940/* returns the vstring magic, if any */
941#define SvVSTRING_mg(sv) (SvMAGICAL(sv) \
4f2da183 942 ? mg_find(sv,PERL_MAGIC_vstring) : NULL)
b0a11fe1 943
79072805 944#define SvOOK(sv) (SvFLAGS(sv) & SVf_OOK)
155aba94 945#define SvOOK_on(sv) ((void)SvIOK_off(sv), SvFLAGS(sv) |= SVf_OOK)
0c34ef67 946#define SvOOK_off(sv) ((void)(SvOOK(sv) && sv_backoff(sv)))
79072805 947
a0d0e21e
LW
948#define SvFAKE(sv) (SvFLAGS(sv) & SVf_FAKE)
949#define SvFAKE_on(sv) (SvFLAGS(sv) |= SVf_FAKE)
950#define SvFAKE_off(sv) (SvFLAGS(sv) &= ~SVf_FAKE)
951
ed6116ce 952#define SvROK(sv) (SvFLAGS(sv) & SVf_ROK)
a0d0e21e 953#define SvROK_on(sv) (SvFLAGS(sv) |= SVf_ROK)
dd2eae66 954#define SvROK_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK))
79072805 955
8990e307
LW
956#define SvMAGICAL(sv) (SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG))
957#define SvMAGICAL_on(sv) (SvFLAGS(sv) |= (SVs_GMG|SVs_SMG|SVs_RMG))
958#define SvMAGICAL_off(sv) (SvFLAGS(sv) &= ~(SVs_GMG|SVs_SMG|SVs_RMG))
79072805 959
8990e307
LW
960#define SvGMAGICAL(sv) (SvFLAGS(sv) & SVs_GMG)
961#define SvGMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_GMG)
962#define SvGMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_GMG)
ed6116ce 963
8990e307
LW
964#define SvSMAGICAL(sv) (SvFLAGS(sv) & SVs_SMG)
965#define SvSMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_SMG)
966#define SvSMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_SMG)
ed6116ce 967
8990e307
LW
968#define SvRMAGICAL(sv) (SvFLAGS(sv) & SVs_RMG)
969#define SvRMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_RMG)
970#define SvRMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_RMG)
ed6116ce 971
dd2eae66
NC
972#define SvAMAGIC(sv) (SvROK(sv) && (SvFLAGS(SvRV(sv)) & SVf_AMAGIC))
973#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
d4c19fe8 974# define SvAMAGIC_on(sv) ({ SV * const kloink = sv; \
dd2eae66
NC
975 assert(SvROK(kloink)); \
976 SvFLAGS(SvRV(kloink)) |= SVf_AMAGIC; \
977 })
d4c19fe8 978# define SvAMAGIC_off(sv) ({ SV * const kloink = sv; \
dd2eae66
NC
979 if(SvROK(kloink)) \
980 SvFLAGS(SvRV(kloink)) &= ~SVf_AMAGIC;\
981 })
982#else
983# define SvAMAGIC_on(sv) (SvFLAGS(SvRV(sv)) |= SVf_AMAGIC)
ce046328
NC
984# define SvAMAGIC_off(sv) \
985 (SvROK(sv) && (SvFLAGS(SvRV(sv)) &= ~SVf_AMAGIC))
dd2eae66 986#endif
a0d0e21e 987
d34786ba
NC
988/*
989=for apidoc Am|char*|SvGAMAGIC|SV* sv
990
991Returns true if the SV has get magic or overloading. If either is true then
992the scalar is active data, and has the potential to return a new value every
993time it is accessed. Hence you must be careful to only read it once per user
994logical operation and work with that returned value. If neither is true then
995the scalar's value cannot change unless written to.
996
997=cut
998*/
999
dd2eae66 1000#define SvGAMAGIC(sv) (SvGMAGICAL(sv) || SvAMAGIC(sv))
1426bbf4 1001
3280af22 1002#define Gv_AMG(stash) (PL_amagic_generation && Gv_AMupdate(stash))
a0d0e21e 1003
810b8aa5
GS
1004#define SvWEAKREF(sv) ((SvFLAGS(sv) & (SVf_ROK|SVprv_WEAKREF)) \
1005 == (SVf_ROK|SVprv_WEAKREF))
1006#define SvWEAKREF_on(sv) (SvFLAGS(sv) |= (SVf_ROK|SVprv_WEAKREF))
1007#define SvWEAKREF_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVprv_WEAKREF))
1008
a0d0e21e 1009#define SvTHINKFIRST(sv) (SvFLAGS(sv) & SVf_THINKFIRST)
ed6116ce 1010
d9d18af6
DM
1011#define SvPADSTALE(sv) (SvFLAGS(sv) & SVs_PADSTALE)
1012#define SvPADSTALE_on(sv) (SvFLAGS(sv) |= SVs_PADSTALE)
1013#define SvPADSTALE_off(sv) (SvFLAGS(sv) &= ~SVs_PADSTALE)
1014
8990e307 1015#define SvPADTMP(sv) (SvFLAGS(sv) & SVs_PADTMP)
235cc2e3 1016#define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP)
8990e307 1017#define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP)
ed6116ce 1018
8990e307 1019#define SvPADMY(sv) (SvFLAGS(sv) & SVs_PADMY)
235cc2e3 1020#define SvPADMY_on(sv) (SvFLAGS(sv) |= SVs_PADMY)
ed6116ce 1021
8990e307
LW
1022#define SvTEMP(sv) (SvFLAGS(sv) & SVs_TEMP)
1023#define SvTEMP_on(sv) (SvFLAGS(sv) |= SVs_TEMP)
1024#define SvTEMP_off(sv) (SvFLAGS(sv) &= ~SVs_TEMP)
79072805 1025
8990e307
LW
1026#define SvOBJECT(sv) (SvFLAGS(sv) & SVs_OBJECT)
1027#define SvOBJECT_on(sv) (SvFLAGS(sv) |= SVs_OBJECT)
1028#define SvOBJECT_off(sv) (SvFLAGS(sv) &= ~SVs_OBJECT)
79072805 1029
8990e307
LW
1030#define SvREADONLY(sv) (SvFLAGS(sv) & SVf_READONLY)
1031#define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)
1032#define SvREADONLY_off(sv) (SvFLAGS(sv) &= ~SVf_READONLY)
79072805 1033
180488f8 1034#define SvSCREAM(sv) ((SvFLAGS(sv) & (SVp_SCREAM|SVp_POK)) == (SVp_SCREAM|SVp_POK))
8990e307
LW
1035#define SvSCREAM_on(sv) (SvFLAGS(sv) |= SVp_SCREAM)
1036#define SvSCREAM_off(sv) (SvFLAGS(sv) &= ~SVp_SCREAM)
79072805 1037
8990e307
LW
1038#define SvCOMPILED(sv) (SvFLAGS(sv) & SVpfm_COMPILED)
1039#define SvCOMPILED_on(sv) (SvFLAGS(sv) |= SVpfm_COMPILED)
1040#define SvCOMPILED_off(sv) (SvFLAGS(sv) &= ~SVpfm_COMPILED)
79072805 1041
25da4f38
IZ
1042#define SvEVALED(sv) (SvFLAGS(sv) & SVrepl_EVAL)
1043#define SvEVALED_on(sv) (SvFLAGS(sv) |= SVrepl_EVAL)
1044#define SvEVALED_off(sv) (SvFLAGS(sv) &= ~SVrepl_EVAL)
1045
85efc3a5 1046#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
85ffbbb0
NC
1047# define SvVALID(sv) ({ SV *const thwacke = (SV *) (sv); \
1048 if (SvFLAGS(thwacke) & SVpbm_VALID) \
1049 assert(!isGV_with_GP(thwacke)); \
1050 (SvFLAGS(thwacke) & SVpbm_VALID); \
1051 })
1052# define SvVALID_on(sv) ({ SV *const thwacke = (SV *) (sv); \
1053 assert(!isGV_with_GP(thwacke)); \
1054 (SvFLAGS(thwacke) |= SVpbm_VALID); \
1055 })
1056# define SvVALID_off(sv) ({ SV *const thwacke = (SV *) (sv); \
1057 assert(!isGV_with_GP(thwacke)); \
1058 (SvFLAGS(thwacke) &= ~SVpbm_VALID); \
1059 })
1060
85efc3a5
NC
1061# define SvTAIL(sv) ({ SV *const _svi = (SV *) (sv); \
1062 assert(SvTYPE(_svi) != SVt_PVAV); \
1063 assert(SvTYPE(_svi) != SVt_PVHV); \
78d0cf80
NC
1064 (SvFLAGS(sv) & (SVpbm_TAIL|SVpbm_VALID)) \
1065 == (SVpbm_TAIL|SVpbm_VALID); \
85efc3a5
NC
1066 })
1067#else
85ffbbb0
NC
1068# define SvVALID(sv) (SvFLAGS(sv) & SVpbm_VALID)
1069# define SvVALID_on(sv) (SvFLAGS(sv) |= SVpbm_VALID)
1070# define SvVALID_off(sv) (SvFLAGS(sv) &= ~SVpbm_VALID)
78d0cf80 1071# define SvTAIL(sv) ((SvFLAGS(sv) & (SVpbm_TAIL|SVpbm_VALID)) \
fe901688 1072 == (SVpbm_TAIL|SVpbm_VALID))
78d0cf80 1073
85efc3a5 1074#endif
8990e307
LW
1075#define SvTAIL_on(sv) (SvFLAGS(sv) |= SVpbm_TAIL)
1076#define SvTAIL_off(sv) (SvFLAGS(sv) &= ~SVpbm_TAIL)
1077
8990e307 1078
1cc8b4c5
AB
1079#ifdef USE_ITHREADS
1080/* The following uses the FAKE flag to show that a regex pointer is infact
8ca6097c 1081 its own offset in the regexpad for ithreads */
1cc8b4c5
AB
1082#define SvREPADTMP(sv) (SvFLAGS(sv) & SVf_FAKE)
1083#define SvREPADTMP_on(sv) (SvFLAGS(sv) |= SVf_FAKE)
1084#define SvREPADTMP_off(sv) (SvFLAGS(sv) &= ~SVf_FAKE)
1085#endif
1086
075bae1e
NC
1087#define SvPAD_TYPED(sv) \
1088 ((SvFLAGS(sv) & (SVpad_NAME|SVpad_TYPED)) == (SVpad_NAME|SVpad_TYPED))
00b1698f 1089
075bae1e
NC
1090#define SvPAD_OUR(sv) \
1091 ((SvFLAGS(sv) & (SVpad_NAME|SVpad_OUR)) == (SVpad_NAME|SVpad_OUR))
00b1698f 1092
952306ac
RGS
1093#define SvPAD_STATE(sv) \
1094 ((SvFLAGS(sv) & (SVpad_NAME|SVpad_STATE)) == (SVpad_NAME|SVpad_STATE))
a72e56b0
NC
1095
1096#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
1097# define SvPAD_TYPED_on(sv) ({ \
1098 SV *const whap = (SV *) (sv); \
1099 assert(SvTYPE(whap) == SVt_PVMG); \
1100 (SvFLAGS(whap) |= SVpad_NAME|SVpad_TYPED); \
1101 })
1102#define SvPAD_OUR_on(sv) ({ \
1103 SV *const whap = (SV *) (sv); \
1104 assert(SvTYPE(whap) == SVt_PVMG); \
1105 (SvFLAGS(whap) |= SVpad_NAME|SVpad_OUR); \
1106 })
1107#define SvPAD_STATE_on(sv) ({ \
1108 SV *const whap = (SV *) (sv); \
1109 assert(SvTYPE(whap) == SVt_PVNV || SvTYPE(whap) == SVt_PVMG); \
1110 (SvFLAGS(whap) |= SVpad_NAME|SVpad_STATE); \
1111 })
1112#else
1113# define SvPAD_TYPED_on(sv) (SvFLAGS(sv) |= SVpad_NAME|SVpad_TYPED)
1114# define SvPAD_OUR_on(sv) (SvFLAGS(sv) |= SVpad_NAME|SVpad_OUR)
1115# define SvPAD_STATE_on(sv) (SvFLAGS(sv) |= SVpad_NAME|SVpad_STATE)
1116#endif
952306ac 1117
e736a858
NC
1118#define OURSTASH(sv) \
1119 (SvPAD_OUR(sv) ? ((XPVMG*) SvANY(sv))->xmg_u.xmg_ourstash : NULL)
1120#define OURSTASH_set(sv, st) \
1121 STMT_START { \
2892acdb 1122 assert(SvTYPE(sv) == SVt_PVMG); \
e736a858 1123 ((XPVMG*) SvANY(sv))->xmg_u.xmg_ourstash = st; \
035dab74
NC
1124 } STMT_END
1125
b162af07 1126#ifdef PERL_DEBUG_COW
339049b0 1127#define SvRV(sv) (0 + (sv)->sv_u.svu_rv)
b162af07 1128#else
339049b0 1129#define SvRV(sv) ((sv)->sv_u.svu_rv)
b162af07 1130#endif
ed6116ce
LW
1131#define SvRVx(sv) SvRV(sv)
1132
f599b64b 1133#ifdef PERL_DEBUG_COW
8ed30cc1
DD
1134/* Need -0.0 for SvNVX to preserve IEEE FP "negative zero" because
1135 +0.0 + -0.0 => +0.0 but -0.0 + -0.0 => -0.0 */
771ba71a
NC
1136# define SvIVX(sv) (0 + ((XPVIV*) SvANY(sv))->xiv_iv)
1137# define SvUVX(sv) (0 + ((XPVUV*) SvANY(sv))->xuv_uv)
58430790 1138# define SvNVX(sv) (-0.0 + ((XPVNV*) SvANY(sv))->xnv_u.xnv_nv)
c0e1089a 1139/* Don't test the core XS code yet. */
771ba71a
NC
1140# if defined (PERL_CORE) && PERL_DEBUG_COW > 1
1141# define SvPVX(sv) (0 + (assert(!SvREADONLY(sv)), (sv)->sv_u.svu_pv))
1142# else
1143# define SvPVX(sv) SvPVX_mutable(sv)
1144# endif
771ba71a
NC
1145# define SvCUR(sv) (0 + ((XPV*) SvANY(sv))->xpv_cur)
1146# define SvLEN(sv) (0 + ((XPV*) SvANY(sv))->xpv_len)
1147# define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur)
1148
1149# ifdef DEBUGGING
064cf529
NC
1150# define SvMAGIC(sv) (0 + *(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*) SvANY(sv))->xmg_u.xmg_magic))
1151# define SvSTASH(sv) (0 + *(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*) SvANY(sv))->xmg_stash))
03687789 1152# else
064cf529
NC
1153# define SvMAGIC(sv) (0 + ((XPVMG*) SvANY(sv))->xmg_u.xmg_magic)
1154# define SvSTASH(sv) (0 + ((XPVMG*) SvANY(sv))->xmg_stash)
03687789 1155# endif
f599b64b 1156#else
771ba71a
NC
1157# define SvLEN(sv) ((XPV*) SvANY(sv))->xpv_len
1158# define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur)
1159
05ef5f8f
NC
1160# if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
1161/* These get expanded inside other macros that already use a variable _sv */
f7877b28 1162# define SvPVX(sv) \
55c1d76f 1163 (*({ SV *const _svi = (SV *) (sv); \
f7877b28
NC
1164 assert(SvTYPE(_svi) >= SVt_PV); \
1165 assert(SvTYPE(_svi) != SVt_PVAV); \
1166 assert(SvTYPE(_svi) != SVt_PVHV); \
1167 assert(!isGV_with_GP(_svi)); \
1168 &((_svi)->sv_u.svu_pv); \
1169 }))
08002bbf 1170# define SvCUR(sv) \
55c1d76f 1171 (*({ SV *const _svi = (SV *) (sv); \
08002bbf
NC
1172 assert(SvTYPE(_svi) >= SVt_PV); \
1173 assert(SvTYPE(_svi) != SVt_PVAV); \
1174 assert(SvTYPE(_svi) != SVt_PVHV); \
1175 assert(!isGV_with_GP(_svi)); \
1176 &(((XPV*) SvANY(_svi))->xpv_cur); \
1177 }))
05ef5f8f 1178# define SvIVX(sv) \
55c1d76f 1179 (*({ SV *const _svi = (SV *) (sv); \
05ef5f8f 1180 assert(SvTYPE(_svi) == SVt_IV || SvTYPE(_svi) >= SVt_PVIV); \
675eb423
NC
1181 assert(SvTYPE(_svi) != SVt_PVAV); \
1182 assert(SvTYPE(_svi) != SVt_PVHV); \
bb172083 1183 assert(SvTYPE(_svi) != SVt_PVCV); \
27bd069f 1184 assert(!isGV_with_GP(_svi)); \
05ef5f8f
NC
1185 &(((XPVIV*) SvANY(_svi))->xiv_iv); \
1186 }))
1187# define SvUVX(sv) \
55c1d76f 1188 (*({ SV *const _svi = (SV *) (sv); \
05ef5f8f 1189 assert(SvTYPE(_svi) == SVt_IV || SvTYPE(_svi) >= SVt_PVIV); \
675eb423
NC
1190 assert(SvTYPE(_svi) != SVt_PVAV); \
1191 assert(SvTYPE(_svi) != SVt_PVHV); \
bb172083 1192 assert(SvTYPE(_svi) != SVt_PVCV); \
27bd069f 1193 assert(!isGV_with_GP(_svi)); \
05ef5f8f
NC
1194 &(((XPVUV*) SvANY(_svi))->xuv_uv); \
1195 }))
1196# define SvNVX(sv) \
55c1d76f 1197 (*({ SV *const _svi = (SV *) (sv); \
675eb423
NC
1198 assert(SvTYPE(_svi) == SVt_NV || SvTYPE(_svi) >= SVt_PVNV); \
1199 assert(SvTYPE(_svi) != SVt_PVAV); \
1200 assert(SvTYPE(_svi) != SVt_PVHV); \
281ab51b 1201 assert(SvTYPE(_svi) != SVt_PVCV); \
3038937b 1202 assert(SvTYPE(_svi) != SVt_PVFM); \
27bd069f 1203 assert(!isGV_with_GP(_svi)); \
58430790 1204 &(((XPVNV*) SvANY(_svi))->xnv_u.xnv_nv); \
05ef5f8f
NC
1205 }))
1206# define SvMAGIC(sv) \
55c1d76f 1207 (*({ SV *const _svi = (SV *) (sv); \
05ef5f8f 1208 assert(SvTYPE(_svi) >= SVt_PVMG); \
885ffcb3
NC
1209 if(SvTYPE(_svi) == SVt_PVMG) \
1210 assert(!SvPAD_OUR(_svi)); \
e736a858 1211 &(((XPVMG*) SvANY(_svi))->xmg_u.xmg_magic); \
05ef5f8f
NC
1212 }))
1213# define SvSTASH(sv) \
55c1d76f 1214 (*({ SV *const _svi = (SV *) (sv); \
05ef5f8f
NC
1215 assert(SvTYPE(_svi) >= SVt_PVMG); \
1216 &(((XPVMG*) SvANY(_svi))->xmg_stash); \
1217 }))
03687789 1218# else
08002bbf
NC
1219# define SvPVX(sv) ((sv)->sv_u.svu_pv)
1220# define SvCUR(sv) ((XPV*) SvANY(sv))->xpv_cur
05ef5f8f
NC
1221# define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv
1222# define SvUVX(sv) ((XPVUV*) SvANY(sv))->xuv_uv
58430790 1223# define SvNVX(sv) ((XPVNV*) SvANY(sv))->xnv_u.xnv_nv
e736a858 1224# define SvMAGIC(sv) ((XPVMG*) SvANY(sv))->xmg_u.xmg_magic
771ba71a 1225# define SvSTASH(sv) ((XPVMG*) SvANY(sv))->xmg_stash
03687789 1226# endif
62703e72
NC
1227#endif
1228
06c0cc96 1229#ifndef PERL_POISON
bb496845
SP
1230/* Given that these two are new, there can't be any existing code using them
1231 * as LVALUEs */
06c0cc96
NC
1232# define SvPVX_mutable(sv) (0 + (sv)->sv_u.svu_pv)
1233# define SvPVX_const(sv) ((const char*)(0 + (sv)->sv_u.svu_pv))
1234#else
1235/* Except for the poison code, which uses & to scribble over the pointer after
1236 free() is called. */
1237# define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv)
1238# define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv))
1239#endif
bb496845 1240
62703e72
NC
1241#define SvIVXx(sv) SvIVX(sv)
1242#define SvUVXx(sv) SvUVX(sv)
1243#define SvNVXx(sv) SvNVX(sv)
1244#define SvPVXx(sv) SvPVX(sv)
1245#define SvLENx(sv) SvLEN(sv)
1246#define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv))
1247
1248
28e5dec8
JH
1249/* Ask a scalar nicely to try to become an IV, if possible.
1250 Not guaranteed to stay returning void */
1251/* Macro won't actually call sv_2iv if already IOK */
1252#define SvIV_please(sv) \
1253 STMT_START {if (!SvIOKp(sv) && (SvNOK(sv) || SvPOK(sv))) \
1254 (void) SvIV(sv); } STMT_END
79072805 1255#define SvIV_set(sv, val) \
80b92232 1256 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
a0905512
NC
1257 assert(SvTYPE(sv) != SVt_PVAV); \
1258 assert(SvTYPE(sv) != SVt_PVHV); \
1259 assert(SvTYPE(sv) != SVt_PVCV); \
08002bbf 1260 assert(!isGV_with_GP(sv)); \
b19bbeda 1261 (((XPVIV*) SvANY(sv))->xiv_iv = (val)); } STMT_END
79072805 1262#define SvNV_set(sv, val) \
80b92232 1263 STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \
7ffec4a4 1264 assert(SvTYPE(sv) != SVt_PVAV); assert(SvTYPE(sv) != SVt_PVHV); \
a0905512 1265 assert(SvTYPE(sv) != SVt_PVCV); assert(SvTYPE(sv) != SVt_PVFM); \
08002bbf 1266 assert(!isGV_with_GP(sv)); \
58430790 1267 (((XPVNV*)SvANY(sv))->xnv_u.xnv_nv = (val)); } STMT_END
79072805 1268#define SvPV_set(sv, val) \
80b92232 1269 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
9c6bc640 1270 assert(SvTYPE(sv) != SVt_PVAV); \
797c7171 1271 assert(SvTYPE(sv) != SVt_PVHV); \
08002bbf 1272 assert(!isGV_with_GP(sv)); \
339049b0 1273 ((sv)->sv_u.svu_pv = (val)); } STMT_END
607fa7f2
SP
1274#define SvUV_set(sv, val) \
1275 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
a0905512
NC
1276 assert(SvTYPE(sv) != SVt_PVAV); \
1277 assert(SvTYPE(sv) != SVt_PVHV); \
1278 assert(SvTYPE(sv) != SVt_PVCV); \
08002bbf 1279 assert(!isGV_with_GP(sv)); \
607fa7f2 1280 (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END
b162af07
SP
1281#define SvRV_set(sv, val) \
1282 STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
08002bbf 1283 assert(!isGV_with_GP(sv)); \
339049b0 1284 ((sv)->sv_u.svu_rv = (val)); } STMT_END
b162af07
SP
1285#define SvMAGIC_set(sv, val) \
1286 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
e736a858 1287 (((XPVMG*)SvANY(sv))->xmg_u.xmg_magic = (val)); } STMT_END
b162af07
SP
1288#define SvSTASH_set(sv, val) \
1289 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
1290 (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
79072805 1291#define SvCUR_set(sv, val) \
80b92232 1292 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
a0905512
NC
1293 assert(SvTYPE(sv) != SVt_PVAV); \
1294 assert(SvTYPE(sv) != SVt_PVHV); \
08002bbf 1295 assert(!isGV_with_GP(sv)); \
b162af07 1296 (((XPV*) SvANY(sv))->xpv_cur = (val)); } STMT_END
79072805 1297#define SvLEN_set(sv, val) \
80b92232 1298 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
a0905512
NC
1299 assert(SvTYPE(sv) != SVt_PVAV); \
1300 assert(SvTYPE(sv) != SVt_PVHV); \
f7877b28 1301 assert(!isGV_with_GP(sv)); \
b162af07 1302 (((XPV*) SvANY(sv))->xpv_len = (val)); } STMT_END
7ae8ee9e
NC
1303#define SvEND_set(sv, val) \
1304 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
1305 (SvCUR(sv) = (val) - SvPVX(sv)); } STMT_END
79072805 1306
b7e9a5c2 1307#define SvPV_renew(sv,n) \
1da4ca5f
NC
1308 STMT_START { SvLEN_set(sv, n); \
1309 SvPV_set((sv), (MEM_WRAP_CHECK_(n,char) \
1310 (char*)saferealloc((Malloc_t)SvPVX(sv), \
1311 (MEM_SIZE)((n))))); \
1312 } STMT_END
1313
1314#define SvPV_shrink_to_cur(sv) STMT_START { \
1315 const STRLEN _lEnGtH = SvCUR(sv) + 1; \
1316 SvPV_renew(sv, _lEnGtH); \
1317 } STMT_END
b7e9a5c2 1318
771ba71a
NC
1319#define SvPV_free(sv) \
1320 STMT_START { \
1321 assert(SvTYPE(sv) >= SVt_PV); \
1322 if (SvLEN(sv)) { \
1323 if(SvOOK(sv)) { \
1324 SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv)); \
1325 SvFLAGS(sv) &= ~SVf_OOK; \
1326 } \
1327 Safefree(SvPVX(sv)); \
1328 } \
1329 } STMT_END
8bd4d4c5 1330
373b357f
NC
1331
1332#define PERL_FBM_TABLE_OFFSET 5 /* Number of bytes between EOS and table */
1333#define PERL_FBM_FLAGS_OFFSET_FROM_TABLE -1
69d97907 1334/* how many characters in string before rare? */
a4558e1a
NC
1335#if (BYTEORDER == 0x4321) || (BYTEORDER == 0x87654321)
1336# define PERL_FBM_PREVIOUS_L_OFFSET_FROM_TABLE -2
1337# define PERL_FBM_PREVIOUS_H_OFFSET_FROM_TABLE -3
1338#else
1339# define PERL_FBM_PREVIOUS_H_OFFSET_FROM_TABLE -2
1340# define PERL_FBM_PREVIOUS_L_OFFSET_FROM_TABLE -3
1341#endif
69d97907 1342/* rarest character in string */
373b357f
NC
1343#define PERL_FBM_RARE_OFFSET_FROM_TABLE -4
1344
1345/* SvPOKp not SvPOK in the assertion because the string can be tainted! eg
1346 perl -T -e '/$^X/'
1347*/
60c8298a
NC
1348#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
1349# define BmRARE(sv) \
b4f6c04b 1350 (*({ SV *const uggh = (SV *) (sv); \
cecf5685 1351 assert(SvTYPE(uggh) == SVt_PVGV); \
b4f6c04b
NC
1352 assert(SvVALID(uggh)); \
1353 assert(SvCUR(uggh) + PERL_FBM_TABLE_OFFSET \
1354 + PERL_FBM_RARE_OFFSET_FROM_TABLE <= SvLEN(uggh)); \
1355 assert(SvPOKp(uggh)); \
1356 (U8*)(SvEND(uggh) \
373b357f 1357 + PERL_FBM_TABLE_OFFSET + PERL_FBM_RARE_OFFSET_FROM_TABLE); \
60c8298a
NC
1358 }))
1359# define BmUSEFUL(sv) \
b4f6c04b 1360 (*({ SV *const uggh = (SV *) (sv); \
cecf5685 1361 assert(SvTYPE(uggh) == SVt_PVGV); \
b4f6c04b
NC
1362 assert(SvVALID(uggh)); \
1363 assert(!SvIOK(uggh)); \
cecf5685 1364 &(((XPVGV*) SvANY(uggh))->xiv_u.xivu_i32); \
60c8298a
NC
1365 }))
1366# define BmPREVIOUS(sv) \
b4f6c04b 1367 ({ SV *const uggh = (SV *) (sv); \
cecf5685 1368 assert(SvTYPE(uggh) == SVt_PVGV); \
b4f6c04b
NC
1369 assert(SvVALID(uggh)); \
1370 assert(SvPOKp(uggh)); \
1371 assert(SvCUR(uggh) + PERL_FBM_TABLE_OFFSET <= SvLEN(uggh)); \
1372 (*(U8*)(SvEND(uggh) + PERL_FBM_TABLE_OFFSET \
1373 + PERL_FBM_PREVIOUS_H_OFFSET_FROM_TABLE) << 8) \
1374 | (*(U8*)(SvEND(uggh) + PERL_FBM_TABLE_OFFSET \
1375 + PERL_FBM_PREVIOUS_L_OFFSET_FROM_TABLE)); \
1376 })
60c8298a 1377#else
373b357f
NC
1378# define BmRARE(sv) \
1379 (*(U8*)(SvEND(sv) \
1380 + PERL_FBM_TABLE_OFFSET + PERL_FBM_RARE_OFFSET_FROM_TABLE))
1381
cecf5685 1382# define BmUSEFUL(sv) ((XPVGV*) SvANY(sv))->xiv_u.xivu_i32
b4f6c04b 1383# define BmPREVIOUS(sv) \
2fbd9518 1384 ((*(U8*)(SvEND(sv) + PERL_FBM_TABLE_OFFSET \
b4f6c04b 1385 + PERL_FBM_PREVIOUS_H_OFFSET_FROM_TABLE) << 8) \
2fbd9518
SH
1386 | (*(U8*)(SvEND(sv) + PERL_FBM_TABLE_OFFSET \
1387 + PERL_FBM_PREVIOUS_L_OFFSET_FROM_TABLE))) \
b4f6c04b 1388
60c8298a 1389#endif
39efed7f 1390#define BmPREVIOUS_set(sv, val) \
cecf5685 1391 STMT_START { assert(SvTYPE(sv) == SVt_PVGV); \
b4f6c04b
NC
1392 assert(SvVALID(sv)); \
1393 assert(SvPOKp(sv)); \
1394 assert(SvCUR(sv) + PERL_FBM_TABLE_OFFSET <= SvLEN(sv)); \
1395 *(U8*)(SvEND(sv) + PERL_FBM_TABLE_OFFSET \
1396 + PERL_FBM_PREVIOUS_H_OFFSET_FROM_TABLE) = (U8)((U32)(val)>>8); \
1397 *(U8*)(SvEND(sv) + PERL_FBM_TABLE_OFFSET \
1398 + PERL_FBM_PREVIOUS_L_OFFSET_FROM_TABLE) = (U8)(val); \
1399 } STMT_END
79072805
LW
1400
1401#define FmLINES(sv) ((XPVFM*) SvANY(sv))->xfm_lines
1402
1403#define LvTYPE(sv) ((XPVLV*) SvANY(sv))->xlv_type
1404#define LvTARG(sv) ((XPVLV*) SvANY(sv))->xlv_targ
1405#define LvTARGOFF(sv) ((XPVLV*) SvANY(sv))->xlv_targoff
1406#define LvTARGLEN(sv) ((XPVLV*) SvANY(sv))->xlv_targlen
1407
8990e307
LW
1408#define IoIFP(sv) ((XPVIO*) SvANY(sv))->xio_ifp
1409#define IoOFP(sv) ((XPVIO*) SvANY(sv))->xio_ofp
1410#define IoDIRP(sv) ((XPVIO*) SvANY(sv))->xio_dirp
4755096e 1411#define IoANY(sv) ((XPVIO*) SvANY(sv))->xio_any
8990e307
LW
1412#define IoLINES(sv) ((XPVIO*) SvANY(sv))->xio_lines
1413#define IoPAGE(sv) ((XPVIO*) SvANY(sv))->xio_page
1414#define IoPAGE_LEN(sv) ((XPVIO*) SvANY(sv))->xio_page_len
1415#define IoLINES_LEFT(sv)((XPVIO*) SvANY(sv))->xio_lines_left
1416#define IoTOP_NAME(sv) ((XPVIO*) SvANY(sv))->xio_top_name
1417#define IoTOP_GV(sv) ((XPVIO*) SvANY(sv))->xio_top_gv
1418#define IoFMT_NAME(sv) ((XPVIO*) SvANY(sv))->xio_fmt_name
1419#define IoFMT_GV(sv) ((XPVIO*) SvANY(sv))->xio_fmt_gv
1420#define IoBOTTOM_NAME(sv)((XPVIO*) SvANY(sv))->xio_bottom_name
1421#define IoBOTTOM_GV(sv) ((XPVIO*) SvANY(sv))->xio_bottom_gv
1422#define IoSUBPROCESS(sv)((XPVIO*) SvANY(sv))->xio_subprocess
1423#define IoTYPE(sv) ((XPVIO*) SvANY(sv))->xio_type
1424#define IoFLAGS(sv) ((XPVIO*) SvANY(sv))->xio_flags
1425
50952442 1426/* IoTYPE(sv) is a single character telling the type of I/O connection. */
3b6c1aba
JH
1427#define IoTYPE_RDONLY '<'
1428#define IoTYPE_WRONLY '>'
1429#define IoTYPE_RDWR '+'
1430#define IoTYPE_APPEND 'a'
1431#define IoTYPE_PIPE '|'
1432#define IoTYPE_STD '-' /* stdin or stdout */
1433#define IoTYPE_SOCKET 's'
1434#define IoTYPE_CLOSED ' '
1435#define IoTYPE_IMPLICIT 'I' /* stdin or stdout or stderr */
1436#define IoTYPE_NUMERIC '#' /* fdopen */
03fcf2fc
GS
1437
1438/*
954c1994
GS
1439=for apidoc Am|bool|SvTAINTED|SV* sv
1440Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
1441not.
1442
1443=for apidoc Am|void|SvTAINTED_on|SV* sv
c55831ac 1444Marks an SV as tainted if tainting is enabled.
954c1994
GS
1445
1446=for apidoc Am|void|SvTAINTED_off|SV* sv
1447Untaints an SV. Be I<very> careful with this routine, as it short-circuits
1448some of Perl's fundamental security features. XS module authors should not
1449use this function unless they fully understand all the implications of
1450unconditionally untainting the value. Untainting should be done in the
1451standard perl fashion, via a carefully crafted regexp, rather than directly
1452untainting variables.
1453
1454=for apidoc Am|void|SvTAINT|SV* sv
c55831ac 1455Taints an SV if tainting is enabled.
954c1994
GS
1456
1457=cut
1458*/
1459
a0714e2c 1460#define sv_taint(sv) sv_magic((sv), NULL, PERL_MAGIC_taint, NULL, 0)
aae9cea0 1461
bbce6d69 1462#define SvTAINTED(sv) (SvMAGICAL(sv) && sv_tainted(sv))
3280af22
NIS
1463#define SvTAINTED_on(sv) STMT_START{ if(PL_tainting){sv_taint(sv);} }STMT_END
1464#define SvTAINTED_off(sv) STMT_START{ if(PL_tainting){sv_untaint(sv);} }STMT_END
bbce6d69 1465
c6ee37c5
MB
1466#define SvTAINT(sv) \
1467 STMT_START { \
3280af22 1468 if (PL_tainting) { \
3280af22 1469 if (PL_tainted) \
c6ee37c5
MB
1470 SvTAINTED_on(sv); \
1471 } \
1472 } STMT_END
79072805 1473
954c1994
GS
1474/*
1475=for apidoc Am|char*|SvPV_force|SV* sv|STRLEN len
5f08bad4
ST
1476Like C<SvPV> but will force the SV into containing just a string
1477(C<SvPOK_only>). You want force if you are going to update the C<SvPVX>
1478directly.
954c1994 1479
645c22ef 1480=for apidoc Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
5f08bad4
ST
1481Like C<SvPV> but will force the SV into containing just a string
1482(C<SvPOK_only>). You want force if you are going to update the C<SvPVX>
1483directly. Doesn't process magic.
645c22ef 1484
954c1994 1485=for apidoc Am|char*|SvPV|SV* sv|STRLEN len
5f08bad4
ST
1486Returns a pointer to the string in the SV, or a stringified form of
1487the SV if the SV does not contain a string. The SV may cache the
1488stringified version becoming C<SvPOK>. Handles 'get' magic. See also
645c22ef
DM
1489C<SvPVx> for a version which guarantees to evaluate sv only once.
1490
1491=for apidoc Am|char*|SvPVx|SV* sv|STRLEN len
1492A version of C<SvPV> which guarantees to evaluate sv only once.
954c1994 1493
891f9566
YST
1494=for apidoc Am|char*|SvPV_nomg|SV* sv|STRLEN len
1495Like C<SvPV> but doesn't process magic.
1496
954c1994 1497=for apidoc Am|char*|SvPV_nolen|SV* sv
5f08bad4
ST
1498Returns a pointer to the string in the SV, or a stringified form of
1499the SV if the SV does not contain a string. The SV may cache the
1500stringified form becoming C<SvPOK>. Handles 'get' magic.
954c1994
GS
1501
1502=for apidoc Am|IV|SvIV|SV* sv
645c22ef
DM
1503Coerces the given SV to an integer and returns it. See C<SvIVx> for a
1504version which guarantees to evaluate sv only once.
1505
891f9566
YST
1506=for apidoc Am|IV|SvIV_nomg|SV* sv
1507Like C<SvIV> but doesn't process magic.
1508
645c22ef
DM
1509=for apidoc Am|IV|SvIVx|SV* sv
1510Coerces the given SV to an integer and returns it. Guarantees to evaluate
d1be9408 1511sv only once. Use the more efficient C<SvIV> otherwise.
954c1994
GS
1512
1513=for apidoc Am|NV|SvNV|SV* sv
645c22ef
DM
1514Coerce the given SV to a double and return it. See C<SvNVx> for a version
1515which guarantees to evaluate sv only once.
1516
1517=for apidoc Am|NV|SvNVx|SV* sv
1518Coerces the given SV to a double and returns it. Guarantees to evaluate
d1be9408 1519sv only once. Use the more efficient C<SvNV> otherwise.
954c1994
GS
1520
1521=for apidoc Am|UV|SvUV|SV* sv
645c22ef
DM
1522Coerces the given SV to an unsigned integer and returns it. See C<SvUVx>
1523for a version which guarantees to evaluate sv only once.
1524
891f9566
YST
1525=for apidoc Am|UV|SvUV_nomg|SV* sv
1526Like C<SvUV> but doesn't process magic.
1527
645c22ef
DM
1528=for apidoc Am|UV|SvUVx|SV* sv
1529Coerces the given SV to an unsigned integer and returns it. Guarantees to
d1be9408 1530evaluate sv only once. Use the more efficient C<SvUV> otherwise.
954c1994
GS
1531
1532=for apidoc Am|bool|SvTRUE|SV* sv
1533Returns a boolean indicating whether Perl would evaluate the SV as true or
1534false, defined or undefined. Does not handle 'get' magic.
1535
645c22ef 1536=for apidoc Am|char*|SvPVutf8_force|SV* sv|STRLEN len
b70b15d2 1537Like C<SvPV_force>, but converts sv to utf8 first if necessary.
645c22ef
DM
1538
1539=for apidoc Am|char*|SvPVutf8|SV* sv|STRLEN len
b70b15d2 1540Like C<SvPV>, but converts sv to utf8 first if necessary.
645c22ef 1541
b70b15d2
TJ
1542=for apidoc Am|char*|SvPVutf8_nolen|SV* sv
1543Like C<SvPV_nolen>, but converts sv to utf8 first if necessary.
645c22ef
DM
1544
1545=for apidoc Am|char*|SvPVbyte_force|SV* sv|STRLEN len
1546Like C<SvPV_force>, but converts sv to byte representation first if necessary.
1547
1548=for apidoc Am|char*|SvPVbyte|SV* sv|STRLEN len
1549Like C<SvPV>, but converts sv to byte representation first if necessary.
1550
b70b15d2 1551=for apidoc Am|char*|SvPVbyte_nolen|SV* sv
645c22ef
DM
1552Like C<SvPV_nolen>, but converts sv to byte representation first if necessary.
1553
1554=for apidoc Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
b70b15d2 1555Like C<SvPV_force>, but converts sv to utf8 first if necessary.
d1be9408 1556Guarantees to evaluate sv only once; use the more efficient C<SvPVutf8_force>
645c22ef
DM
1557otherwise.
1558
1559=for apidoc Am|char*|SvPVutf8x|SV* sv|STRLEN len
b70b15d2 1560Like C<SvPV>, but converts sv to utf8 first if necessary.
d1be9408 1561Guarantees to evaluate sv only once; use the more efficient C<SvPVutf8>
645c22ef
DM
1562otherwise.
1563
1564=for apidoc Am|char*|SvPVbytex_force|SV* sv|STRLEN len
1565Like C<SvPV_force>, but converts sv to byte representation first if necessary.
d1be9408 1566Guarantees to evaluate sv only once; use the more efficient C<SvPVbyte_force>
645c22ef
DM
1567otherwise.
1568
1569=for apidoc Am|char*|SvPVbytex|SV* sv|STRLEN len
1570Like C<SvPV>, but converts sv to byte representation first if necessary.
d1be9408 1571Guarantees to evaluate sv only once; use the more efficient C<SvPVbyte>
645c22ef
DM
1572otherwise.
1573
19dbb8f1
NC
1574=for apidoc Am|bool|SvIsCOW|SV* sv
1575Returns a boolean indicating whether the SV is Copy-On-Write. (either shared
1576hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for
1577COW)
1578
1579=for apidoc Am|bool|SvIsCOW_shared_hash|SV* sv
1580Returns a boolean indicating whether the SV is Copy-On-Write shared hash key
1581scalar.
645c22ef 1582
0f76ff59
MHM
1583=for apidoc Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
1584Like C<sv_catpvn> but doesn't process magic.
1585
1586=for apidoc Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
1587Like C<sv_setsv> but doesn't process magic.
1588
1589=for apidoc Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
1590Like C<sv_catsv> but doesn't process magic.
1591
954c1994
GS
1592=cut
1593*/
1594
25da4f38 1595/* Let us hope that bitmaps for UV and IV are the same */
463ee0b2 1596#define SvIV(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv))
ff68c719 1597#define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
463ee0b2 1598#define SvNV(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv))
79072805 1599
891f9566
YST
1600#define SvIV_nomg(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv_flags(sv, 0))
1601#define SvUV_nomg(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
1602
baca2b92 1603/* ----*/
8d6d96c1 1604
8d6d96c1 1605#define SvPV(sv, lp) SvPV_flags(sv, lp, SV_GMAGIC)
32a5c6ec 1606#define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC)
44d22300 1607#define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
8d6d96c1 1608
8d6d96c1
HS
1609#define SvPV_flags(sv, lp, flags) \
1610 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1611 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
32a5c6ec
NC
1612#define SvPV_flags_const(sv, lp, flags) \
1613 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1614 ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
1615 (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
2596d9fe
NC
1616#define SvPV_flags_const_nolen(sv, flags) \
1617 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1618 ? SvPVX_const(sv) : \
1619 (const char*) sv_2pv_flags(sv, 0, flags|SV_CONST_RETURN))
44d22300
NC
1620#define SvPV_flags_mutable(sv, lp, flags) \
1621 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1622 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
1623 sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
79072805 1624
8d6d96c1 1625#define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
13c5b33c 1626#define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
32a5c6ec 1627#define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
baca2b92 1628
8d6d96c1 1629#define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
2596d9fe 1630#define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
8d6d96c1 1631
8d6d96c1 1632#define SvPV_force_flags(sv, lp, flags) \
ff68c719 1633 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
8d6d96c1 1634 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
13c5b33c
NC
1635#define SvPV_force_flags_nolen(sv, flags) \
1636 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
1637 ? SvPVX(sv) : sv_pvn_force_flags(sv, 0, flags))
32a5c6ec
NC
1638#define SvPV_force_flags_mutable(sv, lp, flags) \
1639 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
1640 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
1641 : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
a0d0e21e 1642
1fa8b10d 1643#define SvPV_nolen(sv) \
5bc28da9 1644 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
dafda6d1 1645 ? SvPVX(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC))
70401c6b 1646
9ce348e8
NC
1647#define SvPV_nolen_const(sv) \
1648 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1649 ? SvPVX_const(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC|SV_CONST_RETURN))
1650
baca2b92 1651#define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
9ce348e8 1652#define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
2596d9fe 1653#define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
5bc28da9 1654
baca2b92 1655/* ----*/
70401c6b 1656
5bc28da9
NIS
1657#define SvPVutf8(sv, lp) \
1658 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK|SVf_UTF8) \
1659 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
70401c6b 1660
5bc28da9 1661#define SvPVutf8_force(sv, lp) \
70401c6b 1662 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == (SVf_POK|SVf_UTF8) \
5bc28da9
NIS
1663 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
1664
baca2b92 1665
5bc28da9
NIS
1666#define SvPVutf8_nolen(sv) \
1667 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK|SVf_UTF8)\
dafda6d1 1668 ? SvPVX(sv) : sv_2pvutf8(sv, 0))
70401c6b 1669
baca2b92
DM
1670/* ----*/
1671
5bc28da9
NIS
1672#define SvPVbyte(sv, lp) \
1673 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \
1674 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
70401c6b 1675
5bc28da9
NIS
1676#define SvPVbyte_force(sv, lp) \
1677 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVf_THINKFIRST)) == (SVf_POK) \
a7ec4e2e 1678 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &lp))
5bc28da9 1679
5bc28da9
NIS
1680#define SvPVbyte_nolen(sv) \
1681 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK)\
dafda6d1 1682 ? SvPVX(sv) : sv_2pvbyte(sv, 0))
70401c6b 1683
1fa8b10d 1684
baca2b92
DM
1685
1686/* define FOOx(): idempotent versions of FOO(). If possible, use a local
1687 * var to evaluate the arg once; failing that, use a global if possible;
1688 * failing that, call a function to do the work
1689 */
1690
1691#define SvPVx_force(sv, lp) sv_pvn_force(sv, &lp)
1692#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
1693#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
1694
5dc8bdac 1695#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
baca2b92 1696
3de3296f
AE
1697# define SvIVx(sv) ({SV *_sv = (SV*)(sv); SvIV(_sv); })
1698# define SvUVx(sv) ({SV *_sv = (SV*)(sv); SvUV(_sv); })
1699# define SvNVx(sv) ({SV *_sv = (SV*)(sv); SvNV(_sv); })
1700# define SvPVx(sv, lp) ({SV *_sv = (sv); SvPV(_sv, lp); })
32a5c6ec 1701# define SvPVx_const(sv, lp) ({SV *_sv = (sv); SvPV_const(_sv, lp); })
002e4c74 1702# define SvPVx_nolen(sv) ({SV *_sv = (sv); SvPV_nolen(_sv); })
9ce348e8 1703# define SvPVx_nolen_const(sv) ({SV *_sv = (sv); SvPV_nolen_const(_sv); })
3de3296f
AE
1704# define SvPVutf8x(sv, lp) ({SV *_sv = (sv); SvPVutf8(_sv, lp); })
1705# define SvPVbytex(sv, lp) ({SV *_sv = (sv); SvPVbyte(_sv, lp); })
002e4c74 1706# define SvPVbytex_nolen(sv) ({SV *_sv = (sv); SvPVbyte_nolen(_sv); })
a80f87c4 1707# define SvTRUE(sv) ( \
8990e307
LW
1708 !sv \
1709 ? 0 \
1710 : SvPOK(sv) \
a80f87c4
GS
1711 ? (({XPV *nxpv = (XPV*)SvANY(sv); \
1712 nxpv && \
c2f1de04 1713 (nxpv->xpv_cur > 1 || \
339049b0 1714 (nxpv->xpv_cur && *(sv)->sv_u.svu_pv != '0')); }) \
79072805
LW
1715 ? 1 \
1716 : 0) \
1717 : \
1718 SvIOK(sv) \
463ee0b2 1719 ? SvIVX(sv) != 0 \
79072805 1720 : SvNOK(sv) \
463ee0b2
LW
1721 ? SvNVX(sv) != 0.0 \
1722 : sv_2bool(sv) )
3de3296f 1723# define SvTRUEx(sv) ({SV *_sv = (sv); SvTRUE(_sv); })
baca2b92 1724
a80f87c4 1725#else /* __GNUC__ */
baca2b92 1726
a80f87c4
GS
1727/* These inlined macros use globals, which will require a thread
1728 * declaration in user code, so we avoid them under threads */
1729
3db8f154
MB
1730# define SvIVx(sv) ((PL_Sv = (sv)), SvIV(PL_Sv))
1731# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
1732# define SvNVx(sv) ((PL_Sv = (sv)), SvNV(PL_Sv))
1733# define SvPVx(sv, lp) ((PL_Sv = (sv)), SvPV(PL_Sv, lp))
32a5c6ec 1734# define SvPVx_const(sv, lp) ((PL_Sv = (sv)), SvPV_const(PL_Sv, lp))
002e4c74 1735# define SvPVx_nolen(sv) ((PL_Sv = (sv)), SvPV_nolen(PL_Sv))
5f1478c3 1736# define SvPVx_nolen_const(sv) ((PL_Sv = (sv)), SvPV_nolen_const(PL_Sv))
3db8f154
MB
1737# define SvPVutf8x(sv, lp) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, lp))
1738# define SvPVbytex(sv, lp) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, lp))
002e4c74 1739# define SvPVbytex_nolen(sv) ((PL_Sv = (sv)), SvPVbyte_nolen(PL_Sv))
3db8f154 1740# define SvTRUE(sv) ( \
a80f87c4
GS
1741 !sv \
1742 ? 0 \
1743 : SvPOK(sv) \
7b2c381c 1744 ? ((PL_Xpv = (XPV*)SvANY(PL_Sv = (sv))) && \
c2f1de04 1745 (PL_Xpv->xpv_cur > 1 || \
339049b0 1746 (PL_Xpv->xpv_cur && *PL_Sv->sv_u.svu_pv != '0')) \
a80f87c4
GS
1747 ? 1 \
1748 : 0) \
1749 : \
1750 SvIOK(sv) \
1751 ? SvIVX(sv) != 0 \
1752 : SvNOK(sv) \
1753 ? SvNVX(sv) != 0.0 \
1754 : sv_2bool(sv) )
3db8f154 1755# define SvTRUEx(sv) ((PL_Sv = (sv)), SvTRUE(PL_Sv))
baca2b92
DM
1756#endif /* __GNU__ */
1757
765f542d
NC
1758#define SvIsCOW(sv) ((SvFLAGS(sv) & (SVf_FAKE | SVf_READONLY)) == \
1759 (SVf_FAKE | SVf_READONLY))
46187eeb 1760#define SvIsCOW_shared_hash(sv) (SvIsCOW(sv) && SvLEN(sv) == 0)
baca2b92 1761
bdd68bc3
NC
1762#define SvSHARED_HEK_FROM_PV(pvx) \
1763 ((struct hek*)(pvx - STRUCT_OFFSET(struct hek, hek_key)))
0a356b31 1764#define SvSHARED_HASH(sv) (0 + SvSHARED_HEK_FROM_PV(SvPVX_const(sv))->hek_hash)
c158a4fd 1765
baca2b92
DM
1766/* flag values for sv_*_flags functions */
1767#define SV_IMMEDIATE_UNREF 1
1768#define SV_GMAGIC 2
765f542d 1769#define SV_COW_DROP_PV 4
88632417 1770#define SV_UTF8_NO_ENCODING 8
5fcdf167 1771#define SV_NOSTEAL 16
32a5c6ec
NC
1772#define SV_CONST_RETURN 32
1773#define SV_MUTABLE_RETURN 64
bddd5118 1774#define SV_SMAGIC 128
c1c21316 1775#define SV_HAS_TRAILING_NUL 256
34482cd6
NC
1776#define SV_COW_SHARED_HASH_KEYS 512
1777
1778/* The core is safe for this COW optimisation. XS code on CPAN may not be.
1779 So only default to doing the COW setup if we're in the core.
1780 */
1781#ifdef PERL_CORE
1782# ifndef SV_DO_COW_SVSETSV
1783# define SV_DO_COW_SVSETSV SV_COW_SHARED_HASH_KEYS
1784# endif
1785#endif
1786
1787#ifndef SV_DO_COW_SVSETSV
1788# define SV_DO_COW_SVSETSV 0
1789#endif
1790
765f542d 1791
5abc721d
NC
1792#define sv_unref(sv) sv_unref_flags(sv, 0)
1793#define sv_force_normal(sv) sv_force_normal_flags(sv, 0)
47518d95
NC
1794#define sv_usepvn(sv, p, l) sv_usepvn_flags(sv, p, l, 0)
1795#define sv_usepvn_mg(sv, p, l) sv_usepvn_flags(sv, p, l, SV_SMAGIC)
174c73e3 1796
46187eeb
NC
1797/* We are about to replace the SV's current value. So if it's copy on write
1798 we need to normalise it. Use the SV_COW_DROP_PV flag hint to say that
1799 the value is about to get thrown away, so drop the PV rather than go to
1800 the effort of making a read-write copy only for it to get immediately
1801 discarded. */
765f542d
NC
1802
1803#define SV_CHECK_THINKFIRST_COW_DROP(sv) if (SvTHINKFIRST(sv)) \
1804 sv_force_normal_flags(sv, SV_COW_DROP_PV)
46187eeb 1805
f8c7b90f 1806#ifdef PERL_OLD_COPY_ON_WRITE
46187eeb 1807# define SvRELEASE_IVX(sv) ((void)((SvFLAGS(sv) & (SVf_OOK|SVf_READONLY|SVf_FAKE)) \
b885210e 1808 && Perl_sv_release_IVX(aTHX_ sv)))
46187eeb 1809# define SvIsCOW_normal(sv) (SvIsCOW(sv) && SvLEN(sv))
b8f9541a
NC
1810#else
1811# define SvRELEASE_IVX(sv) SvOOK_off(sv)
f8c7b90f 1812#endif /* PERL_OLD_COPY_ON_WRITE */
ed252734
NC
1813
1814#define CAN_COW_MASK (SVs_OBJECT|SVs_GMG|SVs_SMG|SVs_RMG|SVf_IOK|SVf_NOK| \
1815 SVf_POK|SVf_ROK|SVp_IOK|SVp_NOK|SVp_POK|SVf_FAKE| \
dd2eae66 1816 SVf_OOK|SVf_BREAK|SVf_READONLY)
ed252734
NC
1817#define CAN_COW_FLAGS (SVp_POK|SVf_POK)
1818
765f542d
NC
1819#define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) \
1820 sv_force_normal_flags(sv, 0)
1821
1822
baca2b92
DM
1823/* all these 'functions' are now just macros */
1824
1825#define sv_pv(sv) SvPV_nolen(sv)
1826#define sv_pvutf8(sv) SvPVutf8_nolen(sv)
1827#define sv_pvbyte(sv) SvPVbyte_nolen(sv)
1828
1829#define sv_pvn_force_nomg(sv, lp) sv_pvn_force_flags(sv, lp, 0)
1830#define sv_utf8_upgrade_nomg(sv) sv_utf8_upgrade_flags(sv, 0)
1831#define sv_catpvn_nomg(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, 0)
34482cd6
NC
1832#define sv_setsv(dsv, ssv) \
1833 sv_setsv_flags(dsv, ssv, SV_GMAGIC|SV_DO_COW_SVSETSV)
1834#define sv_setsv_nomg(dsv, ssv) sv_setsv_flags(dsv, ssv, SV_DO_COW_SVSETSV)
baca2b92
DM
1835#define sv_catsv(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC)
1836#define sv_catsv_nomg(dsv, ssv) sv_catsv_flags(dsv, ssv, 0)
b347df82 1837#define sv_catsv_mg(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC|SV_SMAGIC)
baca2b92 1838#define sv_catpvn(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC)
b347df82
NC
1839#define sv_catpvn_mg(sv, sstr, slen) \
1840 sv_catpvn_flags(sv, sstr, slen, SV_GMAGIC|SV_SMAGIC);
baca2b92 1841#define sv_2pv(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC)
cb2f1b7b
NC
1842#define sv_2pv_nolen(sv) sv_2pv(sv, 0)
1843#define sv_2pvbyte_nolen(sv) sv_2pvbyte(sv, 0)
1844#define sv_2pvutf8_nolen(sv) sv_2pvutf8(sv, 0)
baca2b92
DM
1845#define sv_2pv_nomg(sv, lp) sv_2pv_flags(sv, lp, 0)
1846#define sv_pvn_force(sv, lp) sv_pvn_force_flags(sv, lp, SV_GMAGIC)
1847#define sv_utf8_upgrade(sv) sv_utf8_upgrade_flags(sv, SV_GMAGIC)
891f9566
YST
1848#define sv_2iv(sv) sv_2iv_flags(sv, SV_GMAGIC)
1849#define sv_2uv(sv) sv_2uv_flags(sv, SV_GMAGIC)
baca2b92 1850
db79b45b
JH
1851/* Should be named SvCatPVN_utf8_upgrade? */
1852#define sv_catpvn_utf8_upgrade(dsv, sstr, slen, nsv) \
1853 STMT_START { \
1854 if (!(nsv)) \
1855 nsv = sv_2mortal(newSVpvn(sstr, slen)); \
1856 else \
1857 sv_setpvn(nsv, sstr, slen); \
1858 SvUTF8_off(nsv); \
1859 sv_utf8_upgrade(nsv); \
1860 sv_catsv(dsv, nsv); \
1861 } STMT_END
79072805 1862
954c1994
GS
1863/*
1864=for apidoc Am|SV*|newRV_inc|SV* sv
1865
1866Creates an RV wrapper for an SV. The reference count for the original SV is
1867incremented.
1868
1869=cut
1870*/
1871
5f05dabc 1872#define newRV_inc(sv) newRV(sv)
5f05dabc 1873
ef50df4b 1874/* the following macros update any magic values this sv is associated with */
79072805 1875
954c1994 1876/*
ccfc67b7
JH
1877=head1 Magical Functions
1878
954c1994
GS
1879=for apidoc Am|void|SvGETMAGIC|SV* sv
1880Invokes C<mg_get> on an SV if it has 'get' magic. This macro evaluates its
1881argument more than once.
1882
1883=for apidoc Am|void|SvSETMAGIC|SV* sv
1884Invokes C<mg_set> on an SV if it has 'set' magic. This macro evaluates its
1885argument more than once.
1886
1887=for apidoc Am|void|SvSetSV|SV* dsb|SV* ssv
1888Calls C<sv_setsv> if dsv is not the same as ssv. May evaluate arguments
1889more than once.
1890
1891=for apidoc Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
1892Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
1893ssv. May evaluate arguments more than once.
1894
645c22ef
DM
1895=for apidoc Am|void|SvSetMagicSV|SV* dsb|SV* ssv
1896Like C<SvSetSV>, but does any set magic required afterwards.
1897
1898=for apidoc Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
80663158 1899Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
645c22ef 1900
68795e93
NIS
1901=for apidoc Am|void|SvSHARE|SV* sv
1902Arranges for sv to be shared between threads if a suitable module
1903has been loaded.
1904
1905=for apidoc Am|void|SvLOCK|SV* sv
1906Arranges for a mutual exclusion lock to be obtained on sv if a suitable module
1907has been loaded.
1908
1909=for apidoc Am|void|SvUNLOCK|SV* sv
1910Releases a mutual exclusion lock on sv if a suitable module
1911has been loaded.
1912
ccfc67b7
JH
1913=head1 SV Manipulation Functions
1914
679ac26e 1915=for apidoc Am|char *|SvGROW|SV* sv|STRLEN len
954c1994
GS
1916Expands the character buffer in the SV so that it has room for the
1917indicated number of bytes (remember to reserve space for an extra trailing
8cf8f3d1 1918NUL character). Calls C<sv_grow> to perform the expansion if necessary.
954c1994
GS
1919Returns a pointer to the character buffer.
1920
1921=cut
1922*/
1923
68795e93
NIS
1924#define SvSHARE(sv) CALL_FPTR(PL_sharehook)(aTHX_ sv)
1925#define SvLOCK(sv) CALL_FPTR(PL_lockhook)(aTHX_ sv)
1926#define SvUNLOCK(sv) CALL_FPTR(PL_unlockhook)(aTHX_ sv)
1927
189b2af5
GS
1928#define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
1929#define SvSETMAGIC(x) STMT_START { if (SvSMAGICAL(x)) mg_set(x); } STMT_END
79072805 1930
54310121 1931#define SvSetSV_and(dst,src,finally) \
189b2af5 1932 STMT_START { \
54310121
PP
1933 if ((dst) != (src)) { \
1934 sv_setsv(dst, src); \
1935 finally; \
189b2af5
GS
1936 } \
1937 } STMT_END
54310121 1938#define SvSetSV_nosteal_and(dst,src,finally) \
189b2af5 1939 STMT_START { \
8ebc5c01 1940 if ((dst) != (src)) { \
34482cd6 1941 sv_setsv_flags(dst, src, SV_GMAGIC | SV_NOSTEAL | SV_DO_COW_SVSETSV); \
54310121 1942 finally; \
189b2af5
GS
1943 } \
1944 } STMT_END
79072805 1945
54310121 1946#define SvSetSV(dst,src) \
c9d716f7 1947 SvSetSV_and(dst,src,/*nothing*/;)
54310121 1948#define SvSetSV_nosteal(dst,src) \
c9d716f7 1949 SvSetSV_nosteal_and(dst,src,/*nothing*/;)
54310121
PP
1950
1951#define SvSetMagicSV(dst,src) \
1952 SvSetSV_and(dst,src,SvSETMAGIC(dst))
1953#define SvSetMagicSV_nosteal(dst,src) \
1954 SvSetSV_nosteal_and(dst,src,SvSETMAGIC(dst))
1955
db79b45b 1956
1045810a 1957#if !defined(SKIP_DEBUGGING)
79072805 1958#define SvPEEK(sv) sv_peek(sv)
3967c732
JD
1959#else
1960#define SvPEEK(sv) ""
1961#endif
79072805 1962
5dc8bdac 1963#define SvIMMORTAL(sv) ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes || (sv)==&PL_sv_no || (sv)==&PL_sv_placeholder)
36477c24 1964
3280af22 1965#define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
54310121 1966
79072805 1967#define isGV(sv) (SvTYPE(sv) == SVt_PVGV)
f7877b28
NC
1968/* If I give every macro argument a different name, then there won't be bugs
1969 where nested macros get confused. Been there, done that. */
1970#define isGV_with_GP(pwadak) \
1971 (((SvFLAGS(pwadak) & (SVp_POK|SVp_SCREAM)) == SVp_SCREAM) \
1972 && (SvTYPE(pwadak) == SVt_PVGV || SvTYPE(pwadak) == SVt_PVLV))
79072805 1973
933fea7f 1974#define SvGROW(sv,len) (SvLEN(sv) < (len) ? sv_grow(sv,len) : SvPVX(sv))
5902b6a9
NC
1975#define SvGROW_mutable(sv,len) \
1976 (SvLEN(sv) < (len) ? sv_grow(sv,len) : SvPVX_mutable(sv))
933fea7f 1977#define Sv_Grow sv_grow
3d35f11b 1978
a0739874
DM
1979#define CLONEf_COPY_STACKS 1
1980#define CLONEf_KEEP_PTR_TABLE 2
c43294b8 1981#define CLONEf_CLONE_HOST 4
0405e91e 1982#define CLONEf_JOIN_IN 8
a0739874 1983
8cf8f3d1 1984struct clone_params {
d2d73c3e
AB
1985 AV* stashes;
1986 UV flags;
59b40662 1987 PerlInterpreter *proto_perl;
8cf8f3d1 1988};
102d3b8a
NC
1989
1990/*
1991 * Local variables:
1992 * c-indentation-style: bsd
1993 * c-basic-offset: 4
1994 * indent-tabs-mode: t
1995 * End:
1996 *
1997 * ex: set ts=8 sts=4 sw=4 noet:
1998 */