[Fwd: CPAN Upload: J/JP/JPEACOCK/version-0.47.tar.gz]
[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,
1d325971 4 * 2000, 2001, 2002, 2003, 2004, 2005 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 */
51 SVt_PV, /* 4 */
52 SVt_PVIV, /* 5 */
53 SVt_PVNV, /* 6 */
54 SVt_PVMG, /* 7 */
55 SVt_PVBM, /* 8 */
4ce457a6 56 SVt_PVGV, /* 9 */
57 SVt_PVLV, /* 10 */
58 SVt_PVAV, /* 11 */
59 SVt_PVHV, /* 12 */
60 SVt_PVCV, /* 13 */
a0d0e21e 61 SVt_PVFM, /* 14 */
62 SVt_PVIO /* 15 */
79072805 63} svtype;
64
43e6e717 65
66/* typedefs to eliminate some typing */
67typedef struct he HE;
68typedef struct hek HEK;
69
79072805 70/* Using C's structural equivalence to help emulate C++ inheritance here... */
71
5e045b90 72struct STRUCT_SV { /* struct sv { */
463ee0b2 73 void* sv_any; /* pointer to something */
79072805 74 U32 sv_refcnt; /* how many references to us */
8990e307 75 U32 sv_flags; /* what we are */
7b2c381c 76 union {
339049b0 77 IV svu_iv;
78 UV svu_uv;
79 SV* svu_rv; /* pointer to another SV */
80 char* svu_pv; /* pointer to malloced string */
81 SV** svu_array;
43e6e717 82 HE** svu_hash;
7b2c381c 83 } sv_u;
fd0854ff 84#ifdef DEBUG_LEAKING_SCALARS
85 unsigned sv_debug_optype:9; /* the type of OP that allocated us */
86 unsigned sv_debug_inpad:1; /* was allocated in a pad for an OP */
87 unsigned sv_debug_cloned:1; /* was cloned for an ithread */
88 unsigned sv_debug_line:16; /* the line where we were allocated */
89 char * sv_debug_file; /* the file where we were allocated */
90#endif
79072805 91};
92
93struct gv {
463ee0b2 94 XPVGV* sv_any; /* pointer to something */
79072805 95 U32 sv_refcnt; /* how many references to us */
8990e307 96 U32 sv_flags; /* what we are */
7b2c381c 97 union {
339049b0 98 IV svu_iv;
99 UV svu_uv;
100 SV* svu_rv;
101 char* svu_pv;
102 SV** svu_array;
43e6e717 103 HE** svu_hash;
7b2c381c 104 } sv_u;
79072805 105};
106
107struct cv {
232e078e 108 XPVCV* sv_any; /* pointer to something */
79072805 109 U32 sv_refcnt; /* how many references to us */
8990e307 110 U32 sv_flags; /* what we are */
7b2c381c 111 union {
339049b0 112 IV svu_iv;
113 UV svu_uv;
114 SV* svu_rv;
115 char* svu_pv;
116 SV** svu_array;
43e6e717 117 HE** svu_hash;
7b2c381c 118 } sv_u;
79072805 119};
120
121struct av {
463ee0b2 122 XPVAV* sv_any; /* pointer to something */
79072805 123 U32 sv_refcnt; /* how many references to us */
8990e307 124 U32 sv_flags; /* what we are */
7b2c381c 125 union {
339049b0 126 IV svu_iv;
127 UV svu_uv;
128 SV* svu_rv;
129 char* svu_pv; /* pointer to first array element */
130 SV** svu_array;
43e6e717 131 HE** svu_hash;
7b2c381c 132 } sv_u;
79072805 133};
134
135struct hv {
463ee0b2 136 XPVHV* sv_any; /* pointer to something */
79072805 137 U32 sv_refcnt; /* how many references to us */
8990e307 138 U32 sv_flags; /* what we are */
7b2c381c 139 union {
339049b0 140 IV svu_iv;
141 UV svu_uv;
142 SV* svu_rv;
143 char* svu_pv;
144 SV** svu_array;
43e6e717 145 HE** svu_hash;
7b2c381c 146 } sv_u;
8990e307 147};
148
149struct io {
150 XPVIO* sv_any; /* pointer to something */
151 U32 sv_refcnt; /* how many references to us */
152 U32 sv_flags; /* what we are */
7b2c381c 153 union {
339049b0 154 IV svu_iv;
155 UV svu_uv;
156 SV* svu_rv;
157 char* svu_pv;
158 SV** svu_array;
43e6e717 159 HE** svu_hash;
7b2c381c 160 } sv_u;
79072805 161};
162
954c1994 163/*
ccfc67b7 164=head1 SV Manipulation Functions
165
954c1994 166=for apidoc Am|U32|SvREFCNT|SV* sv
167Returns the value of the object's reference count.
168
169=for apidoc Am|SV*|SvREFCNT_inc|SV* sv
170Increments the reference count of the given SV.
171
172=for apidoc Am|void|SvREFCNT_dec|SV* sv
173Decrements the reference count of the given SV.
174
175=for apidoc Am|svtype|SvTYPE|SV* sv
176Returns the type of the SV. See C<svtype>.
177
178=for apidoc Am|void|SvUPGRADE|SV* sv|svtype type
179Used to upgrade an SV to a more complex form. Uses C<sv_upgrade> to
180perform the upgrade if necessary. See C<svtype>.
181
182=cut
183*/
184
463ee0b2 185#define SvANY(sv) (sv)->sv_any
79072805 186#define SvFLAGS(sv) (sv)->sv_flags
aeea060c 187#define SvREFCNT(sv) (sv)->sv_refcnt
a863c7d1 188
93189314 189#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
dce16143 190# define SvREFCNT_inc(sv) \
191 ({ \
a3b680e6 192 SV * const _sv = (SV*)(sv); \
3de3296f 193 if (_sv) \
194 (SvREFCNT(_sv))++; \
195 _sv; \
dce16143 196 })
8990e307 197#else
3db8f154 198# define SvREFCNT_inc(sv) \
4db098f4 199 ((PL_Sv=(SV*)(sv)), (PL_Sv && ++(SvREFCNT(PL_Sv))), (SV*)PL_Sv)
8990e307 200#endif
201
8c4d3c90 202#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
203# define SvREFCNT_dec(sv) \
204 ({ \
a3b680e6 205 SV * const _sv = (SV*)(sv); \
3de3296f 206 if (_sv) { \
207 if (SvREFCNT(_sv)) { \
208 if (--(SvREFCNT(_sv)) == 0) \
209 Perl_sv_free2(aTHX_ _sv); \
8c4d3c90 210 } else { \
3de3296f 211 sv_free(_sv); \
8c4d3c90 212 } \
213 } \
214 })
215#else
91f3b821 216#define SvREFCNT_dec(sv) sv_free((SV*)(sv))
8c4d3c90 217#endif
a863c7d1 218
8990e307 219#define SVTYPEMASK 0xff
220#define SvTYPE(sv) ((sv)->sv_flags & SVTYPEMASK)
79072805 221
63f97190 222#define SvUPGRADE(sv, mt) (SvTYPE(sv) >= (mt) || (sv_upgrade(sv, mt), 1))
79072805 223
d9d18af6 224#define SVs_PADSTALE 0x00000100 /* lexical has gone out of scope */
8990e307 225#define SVs_PADTMP 0x00000200 /* in use as tmp */
226#define SVs_PADMY 0x00000400 /* in use a "my" variable */
227#define SVs_TEMP 0x00000800 /* string is stealable? */
228#define SVs_OBJECT 0x00001000 /* is "blessed" */
229#define SVs_GMG 0x00002000 /* has magical get method */
230#define SVs_SMG 0x00004000 /* has magical set method */
231#define SVs_RMG 0x00008000 /* has random magical methods */
232
233#define SVf_IOK 0x00010000 /* has valid public integer value */
234#define SVf_NOK 0x00020000 /* has valid public numeric value */
235#define SVf_POK 0x00040000 /* has valid public pointer value */
236#define SVf_ROK 0x00080000 /* has a valid reference pointer */
a0d0e21e 237
748a9306 238#define SVf_FAKE 0x00100000 /* glob or lexical is just a copy */
b79f7545 239#define SVf_OOK 0x00200000 /* has valid offset value
240 For a PVHV this means that a
241 hv_aux struct is present after the
242 main array */
645c22ef 243#define SVf_BREAK 0x00400000 /* refcnt is artificially low - used
244 * by SV's in final arena cleanup */
8990e307 245#define SVf_READONLY 0x00800000 /* may not be modified */
246
a0d0e21e 247
8990e307 248#define SVp_IOK 0x01000000 /* has valid non-public integer value */
249#define SVp_NOK 0x02000000 /* has valid non-public numeric value */
250#define SVp_POK 0x04000000 /* has valid non-public pointer value */
251#define SVp_SCREAM 0x08000000 /* has been studied? */
252
446eaa42 253#define SVf_UTF8 0x20000000 /* SvPV is UTF-8 encoded */
7a5fd60d 254/* Ensure this value does not clash with the GV_ADD* flags in gv.h */
5bc28da9 255
430eacda 256#define SVf_THINKFIRST (SVf_READONLY|SVf_ROK|SVf_FAKE)
5bc28da9 257
a0d0e21e 258#define SVf_OK (SVf_IOK|SVf_NOK|SVf_POK|SVf_ROK| \
259 SVp_IOK|SVp_NOK|SVp_POK)
260
9e7bc3e8 261#define SVf_AMAGIC 0x10000000 /* has magical overloaded methods */
a0d0e21e 262
7b2a0f84 263#define PRIVSHIFT 8 /* (SVp_?OK >> PRIVSHIFT) == SVf_?OK */
8990e307 264
265/* Some private flags. */
266
f472eb5c 267/* SVpad_OUR may be set on SVt_PV{NV,MG,GV} types */
032d6771 268#define SVpad_OUR 0x80000000 /* pad name is "our" instead of "my" */
524189f1 269#define SVpad_TYPED 0x40000000 /* Typed Lexical */
032d6771 270
25da4f38 271#define SVf_IVisUV 0x80000000 /* use XPVUV instead of XPVIV */
272
273#define SVpfm_COMPILED 0x80000000 /* FORMLINE is compiled */
8990e307 274
275#define SVpbm_VALID 0x80000000
bbce6d69 276#define SVpbm_TAIL 0x40000000
8990e307 277
25da4f38 278#define SVrepl_EVAL 0x40000000 /* Replacement part of s///e */
279
9660f481 280#define SVphv_CLONEABLE 0x08000000 /* for stashes: clone its objects */
4b5190b5 281#define SVphv_REHASH 0x10000000 /* HV is recalculating hash values */
6bfc225d 282#define SVphv_SHAREKEYS 0x20000000 /* keys live on shared string table */
51594c39 283#define SVphv_LAZYDEL 0x40000000 /* entry in xhv_eiter must be deleted */
19692e8d 284#define SVphv_HASKFLAGS 0x80000000 /* keys have flag byte after hash */
bf6bd887 285
810b8aa5 286#define SVprv_WEAKREF 0x80000000 /* Weak reference */
287
11ca45c0 288#define SVpav_REAL 0x40000000 /* free old entries */
289#define SVpav_REIFY 0x80000000 /* can become real */
290
79072805 291struct xpv {
311a25d9 292 NV xnv_nv; /* numeric value, if any */
339049b0 293 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 294 STRLEN xpv_len; /* allocated size */
79072805 295};
296
9f1501b2 297#if 0
59813432 298typedef struct xpv xpv_allocated;
9f1501b2 299#else
300typedef struct {
339049b0 301 STRLEN xpv_cur; /* length of svu_pv as a C string */
9f1501b2 302 STRLEN xpv_len; /* allocated size */
303} xpv_allocated;
304#endif
59813432 305
79072805 306struct xpviv {
311a25d9 307 NV xnv_nv; /* numeric value, if any */
339049b0 308 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 309 STRLEN xpv_len; /* allocated size */
311a25d9 310 union {
311 IV xivu_iv; /* integer value or pv offset */
312 UV xivu_uv;
313 void * xivu_p1;
314 } xiv_u;
79072805 315};
316
311a25d9 317#if 0
318typedef struct xpviv xpviv_allocated;
319#else
320typedef struct {
321 STRLEN xpv_cur; /* length of svu_pv as a C string */
322 STRLEN xpv_len; /* allocated size */
323 union {
324 IV xivu_iv; /* integer value or pv offset */
325 UV xivu_uv;
326 void * xivu_p1;
327 } xiv_u;
328} xpviv_allocated;
329#endif
330
331#define xiv_iv xiv_u.xivu_iv
332
ff68c719 333struct xpvuv {
311a25d9 334 NV xnv_nv; /* numeric value, if any */
339049b0 335 STRLEN xpv_cur; /* length of svu_pv as a C string */
ff68c719 336 STRLEN xpv_len; /* allocated size */
311a25d9 337 union {
338 IV xuvu_iv;
339 UV xuvu_uv; /* unsigned value or pv offset */
340 void * xuvu_p1;
341 } xuv_u;
ff68c719 342};
343
311a25d9 344#define xuv_uv xuv_u.xuvu_uv
345
79072805 346struct xpvnv {
311a25d9 347 NV xnv_nv; /* numeric value, if any */
339049b0 348 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 349 STRLEN xpv_len; /* allocated size */
e4305a63 350 union {
311a25d9 351 IV xivu_iv; /* integer value or pv offset */
352 UV xivu_uv;
353 void * xivu_p1;
354 } xiv_u;
79072805 355};
356
6ee623d5 357/* These structure must match the beginning of struct xpvhv in hv.h. */
79072805 358struct xpvmg {
311a25d9 359 NV xnv_nv; /* numeric value, if any */
339049b0 360 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 361 STRLEN xpv_len; /* allocated size */
e4305a63 362 union {
311a25d9 363 IV xivu_iv; /* integer value or pv offset */
364 UV xivu_uv;
365 void * xivu_p1;
366 } xiv_u;
79072805 367 MAGIC* xmg_magic; /* linked list of magicalness */
368 HV* xmg_stash; /* class package */
369};
370
371struct xpvlv {
311a25d9 372 NV xnv_nv; /* numeric value, if any */
339049b0 373 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 374 STRLEN xpv_len; /* allocated size */
e4305a63 375 union {
311a25d9 376 IV xivu_iv; /* integer value or pv offset */
377 UV xivu_uv;
378 void * xivu_p1;
379 } xiv_u;
79072805 380 MAGIC* xmg_magic; /* linked list of magicalness */
381 HV* xmg_stash; /* class package */
8990e307 382
4ce457a6 383 /* a full glob fits into this */
384 GP* xgv_gp;
385 char* xgv_name;
386 STRLEN xgv_namelen;
387 HV* xgv_stash;
388 U8 xgv_flags;
389
79072805 390 STRLEN xlv_targoff;
391 STRLEN xlv_targlen;
392 SV* xlv_targ;
dd28f7bb 393 char xlv_type; /* k=keys .=pos x=substr v=vec /=join/re
394 * y=alem/helem/iter t=tie T=tied HE */
79072805 395};
396
397struct xpvgv {
311a25d9 398 NV xnv_nv; /* numeric value, if any */
339049b0 399 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 400 STRLEN xpv_len; /* allocated size */
e4305a63 401 union {
311a25d9 402 IV xivu_iv; /* integer value or pv offset */
403 UV xivu_uv;
404 void * xivu_p1;
405 } xiv_u;
79072805 406 MAGIC* xmg_magic; /* linked list of magicalness */
407 HV* xmg_stash; /* class package */
8990e307 408
79072805 409 GP* xgv_gp;
410 char* xgv_name;
411 STRLEN xgv_namelen;
412 HV* xgv_stash;
a5f75d66 413 U8 xgv_flags;
79072805 414};
415
416struct xpvbm {
311a25d9 417 NV xnv_nv; /* numeric value, if any */
339049b0 418 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 419 STRLEN xpv_len; /* allocated size */
e4305a63 420 union {
311a25d9 421 IV xivu_iv; /* integer value or pv offset */
422 UV xivu_uv;
423 void * xivu_p1;
424 } xiv_u;
79072805 425 MAGIC* xmg_magic; /* linked list of magicalness */
426 HV* xmg_stash; /* class package */
8990e307 427
79072805 428 I32 xbm_useful; /* is this constant pattern being useful? */
429 U16 xbm_previous; /* how many characters in string before rare? */
430 U8 xbm_rare; /* rarest character in string */
431};
432
fd40b977 433/* This structure must match XPVCV in cv.h */
44a8e56a 434
77a005ab 435typedef U16 cv_flags_t;
436
79072805 437struct xpvfm {
311a25d9 438 NV xnv_nv; /* numeric value, if any */
339049b0 439 STRLEN xpv_cur; /* length of svu_pv as a C string */
ed6116ce 440 STRLEN xpv_len; /* allocated size */
e4305a63 441 union {
311a25d9 442 IV xivu_iv; /* integer value or pv offset */
443 UV xivu_uv;
444 void * xivu_p1;
445 } xiv_u;
79072805 446 MAGIC* xmg_magic; /* linked list of magicalness */
447 HV* xmg_stash; /* class package */
8990e307 448
79072805 449 HV * xcv_stash;
450 OP * xcv_start;
451 OP * xcv_root;
acfe0abc 452 void (*xcv_xsub)(pTHX_ CV*);
a0d0e21e 453 ANY xcv_xsubany;
454 GV * xcv_gv;
57843af0 455 char * xcv_file;
b195d487 456 long xcv_depth; /* >= 2 indicates recursive call */
79072805 457 AV * xcv_padlist;
748a9306 458 CV * xcv_outside;
77a005ab 459 cv_flags_t xcv_flags;
a3985cdc 460 U32 xcv_outside_seq; /* the COP sequence (at the point of our
461 * compilation) in the lexically enclosing
462 * sub */
11a7ac70 463 IV xfm_lines;
79072805 464};
465
8990e307 466struct xpvio {
311a25d9 467 NV xnv_nv; /* numeric value, if any */
339049b0 468 STRLEN xpv_cur; /* length of svu_pv as a C string */
8990e307 469 STRLEN xpv_len; /* allocated size */
e4305a63 470 union {
311a25d9 471 IV xivu_iv; /* integer value or pv offset */
472 UV xivu_uv;
473 void * xivu_p1;
474 } xiv_u;
8990e307 475 MAGIC* xmg_magic; /* linked list of magicalness */
476 HV* xmg_stash; /* class package */
477
760ac839 478 PerlIO * xio_ifp; /* ifp and ofp are normally the same */
479 PerlIO * xio_ofp; /* but sockets need separate streams */
4755096e 480 /* Cray addresses everything by word boundaries (64 bits) and
481 * code and data pointers cannot be mixed (which is exactly what
482 * Perl_filter_add() tries to do with the dirp), hence the following
483 * union trick (as suggested by Gurusamy Sarathy).
484 * For further information see Geir Johansen's problem report titled
485 [ID 20000612.002] Perl problem on Cray system
486 * The any pointer (known as IoANY()) will also be a good place
487 * to hang any IO disciplines to.
488 */
489 union {
490 DIR * xiou_dirp; /* for opendir, readdir, etc */
491 void * xiou_any; /* for alignment */
492 } xio_dirpu;
11a7ac70 493 IV xio_lines; /* $. */
494 IV xio_page; /* $% */
495 IV xio_page_len; /* $= */
496 IV xio_lines_left; /* $- */
8990e307 497 char * xio_top_name; /* $^ */
498 GV * xio_top_gv; /* $^ */
499 char * xio_fmt_name; /* $~ */
500 GV * xio_fmt_gv; /* $~ */
501 char * xio_bottom_name;/* $^B */
502 GV * xio_bottom_gv; /* $^B */
503 short xio_subprocess; /* -| or |- */
504 char xio_type;
505 char xio_flags;
506};
4755096e 507#define xio_dirp xio_dirpu.xiou_dirp
508#define xio_any xio_dirpu.xiou_any
8990e307 509
e0c19803 510#define IOf_ARGV 1 /* this fp iterates over ARGV */
511#define IOf_START 2 /* check for null ARGV and substitute '-' */
512#define IOf_FLUSH 4 /* this fp wants a flush after write op */
513#define IOf_DIDTOP 8 /* just did top of form */
514#define IOf_UNTAINT 16 /* consider this fp (and its data) "safe" */
515#define IOf_NOLINE 32 /* slurped a pseudo-line from empty file */
516#define IOf_FAKE_DIRP 64 /* xio_dirp is fake (source filters kludge) */
8990e307 517
ed6116ce 518/* The following macros define implementation-independent predicates on SVs. */
519
954c1994 520/*
521=for apidoc Am|bool|SvNIOK|SV* sv
522Returns a boolean indicating whether the SV contains a number, integer or
523double.
524
525=for apidoc Am|bool|SvNIOKp|SV* sv
526Returns a boolean indicating whether the SV contains a number, integer or
527double. Checks the B<private> setting. Use C<SvNIOK>.
528
529=for apidoc Am|void|SvNIOK_off|SV* sv
530Unsets the NV/IV status of an SV.
531
532=for apidoc Am|bool|SvOK|SV* sv
9adebda4 533Returns a boolean indicating whether the value is an SV. It also tells
534whether the value is defined or not.
954c1994 535
536=for apidoc Am|bool|SvIOKp|SV* sv
537Returns a boolean indicating whether the SV contains an integer. Checks
538the B<private> setting. Use C<SvIOK>.
539
540=for apidoc Am|bool|SvNOKp|SV* sv
541Returns a boolean indicating whether the SV contains a double. Checks the
542B<private> setting. Use C<SvNOK>.
543
544=for apidoc Am|bool|SvPOKp|SV* sv
545Returns a boolean indicating whether the SV contains a character string.
546Checks the B<private> setting. Use C<SvPOK>.
547
548=for apidoc Am|bool|SvIOK|SV* sv
549Returns a boolean indicating whether the SV contains an integer.
550
551=for apidoc Am|void|SvIOK_on|SV* sv
552Tells an SV that it is an integer.
553
554=for apidoc Am|void|SvIOK_off|SV* sv
555Unsets the IV status of an SV.
556
557=for apidoc Am|void|SvIOK_only|SV* sv
558Tells an SV that it is an integer and disables all other OK bits.
559
e331fc52 560=for apidoc Am|void|SvIOK_only_UV|SV* sv
561Tells and SV that it is an unsigned integer and disables all other OK bits.
562
12fa07df 563=for apidoc Am|bool|SvIOK_UV|SV* sv
e331fc52 564Returns a boolean indicating whether the SV contains an unsigned integer.
565
28e5dec8 566=for apidoc Am|void|SvUOK|SV* sv
567Returns a boolean indicating whether the SV contains an unsigned integer.
568
12fa07df 569=for apidoc Am|bool|SvIOK_notUV|SV* sv
d1be9408 570Returns a boolean indicating whether the SV contains a signed integer.
e331fc52 571
954c1994 572=for apidoc Am|bool|SvNOK|SV* sv
573Returns a boolean indicating whether the SV contains a double.
574
575=for apidoc Am|void|SvNOK_on|SV* sv
576Tells an SV that it is a double.
577
578=for apidoc Am|void|SvNOK_off|SV* sv
579Unsets the NV status of an SV.
580
581=for apidoc Am|void|SvNOK_only|SV* sv
582Tells an SV that it is a double and disables all other OK bits.
583
584=for apidoc Am|bool|SvPOK|SV* sv
585Returns a boolean indicating whether the SV contains a character
586string.
587
588=for apidoc Am|void|SvPOK_on|SV* sv
589Tells an SV that it is a string.
590
591=for apidoc Am|void|SvPOK_off|SV* sv
592Unsets the PV status of an SV.
593
594=for apidoc Am|void|SvPOK_only|SV* sv
595Tells an SV that it is a string and disables all other OK bits.
1e54db1a 596Will also turn off the UTF-8 status.
954c1994 597
b0f01acb 598=for apidoc Am|bool|SvVOK|SV* sv
599Returns a boolean indicating whether the SV contains a v-string.
600
954c1994 601=for apidoc Am|bool|SvOOK|SV* sv
602Returns a boolean indicating whether the SvIVX is a valid offset value for
603the SvPVX. This hack is used internally to speed up removal of characters
604from the beginning of a SvPV. When SvOOK is true, then the start of the
605allocated string buffer is really (SvPVX - SvIVX).
606
607=for apidoc Am|bool|SvROK|SV* sv
608Tests if the SV is an RV.
609
610=for apidoc Am|void|SvROK_on|SV* sv
611Tells an SV that it is an RV.
612
613=for apidoc Am|void|SvROK_off|SV* sv
614Unsets the RV status of an SV.
615
616=for apidoc Am|SV*|SvRV|SV* sv
617Dereferences an RV to return the SV.
618
619=for apidoc Am|IV|SvIVX|SV* sv
645c22ef 620Returns the raw value in the SV's IV slot, without checks or conversions.
621Only use when you are sure SvIOK is true. See also C<SvIV()>.
954c1994 622
623=for apidoc Am|UV|SvUVX|SV* sv
645c22ef 624Returns the raw value in the SV's UV slot, without checks or conversions.
625Only use when you are sure SvIOK is true. See also C<SvUV()>.
954c1994 626
627=for apidoc Am|NV|SvNVX|SV* sv
645c22ef 628Returns the raw value in the SV's NV slot, without checks or conversions.
629Only use when you are sure SvNOK is true. See also C<SvNV()>.
954c1994 630
631=for apidoc Am|char*|SvPVX|SV* sv
645c22ef 632Returns a pointer to the physical string in the SV. The SV must contain a
954c1994 633string.
634
635=for apidoc Am|STRLEN|SvCUR|SV* sv
636Returns the length of the string which is in the SV. See C<SvLEN>.
637
638=for apidoc Am|STRLEN|SvLEN|SV* sv
659239a4 639Returns the size of the string buffer in the SV, not including any part
640attributable to C<SvOOK>. See C<SvCUR>.
954c1994 641
642=for apidoc Am|char*|SvEND|SV* sv
643Returns a pointer to the last character in the string which is in the SV.
644See C<SvCUR>. Access the character as *(SvEND(sv)).
645
646=for apidoc Am|HV*|SvSTASH|SV* sv
647Returns the stash of the SV.
648
672994ce 649=for apidoc Am|void|SvIV_set|SV* sv|IV val
20799e15 650Set the value of the IV pointer in sv to val. It is possible to perform
651the same function of this macro with an lvalue assignment to C<SvIVX>.
652With future Perls, however, it will be more efficient to use
653C<SvIV_set> instead of the lvalue assignment to C<SvIVX>.
672994ce 654
655=for apidoc Am|void|SvNV_set|SV* sv|NV val
20799e15 656Set the value of the NV pointer in sv to val. See C<SvIV_set>.
672994ce 657
658=for apidoc Am|void|SvPV_set|SV* sv|char* val
20799e15 659Set the value of the PV pointer in sv to val. See C<SvIV_set>.
672994ce 660
661=for apidoc Am|void|SvUV_set|SV* sv|UV val
20799e15 662Set the value of the UV pointer in sv to val. See C<SvIV_set>.
672994ce 663
664=for apidoc Am|void|SvRV_set|SV* sv|SV* val
20799e15 665Set the value of the RV pointer in sv to val. See C<SvIV_set>.
672994ce 666
667=for apidoc Am|void|SvMAGIC_set|SV* sv|MAGIC* val
20799e15 668Set the value of the MAGIC pointer in sv to val. See C<SvIV_set>.
672994ce 669
670=for apidoc Am|void|SvSTASH_set|SV* sv|STASH* val
20799e15 671Set the value of the STASH pointer in sv to val. See C<SvIV_set>.
672994ce 672
954c1994 673=for apidoc Am|void|SvCUR_set|SV* sv|STRLEN len
20799e15 674Set the current length of the string which is in the SV. See C<SvCUR>
675and C<SvIV_set>.
672994ce 676
677=for apidoc Am|void|SvLEN_set|SV* sv|STRLEN len
20799e15 678Set the actual length of the string which is in the SV. See C<SvIV_set>.
954c1994 679
680=cut
681*/
682
79072805 683#define SvNIOK(sv) (SvFLAGS(sv) & (SVf_IOK|SVf_NOK))
748a9306 684#define SvNIOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK))
a0d0e21e 685#define SvNIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK| \
25da4f38 686 SVp_IOK|SVp_NOK|SVf_IVisUV))
79072805 687
5dc8bdac 688#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
29e97371 689#define assert_not_ROK(sv) ({assert(!SvROK(sv) || !SvRV(sv));}),
906ed6d6 690#else
54866b45 691#define assert_not_ROK(sv)
906ed6d6 692#endif
693
463ee0b2 694#define SvOK(sv) (SvFLAGS(sv) & SVf_OK)
54866b45 695#define SvOK_off(sv) (assert_not_ROK(sv) \
906ed6d6 696 SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \
d41ff1b8 697 SVf_IVisUV|SVf_UTF8), \
25da4f38 698 SvOOK_off(sv))
54866b45 699#define SvOK_off_exc_UV(sv) (assert_not_ROK(sv) \
906ed6d6 700 SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \
d41ff1b8 701 SVf_UTF8), \
a0d0e21e 702 SvOOK_off(sv))
79072805 703
8990e307 704#define SvOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK))
705#define SvIOKp(sv) (SvFLAGS(sv) & SVp_IOK)
46187eeb 706#define SvIOKp_on(sv) (SvRELEASE_IVX(sv), \
765f542d 707 SvFLAGS(sv) |= SVp_IOK)
8990e307 708#define SvNOKp(sv) (SvFLAGS(sv) & SVp_NOK)
709#define SvNOKp_on(sv) (SvFLAGS(sv) |= SVp_NOK)
710#define SvPOKp(sv) (SvFLAGS(sv) & SVp_POK)
54866b45 711#define SvPOKp_on(sv) (assert_not_ROK(sv) \
906ed6d6 712 SvFLAGS(sv) |= SVp_POK)
463ee0b2 713
79072805 714#define SvIOK(sv) (SvFLAGS(sv) & SVf_IOK)
46187eeb 715#define SvIOK_on(sv) (SvRELEASE_IVX(sv), \
765f542d 716 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
25da4f38 717#define SvIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVp_IOK|SVf_IVisUV))
0c34ef67 718#define SvIOK_only(sv) (SvOK_off(sv), \
a0d0e21e 719 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
0c34ef67 720#define SvIOK_only_UV(sv) (SvOK_off_exc_UV(sv), \
25da4f38 721 SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
70401c6b 722
25da4f38 723#define SvIOK_UV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \
724 == (SVf_IOK|SVf_IVisUV))
28e5dec8 725#define SvUOK(sv) SvIOK_UV(sv)
25da4f38 726#define SvIOK_notUV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \
727 == SVf_IOK)
728
729#define SvIsUV(sv) (SvFLAGS(sv) & SVf_IVisUV)
730#define SvIsUV_on(sv) (SvFLAGS(sv) |= SVf_IVisUV)
731#define SvIsUV_off(sv) (SvFLAGS(sv) &= ~SVf_IVisUV)
79072805 732
733#define SvNOK(sv) (SvFLAGS(sv) & SVf_NOK)
a0d0e21e 734#define SvNOK_on(sv) (SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))
8990e307 735#define SvNOK_off(sv) (SvFLAGS(sv) &= ~(SVf_NOK|SVp_NOK))
0c34ef67 736#define SvNOK_only(sv) (SvOK_off(sv), \
a0d0e21e 737 SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))
79072805 738
914184e1 739/*
12fa07df 740=for apidoc Am|bool|SvUTF8|SV* sv
914184e1 741Returns a boolean indicating whether the SV contains UTF-8 encoded data.
742
743=for apidoc Am|void|SvUTF8_on|SV *sv
1e54db1a 744Turn on the UTF-8 status of an SV (the data is not changed, just the flag).
d5ce4a7c 745Do not use frivolously.
914184e1 746
747=for apidoc Am|void|SvUTF8_off|SV *sv
1e54db1a 748Unsets the UTF-8 status of an SV.
914184e1 749
750=for apidoc Am|void|SvPOK_only_UTF8|SV* sv
d5ce4a7c 751Tells an SV that it is a string and disables all other OK bits,
1e54db1a 752and leaves the UTF-8 status as it was.
f1a1024e 753
914184e1 754=cut
755 */
756
7a5fd60d 757/* Ensure the return value of this macro does not clash with the GV_ADD* flags
758in gv.h: */
a7cb1f99 759#define SvUTF8(sv) (SvFLAGS(sv) & SVf_UTF8)
760#define SvUTF8_on(sv) (SvFLAGS(sv) |= (SVf_UTF8))
761#define SvUTF8_off(sv) (SvFLAGS(sv) &= ~(SVf_UTF8))
5bc28da9 762
79072805 763#define SvPOK(sv) (SvFLAGS(sv) & SVf_POK)
54866b45 764#define SvPOK_on(sv) (assert_not_ROK(sv) \
906ed6d6 765 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
8990e307 766#define SvPOK_off(sv) (SvFLAGS(sv) &= ~(SVf_POK|SVp_POK))
54866b45 767#define SvPOK_only(sv) (assert_not_ROK(sv) \
906ed6d6 768 SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \
d41ff1b8 769 SVf_IVisUV|SVf_UTF8), \
770 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
54866b45 771#define SvPOK_only_UTF8(sv) (assert_not_ROK(sv) \
906ed6d6 772 SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \
d41ff1b8 773 SVf_IVisUV), \
a0d0e21e 774 SvFLAGS(sv) |= (SVf_POK|SVp_POK))
79072805 775
b0f01acb 776#define SvVOK(sv) (SvMAGICAL(sv) && mg_find(sv,'V'))
79072805 777#define SvOOK(sv) (SvFLAGS(sv) & SVf_OOK)
155aba94 778#define SvOOK_on(sv) ((void)SvIOK_off(sv), SvFLAGS(sv) |= SVf_OOK)
0c34ef67 779#define SvOOK_off(sv) ((void)(SvOOK(sv) && sv_backoff(sv)))
79072805 780
a0d0e21e 781#define SvFAKE(sv) (SvFLAGS(sv) & SVf_FAKE)
782#define SvFAKE_on(sv) (SvFLAGS(sv) |= SVf_FAKE)
783#define SvFAKE_off(sv) (SvFLAGS(sv) &= ~SVf_FAKE)
784
ed6116ce 785#define SvROK(sv) (SvFLAGS(sv) & SVf_ROK)
a0d0e21e 786#define SvROK_on(sv) (SvFLAGS(sv) |= SVf_ROK)
a0d0e21e 787#define SvROK_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVf_AMAGIC))
79072805 788
8990e307 789#define SvMAGICAL(sv) (SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG))
790#define SvMAGICAL_on(sv) (SvFLAGS(sv) |= (SVs_GMG|SVs_SMG|SVs_RMG))
791#define SvMAGICAL_off(sv) (SvFLAGS(sv) &= ~(SVs_GMG|SVs_SMG|SVs_RMG))
79072805 792
8990e307 793#define SvGMAGICAL(sv) (SvFLAGS(sv) & SVs_GMG)
794#define SvGMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_GMG)
795#define SvGMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_GMG)
ed6116ce 796
8990e307 797#define SvSMAGICAL(sv) (SvFLAGS(sv) & SVs_SMG)
798#define SvSMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_SMG)
799#define SvSMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_SMG)
ed6116ce 800
8990e307 801#define SvRMAGICAL(sv) (SvFLAGS(sv) & SVs_RMG)
802#define SvRMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_RMG)
803#define SvRMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_RMG)
ed6116ce 804
9e7bc3e8 805#define SvAMAGIC(sv) (SvFLAGS(sv) & SVf_AMAGIC)
806#define SvAMAGIC_on(sv) (SvFLAGS(sv) |= SVf_AMAGIC)
807#define SvAMAGIC_off(sv) (SvFLAGS(sv) &= ~SVf_AMAGIC)
a0d0e21e 808
8cf8f3d1 809#define SvGAMAGIC(sv) (SvFLAGS(sv) & (SVs_GMG|SVf_AMAGIC))
1426bbf4 810
a0d0e21e 811/*
812#define Gv_AMG(stash) \
813 (HV_AMAGICmb(stash) && \
814 ((!HV_AMAGICbad(stash) && HV_AMAGIC(stash)) || Gv_AMupdate(stash)))
815*/
3280af22 816#define Gv_AMG(stash) (PL_amagic_generation && Gv_AMupdate(stash))
a0d0e21e 817
810b8aa5 818#define SvWEAKREF(sv) ((SvFLAGS(sv) & (SVf_ROK|SVprv_WEAKREF)) \
819 == (SVf_ROK|SVprv_WEAKREF))
820#define SvWEAKREF_on(sv) (SvFLAGS(sv) |= (SVf_ROK|SVprv_WEAKREF))
821#define SvWEAKREF_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVprv_WEAKREF))
822
a0d0e21e 823#define SvTHINKFIRST(sv) (SvFLAGS(sv) & SVf_THINKFIRST)
ed6116ce 824
d9d18af6 825#define SvPADSTALE(sv) (SvFLAGS(sv) & SVs_PADSTALE)
826#define SvPADSTALE_on(sv) (SvFLAGS(sv) |= SVs_PADSTALE)
827#define SvPADSTALE_off(sv) (SvFLAGS(sv) &= ~SVs_PADSTALE)
828
8990e307 829#define SvPADTMP(sv) (SvFLAGS(sv) & SVs_PADTMP)
235cc2e3 830#define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP)
8990e307 831#define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP)
ed6116ce 832
8990e307 833#define SvPADMY(sv) (SvFLAGS(sv) & SVs_PADMY)
235cc2e3 834#define SvPADMY_on(sv) (SvFLAGS(sv) |= SVs_PADMY)
ed6116ce 835
8990e307 836#define SvTEMP(sv) (SvFLAGS(sv) & SVs_TEMP)
837#define SvTEMP_on(sv) (SvFLAGS(sv) |= SVs_TEMP)
838#define SvTEMP_off(sv) (SvFLAGS(sv) &= ~SVs_TEMP)
79072805 839
8990e307 840#define SvOBJECT(sv) (SvFLAGS(sv) & SVs_OBJECT)
841#define SvOBJECT_on(sv) (SvFLAGS(sv) |= SVs_OBJECT)
842#define SvOBJECT_off(sv) (SvFLAGS(sv) &= ~SVs_OBJECT)
79072805 843
8990e307 844#define SvREADONLY(sv) (SvFLAGS(sv) & SVf_READONLY)
845#define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)
846#define SvREADONLY_off(sv) (SvFLAGS(sv) &= ~SVf_READONLY)
79072805 847
8990e307 848#define SvSCREAM(sv) (SvFLAGS(sv) & SVp_SCREAM)
849#define SvSCREAM_on(sv) (SvFLAGS(sv) |= SVp_SCREAM)
850#define SvSCREAM_off(sv) (SvFLAGS(sv) &= ~SVp_SCREAM)
79072805 851
8990e307 852#define SvCOMPILED(sv) (SvFLAGS(sv) & SVpfm_COMPILED)
853#define SvCOMPILED_on(sv) (SvFLAGS(sv) |= SVpfm_COMPILED)
854#define SvCOMPILED_off(sv) (SvFLAGS(sv) &= ~SVpfm_COMPILED)
79072805 855
25da4f38 856#define SvEVALED(sv) (SvFLAGS(sv) & SVrepl_EVAL)
857#define SvEVALED_on(sv) (SvFLAGS(sv) |= SVrepl_EVAL)
858#define SvEVALED_off(sv) (SvFLAGS(sv) &= ~SVrepl_EVAL)
859
8990e307 860#define SvTAIL(sv) (SvFLAGS(sv) & SVpbm_TAIL)
861#define SvTAIL_on(sv) (SvFLAGS(sv) |= SVpbm_TAIL)
862#define SvTAIL_off(sv) (SvFLAGS(sv) &= ~SVpbm_TAIL)
863
8990e307 864#define SvVALID(sv) (SvFLAGS(sv) & SVpbm_VALID)
865#define SvVALID_on(sv) (SvFLAGS(sv) |= SVpbm_VALID)
866#define SvVALID_off(sv) (SvFLAGS(sv) &= ~SVpbm_VALID)
867
1cc8b4c5 868#ifdef USE_ITHREADS
869/* The following uses the FAKE flag to show that a regex pointer is infact
8ca6097c 870 its own offset in the regexpad for ithreads */
1cc8b4c5 871#define SvREPADTMP(sv) (SvFLAGS(sv) & SVf_FAKE)
872#define SvREPADTMP_on(sv) (SvFLAGS(sv) |= SVf_FAKE)
873#define SvREPADTMP_off(sv) (SvFLAGS(sv) &= ~SVf_FAKE)
874#endif
875
b162af07 876#ifdef PERL_DEBUG_COW
339049b0 877#define SvRV(sv) (0 + (sv)->sv_u.svu_rv)
b162af07 878#else
339049b0 879#define SvRV(sv) ((sv)->sv_u.svu_rv)
b162af07 880#endif
ed6116ce 881#define SvRVx(sv) SvRV(sv)
882
f599b64b 883#ifdef PERL_DEBUG_COW
8ed30cc1 884/* Need -0.0 for SvNVX to preserve IEEE FP "negative zero" because
885 +0.0 + -0.0 => +0.0 but -0.0 + -0.0 => -0.0 */
771ba71a 886# define SvIVX(sv) (0 + ((XPVIV*) SvANY(sv))->xiv_iv)
887# define SvUVX(sv) (0 + ((XPVUV*) SvANY(sv))->xuv_uv)
8ed30cc1 888# define SvNVX(sv) (-0.0 + ((XPVNV*) SvANY(sv))->xnv_nv)
c0e1089a 889/* Don't test the core XS code yet. */
771ba71a 890# if defined (PERL_CORE) && PERL_DEBUG_COW > 1
891# define SvPVX(sv) (0 + (assert(!SvREADONLY(sv)), (sv)->sv_u.svu_pv))
892# else
893# define SvPVX(sv) SvPVX_mutable(sv)
894# endif
895# define SvPVX_mutable(sv) (0 + (sv)->sv_u.svu_pv)
896# define SvPVX_const(sv) ((const char*)(0 + (sv)->sv_u.svu_pv))
897# define SvCUR(sv) (0 + ((XPV*) SvANY(sv))->xpv_cur)
898# define SvLEN(sv) (0 + ((XPV*) SvANY(sv))->xpv_len)
899# define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur)
900
901# ifdef DEBUGGING
902# ifdef PERL_IN_SV_C
62703e72 903/* Can't make this RVALUE because of Perl_sv_unmagic. */
771ba71a 904# define SvMAGIC(sv) (*(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*) SvANY(sv))->xmg_magic))
905# else
906# define SvMAGIC(sv) (0 + *(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*) SvANY(sv))->xmg_magic))
907# endif
908# define SvSTASH(sv) (0 + *(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*) SvANY(sv))->xmg_stash))
03687789 909# else
771ba71a 910# ifdef PERL_IN_SV_C
911# define SvMAGIC(sv) ((XPVMG*) SvANY(sv))->xmg_magic
912# else
913# define SvMAGIC(sv) (0 + ((XPVMG*) SvANY(sv))->xmg_magic)
914# endif
915# define SvSTASH(sv) (0 + ((XPVMG*) SvANY(sv))->xmg_stash)
03687789 916# endif
f599b64b 917#else
771ba71a 918# define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv
919# define SvUVX(sv) ((XPVUV*) SvANY(sv))->xuv_uv
920# define SvNVX(sv) ((XPVNV*) SvANY(sv))->xnv_nv
921# define SvPVX(sv) ((sv)->sv_u.svu_pv)
922# define SvPVX_mutable(sv) SvPVX(sv)
923# define SvPVX_const(sv) ((const char*)SvPVX(sv))
924# define SvCUR(sv) ((XPV*) SvANY(sv))->xpv_cur
925# define SvLEN(sv) ((XPV*) SvANY(sv))->xpv_len
926# define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur)
927
928# ifdef DEBUGGING
929# define SvMAGIC(sv) (*(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*) SvANY(sv))->xmg_magic))
930# define SvSTASH(sv) (*(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*) SvANY(sv))->xmg_stash))
03687789 931# else
771ba71a 932# define SvMAGIC(sv) ((XPVMG*) SvANY(sv))->xmg_magic
933# define SvSTASH(sv) ((XPVMG*) SvANY(sv))->xmg_stash
03687789 934# endif
62703e72 935#endif
936
937#define SvIVXx(sv) SvIVX(sv)
938#define SvUVXx(sv) SvUVX(sv)
939#define SvNVXx(sv) SvNVX(sv)
940#define SvPVXx(sv) SvPVX(sv)
941#define SvLENx(sv) SvLEN(sv)
942#define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv))
943
944
28e5dec8 945/* Ask a scalar nicely to try to become an IV, if possible.
946 Not guaranteed to stay returning void */
947/* Macro won't actually call sv_2iv if already IOK */
948#define SvIV_please(sv) \
949 STMT_START {if (!SvIOKp(sv) && (SvNOK(sv) || SvPOK(sv))) \
950 (void) SvIV(sv); } STMT_END
79072805 951#define SvIV_set(sv, val) \
80b92232 952 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
b19bbeda 953 (((XPVIV*) SvANY(sv))->xiv_iv = (val)); } STMT_END
79072805 954#define SvNV_set(sv, val) \
80b92232 955 STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \
7ffec4a4 956 assert(SvTYPE(sv) != SVt_PVAV); assert(SvTYPE(sv) != SVt_PVHV); \
f599b64b 957 (((XPVNV*)SvANY(sv))->xnv_nv = (val)); } STMT_END
79072805 958#define SvPV_set(sv, val) \
80b92232 959 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
339049b0 960 ((sv)->sv_u.svu_pv = (val)); } STMT_END
607fa7f2 961#define SvUV_set(sv, val) \
962 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
963 (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END
b162af07 964#define SvRV_set(sv, val) \
965 STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
339049b0 966 ((sv)->sv_u.svu_rv = (val)); } STMT_END
b162af07 967#define SvMAGIC_set(sv, val) \
968 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
969 (((XPVMG*)SvANY(sv))->xmg_magic = (val)); } STMT_END
970#define SvSTASH_set(sv, val) \
971 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
972 (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
79072805 973#define SvCUR_set(sv, val) \
80b92232 974 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
b162af07 975 (((XPV*) SvANY(sv))->xpv_cur = (val)); } STMT_END
79072805 976#define SvLEN_set(sv, val) \
80b92232 977 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
b162af07 978 (((XPV*) SvANY(sv))->xpv_len = (val)); } STMT_END
7ae8ee9e 979#define SvEND_set(sv, val) \
980 STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
981 (SvCUR(sv) = (val) - SvPVX(sv)); } STMT_END
79072805 982
b7e9a5c2 983#define SvPV_renew(sv,n) \
1da4ca5f 984 STMT_START { SvLEN_set(sv, n); \
985 SvPV_set((sv), (MEM_WRAP_CHECK_(n,char) \
986 (char*)saferealloc((Malloc_t)SvPVX(sv), \
987 (MEM_SIZE)((n))))); \
988 } STMT_END
989
990#define SvPV_shrink_to_cur(sv) STMT_START { \
991 const STRLEN _lEnGtH = SvCUR(sv) + 1; \
992 SvPV_renew(sv, _lEnGtH); \
993 } STMT_END
b7e9a5c2 994
771ba71a 995#define SvPV_free(sv) \
996 STMT_START { \
997 assert(SvTYPE(sv) >= SVt_PV); \
998 if (SvLEN(sv)) { \
999 if(SvOOK(sv)) { \
1000 SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv)); \
1001 SvFLAGS(sv) &= ~SVf_OOK; \
1002 } \
1003 Safefree(SvPVX(sv)); \
1004 } \
1005 } STMT_END
8bd4d4c5 1006
79072805 1007#define BmRARE(sv) ((XPVBM*) SvANY(sv))->xbm_rare
1008#define BmUSEFUL(sv) ((XPVBM*) SvANY(sv))->xbm_useful
1009#define BmPREVIOUS(sv) ((XPVBM*) SvANY(sv))->xbm_previous
1010
1011#define FmLINES(sv) ((XPVFM*) SvANY(sv))->xfm_lines
1012
1013#define LvTYPE(sv) ((XPVLV*) SvANY(sv))->xlv_type
1014#define LvTARG(sv) ((XPVLV*) SvANY(sv))->xlv_targ
1015#define LvTARGOFF(sv) ((XPVLV*) SvANY(sv))->xlv_targoff
1016#define LvTARGLEN(sv) ((XPVLV*) SvANY(sv))->xlv_targlen
1017
8990e307 1018#define IoIFP(sv) ((XPVIO*) SvANY(sv))->xio_ifp
1019#define IoOFP(sv) ((XPVIO*) SvANY(sv))->xio_ofp
1020#define IoDIRP(sv) ((XPVIO*) SvANY(sv))->xio_dirp
4755096e 1021#define IoANY(sv) ((XPVIO*) SvANY(sv))->xio_any
8990e307 1022#define IoLINES(sv) ((XPVIO*) SvANY(sv))->xio_lines
1023#define IoPAGE(sv) ((XPVIO*) SvANY(sv))->xio_page
1024#define IoPAGE_LEN(sv) ((XPVIO*) SvANY(sv))->xio_page_len
1025#define IoLINES_LEFT(sv)((XPVIO*) SvANY(sv))->xio_lines_left
1026#define IoTOP_NAME(sv) ((XPVIO*) SvANY(sv))->xio_top_name
1027#define IoTOP_GV(sv) ((XPVIO*) SvANY(sv))->xio_top_gv
1028#define IoFMT_NAME(sv) ((XPVIO*) SvANY(sv))->xio_fmt_name
1029#define IoFMT_GV(sv) ((XPVIO*) SvANY(sv))->xio_fmt_gv
1030#define IoBOTTOM_NAME(sv)((XPVIO*) SvANY(sv))->xio_bottom_name
1031#define IoBOTTOM_GV(sv) ((XPVIO*) SvANY(sv))->xio_bottom_gv
1032#define IoSUBPROCESS(sv)((XPVIO*) SvANY(sv))->xio_subprocess
1033#define IoTYPE(sv) ((XPVIO*) SvANY(sv))->xio_type
1034#define IoFLAGS(sv) ((XPVIO*) SvANY(sv))->xio_flags
1035
50952442 1036/* IoTYPE(sv) is a single character telling the type of I/O connection. */
3b6c1aba 1037#define IoTYPE_RDONLY '<'
1038#define IoTYPE_WRONLY '>'
1039#define IoTYPE_RDWR '+'
1040#define IoTYPE_APPEND 'a'
1041#define IoTYPE_PIPE '|'
1042#define IoTYPE_STD '-' /* stdin or stdout */
1043#define IoTYPE_SOCKET 's'
1044#define IoTYPE_CLOSED ' '
1045#define IoTYPE_IMPLICIT 'I' /* stdin or stdout or stderr */
1046#define IoTYPE_NUMERIC '#' /* fdopen */
03fcf2fc 1047
1048/*
954c1994 1049=for apidoc Am|bool|SvTAINTED|SV* sv
1050Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
1051not.
1052
1053=for apidoc Am|void|SvTAINTED_on|SV* sv
c55831ac 1054Marks an SV as tainted if tainting is enabled.
954c1994 1055
1056=for apidoc Am|void|SvTAINTED_off|SV* sv
1057Untaints an SV. Be I<very> careful with this routine, as it short-circuits
1058some of Perl's fundamental security features. XS module authors should not
1059use this function unless they fully understand all the implications of
1060unconditionally untainting the value. Untainting should be done in the
1061standard perl fashion, via a carefully crafted regexp, rather than directly
1062untainting variables.
1063
1064=for apidoc Am|void|SvTAINT|SV* sv
c55831ac 1065Taints an SV if tainting is enabled.
954c1994 1066
1067=cut
1068*/
1069
bbce6d69 1070#define SvTAINTED(sv) (SvMAGICAL(sv) && sv_tainted(sv))
3280af22 1071#define SvTAINTED_on(sv) STMT_START{ if(PL_tainting){sv_taint(sv);} }STMT_END
1072#define SvTAINTED_off(sv) STMT_START{ if(PL_tainting){sv_untaint(sv);} }STMT_END
bbce6d69 1073
c6ee37c5 1074#define SvTAINT(sv) \
1075 STMT_START { \
3280af22 1076 if (PL_tainting) { \
3280af22 1077 if (PL_tainted) \
c6ee37c5 1078 SvTAINTED_on(sv); \
1079 } \
1080 } STMT_END
79072805 1081
954c1994 1082/*
1083=for apidoc Am|char*|SvPV_force|SV* sv|STRLEN len
5f08bad4 1084Like C<SvPV> but will force the SV into containing just a string
1085(C<SvPOK_only>). You want force if you are going to update the C<SvPVX>
1086directly.
954c1994 1087
645c22ef 1088=for apidoc Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
5f08bad4 1089Like C<SvPV> but will force the SV into containing just a string
1090(C<SvPOK_only>). You want force if you are going to update the C<SvPVX>
1091directly. Doesn't process magic.
645c22ef 1092
954c1994 1093=for apidoc Am|char*|SvPV|SV* sv|STRLEN len
5f08bad4 1094Returns a pointer to the string in the SV, or a stringified form of
1095the SV if the SV does not contain a string. The SV may cache the
1096stringified version becoming C<SvPOK>. Handles 'get' magic. See also
645c22ef 1097C<SvPVx> for a version which guarantees to evaluate sv only once.
1098
1099=for apidoc Am|char*|SvPVx|SV* sv|STRLEN len
1100A version of C<SvPV> which guarantees to evaluate sv only once.
954c1994 1101
891f9566 1102=for apidoc Am|char*|SvPV_nomg|SV* sv|STRLEN len
1103Like C<SvPV> but doesn't process magic.
1104
954c1994 1105=for apidoc Am|char*|SvPV_nolen|SV* sv
5f08bad4 1106Returns a pointer to the string in the SV, or a stringified form of
1107the SV if the SV does not contain a string. The SV may cache the
1108stringified form becoming C<SvPOK>. Handles 'get' magic.
954c1994 1109
1110=for apidoc Am|IV|SvIV|SV* sv
645c22ef 1111Coerces the given SV to an integer and returns it. See C<SvIVx> for a
1112version which guarantees to evaluate sv only once.
1113
891f9566 1114=for apidoc Am|IV|SvIV_nomg|SV* sv
1115Like C<SvIV> but doesn't process magic.
1116
645c22ef 1117=for apidoc Am|IV|SvIVx|SV* sv
1118Coerces the given SV to an integer and returns it. Guarantees to evaluate
d1be9408 1119sv only once. Use the more efficient C<SvIV> otherwise.
954c1994 1120
1121=for apidoc Am|NV|SvNV|SV* sv
645c22ef 1122Coerce the given SV to a double and return it. See C<SvNVx> for a version
1123which guarantees to evaluate sv only once.
1124
1125=for apidoc Am|NV|SvNVx|SV* sv
1126Coerces the given SV to a double and returns it. Guarantees to evaluate
d1be9408 1127sv only once. Use the more efficient C<SvNV> otherwise.
954c1994 1128
1129=for apidoc Am|UV|SvUV|SV* sv
645c22ef 1130Coerces the given SV to an unsigned integer and returns it. See C<SvUVx>
1131for a version which guarantees to evaluate sv only once.
1132
891f9566 1133=for apidoc Am|UV|SvUV_nomg|SV* sv
1134Like C<SvUV> but doesn't process magic.
1135
645c22ef 1136=for apidoc Am|UV|SvUVx|SV* sv
1137Coerces the given SV to an unsigned integer and returns it. Guarantees to
d1be9408 1138evaluate sv only once. Use the more efficient C<SvUV> otherwise.
954c1994 1139
1140=for apidoc Am|bool|SvTRUE|SV* sv
1141Returns a boolean indicating whether Perl would evaluate the SV as true or
1142false, defined or undefined. Does not handle 'get' magic.
1143
645c22ef 1144=for apidoc Am|char*|SvPVutf8_force|SV* sv|STRLEN len
b70b15d2 1145Like C<SvPV_force>, but converts sv to utf8 first if necessary.
645c22ef 1146
1147=for apidoc Am|char*|SvPVutf8|SV* sv|STRLEN len
b70b15d2 1148Like C<SvPV>, but converts sv to utf8 first if necessary.
645c22ef 1149
b70b15d2 1150=for apidoc Am|char*|SvPVutf8_nolen|SV* sv
1151Like C<SvPV_nolen>, but converts sv to utf8 first if necessary.
645c22ef 1152
1153=for apidoc Am|char*|SvPVbyte_force|SV* sv|STRLEN len
1154Like C<SvPV_force>, but converts sv to byte representation first if necessary.
1155
1156=for apidoc Am|char*|SvPVbyte|SV* sv|STRLEN len
1157Like C<SvPV>, but converts sv to byte representation first if necessary.
1158
b70b15d2 1159=for apidoc Am|char*|SvPVbyte_nolen|SV* sv
645c22ef 1160Like C<SvPV_nolen>, but converts sv to byte representation first if necessary.
1161
1162=for apidoc Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
b70b15d2 1163Like C<SvPV_force>, but converts sv to utf8 first if necessary.
d1be9408 1164Guarantees to evaluate sv only once; use the more efficient C<SvPVutf8_force>
645c22ef 1165otherwise.
1166
1167=for apidoc Am|char*|SvPVutf8x|SV* sv|STRLEN len
b70b15d2 1168Like C<SvPV>, but converts sv to utf8 first if necessary.
d1be9408 1169Guarantees to evaluate sv only once; use the more efficient C<SvPVutf8>
645c22ef 1170otherwise.
1171
1172=for apidoc Am|char*|SvPVbytex_force|SV* sv|STRLEN len
1173Like C<SvPV_force>, but converts sv to byte representation first if necessary.
d1be9408 1174Guarantees to evaluate sv only once; use the more efficient C<SvPVbyte_force>
645c22ef 1175otherwise.
1176
1177=for apidoc Am|char*|SvPVbytex|SV* sv|STRLEN len
1178Like C<SvPV>, but converts sv to byte representation first if necessary.
d1be9408 1179Guarantees to evaluate sv only once; use the more efficient C<SvPVbyte>
645c22ef 1180otherwise.
1181
19dbb8f1 1182=for apidoc Am|bool|SvIsCOW|SV* sv
1183Returns a boolean indicating whether the SV is Copy-On-Write. (either shared
1184hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for
1185COW)
1186
1187=for apidoc Am|bool|SvIsCOW_shared_hash|SV* sv
1188Returns a boolean indicating whether the SV is Copy-On-Write shared hash key
1189scalar.
645c22ef 1190
0f76ff59 1191=for apidoc Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
1192Like C<sv_catpvn> but doesn't process magic.
1193
1194=for apidoc Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
1195Like C<sv_setsv> but doesn't process magic.
1196
1197=for apidoc Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
1198Like C<sv_catsv> but doesn't process magic.
1199
954c1994 1200=cut
1201*/
1202
25da4f38 1203/* Let us hope that bitmaps for UV and IV are the same */
463ee0b2 1204#define SvIV(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv))
ff68c719 1205#define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
463ee0b2 1206#define SvNV(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv))
79072805 1207
891f9566 1208#define SvIV_nomg(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv_flags(sv, 0))
1209#define SvUV_nomg(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
1210
baca2b92 1211/* ----*/
8d6d96c1 1212
8d6d96c1 1213#define SvPV(sv, lp) SvPV_flags(sv, lp, SV_GMAGIC)
32a5c6ec 1214#define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC)
44d22300 1215#define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
8d6d96c1 1216
8d6d96c1 1217#define SvPV_flags(sv, lp, flags) \
1218 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1219 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
32a5c6ec 1220#define SvPV_flags_const(sv, lp, flags) \
1221 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1222 ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
1223 (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
44d22300 1224#define SvPV_flags_mutable(sv, lp, flags) \
1225 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1226 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
1227 sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
79072805 1228
8d6d96c1 1229#define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
13c5b33c 1230#define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
32a5c6ec 1231#define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
baca2b92 1232
8d6d96c1 1233#define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
1234
8d6d96c1 1235#define SvPV_force_flags(sv, lp, flags) \
ff68c719 1236 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
8d6d96c1 1237 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
13c5b33c 1238#define SvPV_force_flags_nolen(sv, flags) \
1239 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
1240 ? SvPVX(sv) : sv_pvn_force_flags(sv, 0, flags))
32a5c6ec 1241#define SvPV_force_flags_mutable(sv, lp, flags) \
1242 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
1243 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
1244 : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
a0d0e21e 1245
1fa8b10d 1246#define SvPV_nolen(sv) \
5bc28da9 1247 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
dafda6d1 1248 ? SvPVX(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC))
70401c6b 1249
9ce348e8 1250#define SvPV_nolen_const(sv) \
1251 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
1252 ? SvPVX_const(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC|SV_CONST_RETURN))
1253
baca2b92 1254#define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
9ce348e8 1255#define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
5bc28da9 1256
baca2b92 1257/* ----*/
70401c6b 1258
5bc28da9 1259#define SvPVutf8(sv, lp) \
1260 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK|SVf_UTF8) \
1261 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
70401c6b 1262
5bc28da9 1263#define SvPVutf8_force(sv, lp) \
70401c6b 1264 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == (SVf_POK|SVf_UTF8) \
5bc28da9 1265 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
1266
baca2b92 1267
5bc28da9 1268#define SvPVutf8_nolen(sv) \
1269 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK|SVf_UTF8)\
dafda6d1 1270 ? SvPVX(sv) : sv_2pvutf8(sv, 0))
70401c6b 1271
baca2b92 1272/* ----*/
1273
5bc28da9 1274#define SvPVbyte(sv, lp) \
1275 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \
1276 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
70401c6b 1277
5bc28da9 1278#define SvPVbyte_force(sv, lp) \
1279 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVf_THINKFIRST)) == (SVf_POK) \
a7ec4e2e 1280 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &lp))
5bc28da9 1281
5bc28da9 1282#define SvPVbyte_nolen(sv) \
1283 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK)\
dafda6d1 1284 ? SvPVX(sv) : sv_2pvbyte(sv, 0))
70401c6b 1285
1fa8b10d 1286
baca2b92 1287
1288/* define FOOx(): idempotent versions of FOO(). If possible, use a local
1289 * var to evaluate the arg once; failing that, use a global if possible;
1290 * failing that, call a function to do the work
1291 */
1292
1293#define SvPVx_force(sv, lp) sv_pvn_force(sv, &lp)
1294#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
1295#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
1296
5dc8bdac 1297#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
baca2b92 1298
3de3296f 1299# define SvIVx(sv) ({SV *_sv = (SV*)(sv); SvIV(_sv); })
1300# define SvUVx(sv) ({SV *_sv = (SV*)(sv); SvUV(_sv); })
1301# define SvNVx(sv) ({SV *_sv = (SV*)(sv); SvNV(_sv); })
1302# define SvPVx(sv, lp) ({SV *_sv = (sv); SvPV(_sv, lp); })
32a5c6ec 1303# define SvPVx_const(sv, lp) ({SV *_sv = (sv); SvPV_const(_sv, lp); })
002e4c74 1304# define SvPVx_nolen(sv) ({SV *_sv = (sv); SvPV_nolen(_sv); })
9ce348e8 1305# define SvPVx_nolen_const(sv) ({SV *_sv = (sv); SvPV_nolen_const(_sv); })
3de3296f 1306# define SvPVutf8x(sv, lp) ({SV *_sv = (sv); SvPVutf8(_sv, lp); })
1307# define SvPVbytex(sv, lp) ({SV *_sv = (sv); SvPVbyte(_sv, lp); })
002e4c74 1308# define SvPVbytex_nolen(sv) ({SV *_sv = (sv); SvPVbyte_nolen(_sv); })
a80f87c4 1309# define SvTRUE(sv) ( \
8990e307 1310 !sv \
1311 ? 0 \
1312 : SvPOK(sv) \
a80f87c4 1313 ? (({XPV *nxpv = (XPV*)SvANY(sv); \
1314 nxpv && \
c2f1de04 1315 (nxpv->xpv_cur > 1 || \
339049b0 1316 (nxpv->xpv_cur && *(sv)->sv_u.svu_pv != '0')); }) \
79072805 1317 ? 1 \
1318 : 0) \
1319 : \
1320 SvIOK(sv) \
463ee0b2 1321 ? SvIVX(sv) != 0 \
79072805 1322 : SvNOK(sv) \
463ee0b2 1323 ? SvNVX(sv) != 0.0 \
1324 : sv_2bool(sv) )
3de3296f 1325# define SvTRUEx(sv) ({SV *_sv = (sv); SvTRUE(_sv); })
baca2b92 1326
a80f87c4 1327#else /* __GNUC__ */
baca2b92 1328
a80f87c4 1329/* These inlined macros use globals, which will require a thread
1330 * declaration in user code, so we avoid them under threads */
1331
3db8f154 1332# define SvIVx(sv) ((PL_Sv = (sv)), SvIV(PL_Sv))
1333# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
1334# define SvNVx(sv) ((PL_Sv = (sv)), SvNV(PL_Sv))
1335# define SvPVx(sv, lp) ((PL_Sv = (sv)), SvPV(PL_Sv, lp))
32a5c6ec 1336# define SvPVx_const(sv, lp) ((PL_Sv = (sv)), SvPV_const(PL_Sv, lp))
002e4c74 1337# define SvPVx_nolen(sv) ((PL_Sv = (sv)), SvPV_nolen(PL_Sv))
5f1478c3 1338# define SvPVx_nolen_const(sv) ((PL_Sv = (sv)), SvPV_nolen_const(PL_Sv))
3db8f154 1339# define SvPVutf8x(sv, lp) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, lp))
1340# define SvPVbytex(sv, lp) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, lp))
002e4c74 1341# define SvPVbytex_nolen(sv) ((PL_Sv = (sv)), SvPVbyte_nolen(PL_Sv))
3db8f154 1342# define SvTRUE(sv) ( \
a80f87c4 1343 !sv \
1344 ? 0 \
1345 : SvPOK(sv) \
7b2c381c 1346 ? ((PL_Xpv = (XPV*)SvANY(PL_Sv = (sv))) && \
c2f1de04 1347 (PL_Xpv->xpv_cur > 1 || \
339049b0 1348 (PL_Xpv->xpv_cur && *PL_Sv->sv_u.svu_pv != '0')) \
a80f87c4 1349 ? 1 \
1350 : 0) \
1351 : \
1352 SvIOK(sv) \
1353 ? SvIVX(sv) != 0 \
1354 : SvNOK(sv) \
1355 ? SvNVX(sv) != 0.0 \
1356 : sv_2bool(sv) )
3db8f154 1357# define SvTRUEx(sv) ((PL_Sv = (sv)), SvTRUE(PL_Sv))
baca2b92 1358#endif /* __GNU__ */
1359
765f542d 1360#define SvIsCOW(sv) ((SvFLAGS(sv) & (SVf_FAKE | SVf_READONLY)) == \
1361 (SVf_FAKE | SVf_READONLY))
46187eeb 1362#define SvIsCOW_shared_hash(sv) (SvIsCOW(sv) && SvLEN(sv) == 0)
baca2b92 1363
bdd68bc3 1364#define SvSHARED_HEK_FROM_PV(pvx) \
1365 ((struct hek*)(pvx - STRUCT_OFFSET(struct hek, hek_key)))
0a356b31 1366#define SvSHARED_HASH(sv) (0 + SvSHARED_HEK_FROM_PV(SvPVX_const(sv))->hek_hash)
c158a4fd 1367
baca2b92 1368/* flag values for sv_*_flags functions */
1369#define SV_IMMEDIATE_UNREF 1
1370#define SV_GMAGIC 2
765f542d 1371#define SV_COW_DROP_PV 4
88632417 1372#define SV_UTF8_NO_ENCODING 8
5fcdf167 1373#define SV_NOSTEAL 16
32a5c6ec 1374#define SV_CONST_RETURN 32
1375#define SV_MUTABLE_RETURN 64
765f542d 1376
46187eeb 1377/* We are about to replace the SV's current value. So if it's copy on write
1378 we need to normalise it. Use the SV_COW_DROP_PV flag hint to say that
1379 the value is about to get thrown away, so drop the PV rather than go to
1380 the effort of making a read-write copy only for it to get immediately
1381 discarded. */
765f542d 1382
1383#define SV_CHECK_THINKFIRST_COW_DROP(sv) if (SvTHINKFIRST(sv)) \
1384 sv_force_normal_flags(sv, SV_COW_DROP_PV)
46187eeb 1385
f8c7b90f 1386#ifdef PERL_OLD_COPY_ON_WRITE
46187eeb 1387# define SvRELEASE_IVX(sv) ((void)((SvFLAGS(sv) & (SVf_OOK|SVf_READONLY|SVf_FAKE)) \
b885210e 1388 && Perl_sv_release_IVX(aTHX_ sv)))
46187eeb 1389# define SvIsCOW_normal(sv) (SvIsCOW(sv) && SvLEN(sv))
b8f9541a 1390#else
1391# define SvRELEASE_IVX(sv) SvOOK_off(sv)
f8c7b90f 1392#endif /* PERL_OLD_COPY_ON_WRITE */
ed252734 1393
1394#define CAN_COW_MASK (SVs_OBJECT|SVs_GMG|SVs_SMG|SVs_RMG|SVf_IOK|SVf_NOK| \
1395 SVf_POK|SVf_ROK|SVp_IOK|SVp_NOK|SVp_POK|SVf_FAKE| \
1396 SVf_OOK|SVf_BREAK|SVf_READONLY|SVf_AMAGIC)
1397#define CAN_COW_FLAGS (SVp_POK|SVf_POK)
1398
765f542d 1399#define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) \
1400 sv_force_normal_flags(sv, 0)
1401
1402
baca2b92 1403/* all these 'functions' are now just macros */
1404
1405#define sv_pv(sv) SvPV_nolen(sv)
1406#define sv_pvutf8(sv) SvPVutf8_nolen(sv)
1407#define sv_pvbyte(sv) SvPVbyte_nolen(sv)
1408
1409#define sv_pvn_force_nomg(sv, lp) sv_pvn_force_flags(sv, lp, 0)
1410#define sv_utf8_upgrade_nomg(sv) sv_utf8_upgrade_flags(sv, 0)
1411#define sv_catpvn_nomg(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, 0)
1412#define sv_setsv(dsv, ssv) sv_setsv_flags(dsv, ssv, SV_GMAGIC)
1413#define sv_setsv_nomg(dsv, ssv) sv_setsv_flags(dsv, ssv, 0)
1414#define sv_catsv(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC)
1415#define sv_catsv_nomg(dsv, ssv) sv_catsv_flags(dsv, ssv, 0)
1416#define sv_catpvn(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC)
1417#define sv_2pv(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC)
1418#define sv_2pv_nomg(sv, lp) sv_2pv_flags(sv, lp, 0)
1419#define sv_pvn_force(sv, lp) sv_pvn_force_flags(sv, lp, SV_GMAGIC)
1420#define sv_utf8_upgrade(sv) sv_utf8_upgrade_flags(sv, SV_GMAGIC)
891f9566 1421#define sv_2iv(sv) sv_2iv_flags(sv, SV_GMAGIC)
1422#define sv_2uv(sv) sv_2uv_flags(sv, SV_GMAGIC)
baca2b92 1423
db79b45b 1424/* Should be named SvCatPVN_utf8_upgrade? */
1425#define sv_catpvn_utf8_upgrade(dsv, sstr, slen, nsv) \
1426 STMT_START { \
1427 if (!(nsv)) \
1428 nsv = sv_2mortal(newSVpvn(sstr, slen)); \
1429 else \
1430 sv_setpvn(nsv, sstr, slen); \
1431 SvUTF8_off(nsv); \
1432 sv_utf8_upgrade(nsv); \
1433 sv_catsv(dsv, nsv); \
1434 } STMT_END
79072805 1435
954c1994 1436/*
1437=for apidoc Am|SV*|newRV_inc|SV* sv
1438
1439Creates an RV wrapper for an SV. The reference count for the original SV is
1440incremented.
1441
1442=cut
1443*/
1444
5f05dabc 1445#define newRV_inc(sv) newRV(sv)
5f05dabc 1446
ef50df4b 1447/* the following macros update any magic values this sv is associated with */
79072805 1448
954c1994 1449/*
ccfc67b7 1450=head1 Magical Functions
1451
954c1994 1452=for apidoc Am|void|SvGETMAGIC|SV* sv
1453Invokes C<mg_get> on an SV if it has 'get' magic. This macro evaluates its
1454argument more than once.
1455
1456=for apidoc Am|void|SvSETMAGIC|SV* sv
1457Invokes C<mg_set> on an SV if it has 'set' magic. This macro evaluates its
1458argument more than once.
1459
1460=for apidoc Am|void|SvSetSV|SV* dsb|SV* ssv
1461Calls C<sv_setsv> if dsv is not the same as ssv. May evaluate arguments
1462more than once.
1463
1464=for apidoc Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
1465Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
1466ssv. May evaluate arguments more than once.
1467
645c22ef 1468=for apidoc Am|void|SvSetMagicSV|SV* dsb|SV* ssv
1469Like C<SvSetSV>, but does any set magic required afterwards.
1470
1471=for apidoc Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
80663158 1472Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
645c22ef 1473
68795e93 1474=for apidoc Am|void|SvSHARE|SV* sv
1475Arranges for sv to be shared between threads if a suitable module
1476has been loaded.
1477
1478=for apidoc Am|void|SvLOCK|SV* sv
1479Arranges for a mutual exclusion lock to be obtained on sv if a suitable module
1480has been loaded.
1481
1482=for apidoc Am|void|SvUNLOCK|SV* sv
1483Releases a mutual exclusion lock on sv if a suitable module
1484has been loaded.
1485
ccfc67b7 1486=head1 SV Manipulation Functions
1487
679ac26e 1488=for apidoc Am|char *|SvGROW|SV* sv|STRLEN len
954c1994 1489Expands the character buffer in the SV so that it has room for the
1490indicated number of bytes (remember to reserve space for an extra trailing
8cf8f3d1 1491NUL character). Calls C<sv_grow> to perform the expansion if necessary.
954c1994 1492Returns a pointer to the character buffer.
1493
1494=cut
1495*/
1496
68795e93 1497#define SvSHARE(sv) CALL_FPTR(PL_sharehook)(aTHX_ sv)
1498#define SvLOCK(sv) CALL_FPTR(PL_lockhook)(aTHX_ sv)
1499#define SvUNLOCK(sv) CALL_FPTR(PL_unlockhook)(aTHX_ sv)
1500
189b2af5 1501#define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
1502#define SvSETMAGIC(x) STMT_START { if (SvSMAGICAL(x)) mg_set(x); } STMT_END
79072805 1503
54310121 1504#define SvSetSV_and(dst,src,finally) \
189b2af5 1505 STMT_START { \
54310121 1506 if ((dst) != (src)) { \
1507 sv_setsv(dst, src); \
1508 finally; \
189b2af5 1509 } \
1510 } STMT_END
54310121 1511#define SvSetSV_nosteal_and(dst,src,finally) \
189b2af5 1512 STMT_START { \
8ebc5c01 1513 if ((dst) != (src)) { \
5fcdf167 1514 sv_setsv_flags(dst, src, SV_GMAGIC | SV_NOSTEAL); \
54310121 1515 finally; \
189b2af5 1516 } \
1517 } STMT_END
79072805 1518
54310121 1519#define SvSetSV(dst,src) \
c9d716f7 1520 SvSetSV_and(dst,src,/*nothing*/;)
54310121 1521#define SvSetSV_nosteal(dst,src) \
c9d716f7 1522 SvSetSV_nosteal_and(dst,src,/*nothing*/;)
54310121 1523
1524#define SvSetMagicSV(dst,src) \
1525 SvSetSV_and(dst,src,SvSETMAGIC(dst))
1526#define SvSetMagicSV_nosteal(dst,src) \
1527 SvSetSV_nosteal_and(dst,src,SvSETMAGIC(dst))
1528
db79b45b 1529
1045810a 1530#if !defined(SKIP_DEBUGGING)
79072805 1531#define SvPEEK(sv) sv_peek(sv)
3967c732 1532#else
1533#define SvPEEK(sv) ""
1534#endif
79072805 1535
5dc8bdac 1536#define SvIMMORTAL(sv) ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes || (sv)==&PL_sv_no || (sv)==&PL_sv_placeholder)
36477c24 1537
3280af22 1538#define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
54310121 1539
79072805 1540#define isGV(sv) (SvTYPE(sv) == SVt_PVGV)
1541
933fea7f 1542#define SvGROW(sv,len) (SvLEN(sv) < (len) ? sv_grow(sv,len) : SvPVX(sv))
5902b6a9 1543#define SvGROW_mutable(sv,len) \
1544 (SvLEN(sv) < (len) ? sv_grow(sv,len) : SvPVX_mutable(sv))
933fea7f 1545#define Sv_Grow sv_grow
3d35f11b 1546
a0739874 1547#define CLONEf_COPY_STACKS 1
1548#define CLONEf_KEEP_PTR_TABLE 2
c43294b8 1549#define CLONEf_CLONE_HOST 4
0405e91e 1550#define CLONEf_JOIN_IN 8
a0739874 1551
8cf8f3d1 1552struct clone_params {
d2d73c3e 1553 AV* stashes;
1554 UV flags;
59b40662 1555 PerlInterpreter *proto_perl;
8cf8f3d1 1556};
102d3b8a 1557
1558/*
1559 * Local variables:
1560 * c-indentation-style: bsd
1561 * c-basic-offset: 4
1562 * indent-tabs-mode: t
1563 * End:
1564 *
1565 * ex: set ts=8 sts=4 sw=4 noet:
1566 */