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