This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: Compress::Zlib, pack "C" and utf-8 [PATCH]
[perl5.git] / gv.h
diff --git a/gv.h b/gv.h
index 25961ef..8494137 100644 (file)
--- a/gv.h
+++ b/gv.h
 
 struct gp {
     SV *       gp_sv;          /* scalar value */
-    U32                gp_refcnt;      /* how many globs point to this? */
     struct io *        gp_io;          /* filehandle value */
-    CV *       gp_form;        /* format value */
-    AV *       gp_av;          /* array value */
-    HV *       gp_hv;          /* hash value */
-    GV *       gp_egv;         /* effective gv, if *glob */
     CV *       gp_cv;          /* subroutine value */
     U32                gp_cvgen;       /* generational validity of cached gv_cv */
+    U32                gp_refcnt;      /* how many globs point to this? */
+    HV *       gp_hv;          /* hash value */
+    AV *       gp_av;          /* array value */
+    CV *       gp_form;        /* format value */
+    GV *       gp_egv;         /* effective gv, if *glob */
     line_t     gp_line;        /* line first declared at (for -w) */
     HEK *      gp_file_hek;    /* file first declared in (for -w) */
 };
@@ -25,7 +25,7 @@ struct gp {
 #define GvXPVGV(gv)    ((XPVGV*)SvANY(gv))
 
 
-#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#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); \
@@ -46,6 +46,7 @@ struct gp {
        (*({ 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);                        \
         }))
 #  define GvNAME_get(gv)       ({ assert(GvNAME_HEK(gv)); HEK_KEY(GvNAME_HEK(gv)); })
@@ -112,7 +113,7 @@ Return the SV from the GV.
 
 #define GvLINE(gv)     (GvGP(gv)->gp_line)
 #define GvFILE_HEK(gv) (GvGP(gv)->gp_file_hek)
-#define GvFILE(gv)     HEK_KEY(GvFILE_HEK(gv))
+#define GvFILE(gv)     (GvFILE_HEK(gv) ? HEK_KEY(GvFILE_HEK(gv)) : NULL)
 #define GvFILEGV(gv)   (gv_fetchfile(GvFILE(gv)))
 
 #define GvEGV(gv)      (GvGP(gv)->gp_egv)
@@ -206,6 +207,10 @@ Return the SV from the GV.
 /*      SVf_UTF8 (more accurately the return value from SvUTF8) is also valid
        as a flag to gv_fetch_pvn_flags, so ensure it lies outside this range.
 */
+
+#define GV_NOADD_MASK  (SVf_UTF8|GV_NOADD_NOINIT|GV_NOEXPAND|GV_NOTQUAL)
+/* The bit flags that don't cause gv_fetchpv() to add a symbol if not found */
+
 #define gv_fullname3(sv,gv,prefix) gv_fullname4(sv,gv,prefix,TRUE)
 #define gv_efullname3(sv,gv,prefix) gv_efullname4(sv,gv,prefix,TRUE)
 #define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE)