This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix indendation of DM_* flag definitions
[perl5.git] / gv.h
diff --git a/gv.h b/gv.h
index 091a568..54722b7 100644 (file)
--- a/gv.h
+++ b/gv.h
@@ -1,7 +1,7 @@
 /*    gv.h
  *
- *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- *    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
+ *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
@@ -27,29 +27,29 @@ struct gp {
 
 #if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__INTEL_COMPILER)
 #  define GvGP(gv)                                                     \
-       (*({GV *const shplep = (GV *) (gv);                             \
-           assert(SvTYPE(shplep) == SVt_PVGV || SvTYPE(shplep) == SVt_PVLV); \
-           assert(isGV_with_GP(shplep));                               \
-           &((shplep)->sv_u.svu_gp);}))
+       (*({GV *const _gvgp = (GV *) (gv);                              \
+           assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
+           assert(isGV_with_GP(_gvgp));                                \
+           &((_gvgp)->sv_u.svu_gp);}))
 #  define GvFLAGS(gv)                                                  \
-       (*({GV *const yaah  = (GV *) (gv);                              \
-           assert(SvTYPE(yaah) == SVt_PVGV || SvTYPE(yaah) == SVt_PVLV); \
-           assert(isGV_with_GP(yaah));                                 \
-           &(GvXPVGV(yaah)->xpv_cur);}))
+       (*({GV *const _gvflags = (GV *) (gv);                           \
+           assert(SvTYPE(_gvflags) == SVt_PVGV || SvTYPE(_gvflags) == SVt_PVLV); \
+           assert(isGV_with_GP(_gvflags));                             \
+           &(GvXPVGV(_gvflags)->xpv_cur);}))
 #  define GvSTASH(gv)                                                  \
-       (*({ GV * const _gv = (GV *) (gv);                              \
-           assert(isGV_with_GP(_gv));                                  \
-           assert(SvTYPE(_gv) == SVt_PVGV || SvTYPE(_gv) >= SVt_PVLV); \
-           &(GvXPVGV(_gv)->xnv_u.xgv_stash);                           \
+       (*({ GV * const _gvstash = (GV *) (gv);                         \
+           assert(isGV_with_GP(_gvstash));                             \
+           assert(SvTYPE(_gvstash) == SVt_PVGV || SvTYPE(_gvstash) >= SVt_PVLV); \
+           &(GvXPVGV(_gvstash)->xnv_u.xgv_stash);                      \
         }))
 #  define GvNAME_HEK(gv)                                               \
-       (*({ GV * const zzzz = (GV *) (gv);                             \
-          assert(isGV_with_GP(zzzz));                                  \
-          assert(SvTYPE(zzzz) == SVt_PVGV || SvTYPE(zzzz) >= SVt_PVLV); \
-          assert(!SvVALID(zzzz));                                      \
-          &(GvXPVGV(zzzz)->xiv_u.xivu_namehek);                        \
+    (*({ GV * const _gvname_hek = (GV *) (gv);                         \
+          assert(isGV_with_GP(_gvname_hek));                           \
+          assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \
+          assert(!SvVALID(_gvname_hek));                               \
+          &(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek);                 \
         }))
-#  define GvNAME_get(gv)       ({ assert(GvNAME_HEK(gv)); HEK_KEY(GvNAME_HEK(gv)); })
+#  define GvNAME_get(gv)       ({ assert(GvNAME_HEK(gv)); (char *)HEK_KEY(GvNAME_HEK(gv)); })
 #  define GvNAMELEN_get(gv)    ({ assert(GvNAME_HEK(gv)); HEK_LEN(GvNAME_HEK(gv)); })
 #else
 #  define GvGP(gv)     ((gv)->sv_u.svu_gp)
@@ -88,16 +88,13 @@ Return the SV from the GV.
 #endif
 
 #define GvREFCNT(gv)   (GvGP(gv)->gp_refcnt)
-#define GvIO(gv)       ((gv) && SvTYPE((SV*)gv) == SVt_PVGV && GvGP(gv) ? GvIOp(gv) : NULL)
+#define GvIO(gv)       ((gv) && SvTYPE((const SV*)gv) == SVt_PVGV && GvGP(gv) ? GvIOp(gv) : NULL)
 #define GvIOp(gv)      (GvGP(gv)->gp_io)
 #define GvIOn(gv)      (GvIO(gv) ? GvIOp(gv) : GvIOp(gv_IOadd(gv)))
 
 #define GvFORM(gv)     (GvGP(gv)->gp_form)
 #define GvAV(gv)       (GvGP(gv)->gp_av)
 
-/* This macro is deprecated.  Do not use! */
-#define GvREFCNT_inc(gv) ((GV*)SvREFCNT_inc(gv))       /* DO NOT USE */
-
 #define GvAVn(gv)      (GvGP(gv)->gp_av ? \
                         GvGP(gv)->gp_av : \
                         GvGP(gv_AVadd(gv))->gp_av)
@@ -117,6 +114,7 @@ Return the SV from the GV.
 #define GvFILEGV(gv)   (gv_fetchfile(GvFILE(gv)))
 
 #define GvEGV(gv)      (GvGP(gv)->gp_egv)
+#define GvEGVx(gv)     (isGV_with_GP(gv) ? GvEGV(gv) : NULL)
 #define GvENAME(gv)    GvNAME(GvEGV(gv) ? GvEGV(gv) : gv)
 #define GvESTASH(gv)   GvSTASH(GvEGV(gv) ? GvEGV(gv) : gv)
 
@@ -166,28 +164,18 @@ Return the SV from the GV.
 #define GvIN_PAD_on(gv)                (GvFLAGS(gv) |= GVf_IN_PAD)
 #define GvIN_PAD_off(gv)       (GvFLAGS(gv) &= ~GVf_IN_PAD)
 
-#define GvUNIQUE(gv)            0
-#define GvUNIQUE_on(gv)         NOOP
-#define GvUNIQUE_off(gv)        NOOP
-
-#ifdef USE_ITHREADS
-#define GV_UNIQUE_CHECK
-#else
-#undef  GV_UNIQUE_CHECK
-#endif
-
 #ifndef PERL_CORE
 #  define Nullgv Null(GV*)
 #endif
 
-#define DM_UID   0x003
-#define DM_RUID   0x001
-#define DM_EUID   0x002
-#define DM_ARRAY 0x004
-#define DM_GID   0x030
-#define DM_RGID   0x010
-#define DM_EGID   0x020
-#define DM_DELAY 0x100
+#define DM_RUID      0x001
+#define DM_EUID      0x002
+#define DM_UID       (DM_RUID|DM_EUID)
+#define DM_ARRAY_ISA 0x004
+#define DM_RGID      0x010
+#define DM_EGID      0x020
+#define DM_GID       (DM_RGID|DM_EGID)
+#define DM_DELAY     0x100
 
 /*
  * symbol creation flags, for use in gv_fetchpv() and get_*v()
@@ -220,6 +208,11 @@ Return the SV from the GV.
 #define gv_efullname3(sv,gv,prefix) gv_efullname4(sv,gv,prefix,TRUE)
 #define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE)
 
+#define gv_AVadd(gv) gv_add_by_type((gv), SVt_PVAV)
+#define gv_HVadd(gv) gv_add_by_type((gv), SVt_PVHV)
+#define gv_IOadd(gv) gv_add_by_type((gv), SVt_PVIO)
+#define gv_SVadd(gv) gv_add_by_type((gv), SVt_NULL)
+
 /*
  * Local variables:
  * c-indentation-style: bsd