home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / gv.h < prev    next >
C/C++ Source or Header  |  2005-01-27  |  5KB  |  156 lines

  1. /*    gv.h
  2.  *
  3.  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
  4.  *    2000, 2001, 2002, 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.     U32        gp_refcnt;    /* how many globs point to this? */
  14.     struct io *    gp_io;        /* filehandle value */
  15.     CV *    gp_form;    /* format value */
  16.     AV *    gp_av;        /* array value */
  17.     HV *    gp_hv;        /* hash value */
  18.     GV *    gp_egv;        /* effective gv, if *glob */
  19.     CV *    gp_cv;        /* subroutine value */
  20.     U32        gp_cvgen;    /* generational validity of cached gv_cv */
  21.     U32        gp_flags;    /* XXX unused */
  22.     line_t    gp_line;    /* line first declared at (for -w) */
  23.     char *    gp_file;    /* file first declared in (for -w) */
  24. };
  25.  
  26. #define GvXPVGV(gv)    ((XPVGV*)SvANY(gv))
  27.  
  28. #define GvGP(gv)    (GvXPVGV(gv)->xgv_gp)
  29. #define GvNAME(gv)    (GvXPVGV(gv)->xgv_name)
  30. #define GvNAMELEN(gv)    (GvXPVGV(gv)->xgv_namelen)
  31. #define GvSTASH(gv)    (GvXPVGV(gv)->xgv_stash)
  32. #define GvFLAGS(gv)    (GvXPVGV(gv)->xgv_flags)
  33.  
  34. /*
  35. =head1 GV Functions
  36.  
  37. =for apidoc Am|SV*|GvSV|GV* gv
  38.  
  39. Return the SV from the GV.
  40.  
  41. =cut
  42. */
  43.  
  44. #define GvSV(gv)    (GvGP(gv)->gp_sv)
  45. #define GvREFCNT(gv)    (GvGP(gv)->gp_refcnt)
  46. #define GvIO(gv)    ((gv) && SvTYPE((SV*)gv) == SVt_PVGV && GvGP(gv) ? GvIOp(gv) : 0)
  47. #define GvIOp(gv)    (GvGP(gv)->gp_io)
  48. #define GvIOn(gv)    (GvIO(gv) ? GvIOp(gv) : GvIOp(gv_IOadd(gv)))
  49.  
  50. #define GvFORM(gv)    (GvGP(gv)->gp_form)
  51. #define GvAV(gv)    (GvGP(gv)->gp_av)
  52.  
  53. /* This macro is deprecated.  Do not use! */
  54. #define GvREFCNT_inc(gv) ((GV*)SvREFCNT_inc(gv))    /* DO NOT USE */
  55.  
  56. #define GvAVn(gv)    (GvGP(gv)->gp_av ? \
  57.              GvGP(gv)->gp_av : \
  58.              GvGP(gv_AVadd(gv))->gp_av)
  59. #define GvHV(gv)    ((GvGP(gv))->gp_hv)
  60.  
  61. #define GvHVn(gv)    (GvGP(gv)->gp_hv ? \
  62.              GvGP(gv)->gp_hv : \
  63.              GvGP(gv_HVadd(gv))->gp_hv)
  64.  
  65. #define GvCV(gv)    (GvGP(gv)->gp_cv)
  66. #define GvCVGEN(gv)    (GvGP(gv)->gp_cvgen)
  67. #define GvCVu(gv)    (GvGP(gv)->gp_cvgen ? Nullcv : GvGP(gv)->gp_cv)
  68.  
  69. #define GvGPFLAGS(gv)    (GvGP(gv)->gp_flags)
  70.  
  71. #define GvLINE(gv)    (GvGP(gv)->gp_line)
  72. #define GvFILE(gv)    (GvGP(gv)->gp_file)
  73. #define GvFILEGV(gv)    (gv_fetchfile(GvFILE(gv)))
  74.  
  75. #define GvEGV(gv)    (GvGP(gv)->gp_egv)
  76. #define GvENAME(gv)    GvNAME(GvEGV(gv) ? GvEGV(gv) : gv)
  77. #define GvESTASH(gv)    GvSTASH(GvEGV(gv) ? GvEGV(gv) : gv)
  78.  
  79. #define GVf_INTRO    0x01
  80. #define GVf_MULTI    0x02
  81. #define GVf_ASSUMECV    0x04
  82. #define GVf_IN_PAD    0x08
  83. #define GVf_IMPORTED    0xF0
  84. #define GVf_IMPORTED_SV      0x10
  85. #define GVf_IMPORTED_AV      0x20
  86. #define GVf_IMPORTED_HV      0x40
  87. #define GVf_IMPORTED_CV      0x80
  88.  
  89. #define GvINTRO(gv)        (GvFLAGS(gv) & GVf_INTRO)
  90. #define GvINTRO_on(gv)        (GvFLAGS(gv) |= GVf_INTRO)
  91. #define GvINTRO_off(gv)        (GvFLAGS(gv) &= ~GVf_INTRO)
  92.  
  93. #define GvMULTI(gv)        (GvFLAGS(gv) & GVf_MULTI)
  94. #define GvMULTI_on(gv)        (GvFLAGS(gv) |= GVf_MULTI)
  95. #define GvMULTI_off(gv)        (GvFLAGS(gv) &= ~GVf_MULTI)
  96.  
  97. #define GvASSUMECV(gv)        (GvFLAGS(gv) & GVf_ASSUMECV)
  98. #define GvASSUMECV_on(gv)    (GvFLAGS(gv) |= GVf_ASSUMECV)
  99. #define GvASSUMECV_off(gv)    (GvFLAGS(gv) &= ~GVf_ASSUMECV)
  100.  
  101. #define GvIMPORTED(gv)        (GvFLAGS(gv) & GVf_IMPORTED)
  102. #define GvIMPORTED_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED)
  103. #define GvIMPORTED_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED)
  104.  
  105. #define GvIMPORTED_SV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_SV)
  106. #define GvIMPORTED_SV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_SV)
  107. #define GvIMPORTED_SV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_SV)
  108.  
  109. #define GvIMPORTED_AV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_AV)
  110. #define GvIMPORTED_AV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_AV)
  111. #define GvIMPORTED_AV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_AV)
  112.  
  113. #define GvIMPORTED_HV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_HV)
  114. #define GvIMPORTED_HV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_HV)
  115. #define GvIMPORTED_HV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_HV)
  116.  
  117. #define GvIMPORTED_CV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_CV)
  118. #define GvIMPORTED_CV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_CV)
  119. #define GvIMPORTED_CV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_CV)
  120.  
  121. #define GvIN_PAD(gv)        (GvFLAGS(gv) & GVf_IN_PAD)
  122. #define GvIN_PAD_on(gv)        (GvFLAGS(gv) |= GVf_IN_PAD)
  123. #define GvIN_PAD_off(gv)    (GvFLAGS(gv) &= ~GVf_IN_PAD)
  124.  
  125. /* XXX: all GvFLAGS options are used, borrowing GvGPFLAGS for the moment */
  126.  
  127. #define GVf_UNIQUE           0x0001
  128. #define GvUNIQUE(gv)         (GvGP(gv) && (GvGPFLAGS(gv) & GVf_UNIQUE))
  129. #define GvUNIQUE_on(gv)      (GvGPFLAGS(gv) |= GVf_UNIQUE)
  130. #define GvUNIQUE_off(gv)     (GvGPFLAGS(gv) &= ~GVf_UNIQUE)
  131.  
  132. #ifdef USE_ITHREADS
  133. #define GV_UNIQUE_CHECK
  134. #else
  135. #undef  GV_UNIQUE_CHECK
  136. #endif
  137.  
  138. #define Nullgv Null(GV*)
  139.  
  140. #define DM_UID   0x003
  141. #define DM_RUID   0x001
  142. #define DM_EUID   0x002
  143. #define DM_GID   0x030
  144. #define DM_RGID   0x010
  145. #define DM_EGID   0x020
  146. #define DM_DELAY 0x100
  147.  
  148. /*
  149.  * symbol creation flags, for use in gv_fetchpv() and get_*v()
  150.  */
  151. #define GV_ADD        0x01    /* add, if symbol not already there */
  152. #define GV_ADDMULTI    0x02    /* add, pretending it has been added already */
  153. #define GV_ADDWARN    0x04    /* add, but warn if symbol wasn't already there */
  154. #define GV_ADDINEVAL    0x08    /* add, as though we're doing so within an eval */
  155. #define GV_NOINIT    0x10    /* add, but don't init symbol, if type != PVGV */
  156.