home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / gv.h < prev    next >
C/C++ Source or Header  |  2000-02-06  |  5KB  |  152 lines

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