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