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