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