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