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