[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/i586-linux-thread-multi/CORE/ -> sv.h (source)

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


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1