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