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