[ 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/ -> gv.h (source)

   1  /*    gv.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  struct gp {
  12      SV *    gp_sv;        /* scalar value */
  13      struct io *    gp_io;        /* filehandle value */
  14      CV *    gp_cv;        /* subroutine value */
  15      U32        gp_cvgen;    /* generational validity of cached gv_cv */
  16      U32        gp_refcnt;    /* how many globs point to this? */
  17      HV *    gp_hv;        /* hash value */
  18      AV *    gp_av;        /* array value */
  19      CV *    gp_form;    /* format value */
  20      GV *    gp_egv;        /* effective gv, if *glob */
  21      line_t    gp_line;    /* line first declared at (for -w) */
  22      HEK *    gp_file_hek;    /* file first declared in (for -w) */
  23  };
  24  
  25  #define GvXPVGV(gv)    ((XPVGV*)SvANY(gv))
  26  
  27  
  28  #if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__INTEL_COMPILER)
  29  #  define GvGP(gv)                            \
  30      (*({GV *const shplep = (GV *) (gv);                \
  31          assert(SvTYPE(shplep) == SVt_PVGV || SvTYPE(shplep) == SVt_PVLV); \
  32          assert(isGV_with_GP(shplep));                \
  33          &((shplep)->sv_u.svu_gp);}))
  34  #  define GvFLAGS(gv)                            \
  35      (*({GV *const yaah  = (GV *) (gv);                \
  36          assert(SvTYPE(yaah) == SVt_PVGV || SvTYPE(yaah) == SVt_PVLV); \
  37          assert(isGV_with_GP(yaah));                    \
  38          &(GvXPVGV(yaah)->xpv_cur);}))
  39  #  define GvSTASH(gv)                            \
  40      (*({ GV * const _gv = (GV *) (gv);                \
  41          assert(isGV_with_GP(_gv));                    \
  42          assert(SvTYPE(_gv) == SVt_PVGV || SvTYPE(_gv) >= SVt_PVLV);    \
  43          &(GvXPVGV(_gv)->xnv_u.xgv_stash);                \
  44       }))
  45  #  define GvNAME_HEK(gv)                        \
  46      (*({ GV * const zzzz = (GV *) (gv);                \
  47         assert(isGV_with_GP(zzzz));                    \
  48         assert(SvTYPE(zzzz) == SVt_PVGV || SvTYPE(zzzz) >= SVt_PVLV); \
  49         assert(!SvVALID(zzzz));                    \
  50         &(GvXPVGV(zzzz)->xiv_u.xivu_namehek);            \
  51       }))
  52  #  define GvNAME_get(gv)    ({ assert(GvNAME_HEK(gv)); HEK_KEY(GvNAME_HEK(gv)); })
  53  #  define GvNAMELEN_get(gv)    ({ assert(GvNAME_HEK(gv)); HEK_LEN(GvNAME_HEK(gv)); })
  54  #else
  55  #  define GvGP(gv)    ((gv)->sv_u.svu_gp)
  56  #  define GvFLAGS(gv)    (GvXPVGV(gv)->xpv_cur)
  57  #  define GvSTASH(gv)    (GvXPVGV(gv)->xnv_u.xgv_stash)
  58  #  define GvNAME_HEK(gv)    (GvXPVGV(gv)->xiv_u.xivu_namehek)
  59  #  define GvNAME_get(gv)    HEK_KEY(GvNAME_HEK(gv))
  60  #  define GvNAMELEN_get(gv)    HEK_LEN(GvNAME_HEK(gv))
  61  #endif
  62  
  63  #define GvNAME(gv)    GvNAME_get(gv)
  64  #define GvNAMELEN(gv)    GvNAMELEN_get(gv)
  65  
  66  #define    GvASSIGN_GENERATION(gv)        (0 + ((XPV*) SvANY(gv))->xpv_len)
  67  #define    GvASSIGN_GENERATION_set(gv,val)            \
  68      STMT_START { assert(SvTYPE(gv) == SVt_PVGV);    \
  69          (((XPV*) SvANY(gv))->xpv_len = (val)); } STMT_END
  70  
  71  /*
  72  =head1 GV Functions
  73  
  74  =for apidoc Am|SV*|GvSV|GV* gv
  75  
  76  Return the SV from the GV.
  77  
  78  =cut
  79  */
  80  
  81  #define GvSV(gv)    (GvGP(gv)->gp_sv)
  82  #ifdef PERL_DONT_CREATE_GVSV
  83  #define GvSVn(gv)    (*(GvGP(gv)->gp_sv ? \
  84               &(GvGP(gv)->gp_sv) : \
  85               &(GvGP(gv_SVadd(gv))->gp_sv)))
  86  #else
  87  #define GvSVn(gv)    GvSV(gv)
  88  #endif
  89  
  90  #define GvREFCNT(gv)    (GvGP(gv)->gp_refcnt)
  91  #define GvIO(gv)    ((gv) && SvTYPE((SV*)gv) == SVt_PVGV && GvGP(gv) ? GvIOp(gv) : NULL)
  92  #define GvIOp(gv)    (GvGP(gv)->gp_io)
  93  #define GvIOn(gv)    (GvIO(gv) ? GvIOp(gv) : GvIOp(gv_IOadd(gv)))
  94  
  95  #define GvFORM(gv)    (GvGP(gv)->gp_form)
  96  #define GvAV(gv)    (GvGP(gv)->gp_av)
  97  
  98  /* This macro is deprecated.  Do not use! */
  99  #define GvREFCNT_inc(gv) ((GV*)SvREFCNT_inc(gv))    /* DO NOT USE */
 100  
 101  #define GvAVn(gv)    (GvGP(gv)->gp_av ? \
 102               GvGP(gv)->gp_av : \
 103               GvGP(gv_AVadd(gv))->gp_av)
 104  #define GvHV(gv)    ((GvGP(gv))->gp_hv)
 105  
 106  #define GvHVn(gv)    (GvGP(gv)->gp_hv ? \
 107               GvGP(gv)->gp_hv : \
 108               GvGP(gv_HVadd(gv))->gp_hv)
 109  
 110  #define GvCV(gv)    (GvGP(gv)->gp_cv)
 111  #define GvCVGEN(gv)    (GvGP(gv)->gp_cvgen)
 112  #define GvCVu(gv)    (GvGP(gv)->gp_cvgen ? NULL : GvGP(gv)->gp_cv)
 113  
 114  #define GvLINE(gv)    (GvGP(gv)->gp_line)
 115  #define GvFILE_HEK(gv)    (GvGP(gv)->gp_file_hek)
 116  #define GvFILE(gv)    (GvFILE_HEK(gv) ? HEK_KEY(GvFILE_HEK(gv)) : NULL)
 117  #define GvFILEGV(gv)    (gv_fetchfile(GvFILE(gv)))
 118  
 119  #define GvEGV(gv)    (GvGP(gv)->gp_egv)
 120  #define GvENAME(gv)    GvNAME(GvEGV(gv) ? GvEGV(gv) : gv)
 121  #define GvESTASH(gv)    GvSTASH(GvEGV(gv) ? GvEGV(gv) : gv)
 122  
 123  #define GVf_INTRO    0x01
 124  #define GVf_MULTI    0x02
 125  #define GVf_ASSUMECV    0x04
 126  #define GVf_IN_PAD    0x08
 127  #define GVf_IMPORTED    0xF0
 128  #define GVf_IMPORTED_SV      0x10
 129  #define GVf_IMPORTED_AV      0x20
 130  #define GVf_IMPORTED_HV      0x40
 131  #define GVf_IMPORTED_CV      0x80
 132  
 133  #define GvINTRO(gv)        (GvFLAGS(gv) & GVf_INTRO)
 134  #define GvINTRO_on(gv)        (GvFLAGS(gv) |= GVf_INTRO)
 135  #define GvINTRO_off(gv)        (GvFLAGS(gv) &= ~GVf_INTRO)
 136  
 137  #define GvMULTI(gv)        (GvFLAGS(gv) & GVf_MULTI)
 138  #define GvMULTI_on(gv)        (GvFLAGS(gv) |= GVf_MULTI)
 139  #define GvMULTI_off(gv)        (GvFLAGS(gv) &= ~GVf_MULTI)
 140  
 141  #define GvASSUMECV(gv)        (GvFLAGS(gv) & GVf_ASSUMECV)
 142  #define GvASSUMECV_on(gv)    (GvFLAGS(gv) |= GVf_ASSUMECV)
 143  #define GvASSUMECV_off(gv)    (GvFLAGS(gv) &= ~GVf_ASSUMECV)
 144  
 145  #define GvIMPORTED(gv)        (GvFLAGS(gv) & GVf_IMPORTED)
 146  #define GvIMPORTED_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED)
 147  #define GvIMPORTED_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED)
 148  
 149  #define GvIMPORTED_SV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_SV)
 150  #define GvIMPORTED_SV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_SV)
 151  #define GvIMPORTED_SV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_SV)
 152  
 153  #define GvIMPORTED_AV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_AV)
 154  #define GvIMPORTED_AV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_AV)
 155  #define GvIMPORTED_AV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_AV)
 156  
 157  #define GvIMPORTED_HV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_HV)
 158  #define GvIMPORTED_HV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_HV)
 159  #define GvIMPORTED_HV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_HV)
 160  
 161  #define GvIMPORTED_CV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_CV)
 162  #define GvIMPORTED_CV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_CV)
 163  #define GvIMPORTED_CV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_CV)
 164  
 165  #define GvIN_PAD(gv)        (GvFLAGS(gv) & GVf_IN_PAD)
 166  #define GvIN_PAD_on(gv)        (GvFLAGS(gv) |= GVf_IN_PAD)
 167  #define GvIN_PAD_off(gv)    (GvFLAGS(gv) &= ~GVf_IN_PAD)
 168  
 169  #define GvUNIQUE(gv)            0
 170  #define GvUNIQUE_on(gv)         NOOP
 171  #define GvUNIQUE_off(gv)        NOOP
 172  
 173  #ifdef USE_ITHREADS
 174  #define GV_UNIQUE_CHECK
 175  #else
 176  #undef  GV_UNIQUE_CHECK
 177  #endif
 178  
 179  #define Nullgv Null(GV*)
 180  
 181  #define DM_UID   0x003
 182  #define DM_RUID   0x001
 183  #define DM_EUID   0x002
 184  #define DM_ARRAY 0x004
 185  #define DM_GID   0x030
 186  #define DM_RGID   0x010
 187  #define DM_EGID   0x020
 188  #define DM_DELAY 0x100
 189  
 190  /*
 191   * symbol creation flags, for use in gv_fetchpv() and get_*v()
 192   */
 193  #define GV_ADD        0x01    /* add, if symbol not already there
 194                     For gv_name_set, adding a HEK for the first
 195                     time, so don't try to free what's there.  */
 196  #define GV_ADDMULTI    0x02    /* add, pretending it has been added already */
 197  #define GV_ADDWARN    0x04    /* add, but warn if symbol wasn't already there */
 198  #define GV_ADDINEVAL    0x08    /* add, as though we're doing so within an eval */
 199  #define GV_NOINIT    0x10    /* add, but don't init symbol, if type != PVGV */
 200  /* This is used by toke.c to avoid turing placeholder constants in the symbol
 201     table into full PVGVs with attached constant subroutines.  */
 202  #define GV_NOADD_NOINIT    0x20    /* Don't add the symbol if it's not there.
 203                     Don't init it if it is there but ! PVGV */
 204  #define GV_NOEXPAND    0x40    /* Don't expand SvOK() entries to PVGV */
 205  #define GV_NOTQUAL    0x80    /* A plain symbol name, not qualified with a
 206                     package (so skip checks for :: and ')  */
 207  
 208  /*      SVf_UTF8 (more accurately the return value from SvUTF8) is also valid
 209      as a flag to gv_fetch_pvn_flags, so ensure it lies outside this range.
 210  */
 211  
 212  #define GV_NOADD_MASK    (SVf_UTF8|GV_NOADD_NOINIT|GV_NOEXPAND|GV_NOTQUAL)
 213  /* The bit flags that don't cause gv_fetchpv() to add a symbol if not found */
 214  
 215  #define gv_fullname3(sv,gv,prefix) gv_fullname4(sv,gv,prefix,TRUE)
 216  #define gv_efullname3(sv,gv,prefix) gv_efullname4(sv,gv,prefix,TRUE)
 217  #define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE)
 218  
 219  /*
 220   * Local variables:
 221   * c-indentation-style: bsd
 222   * c-basic-offset: 4
 223   * indent-tabs-mode: t
 224   * End:
 225   *
 226   * ex: set ts=8 sts=4 sw=4 noet:
 227   */


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