Fix an error, spotted by Tim Bunce.
[p5sagit/p5-mst-13.2.git] / hv.h
diff --git a/hv.h b/hv.h
index 4ae5e1a..9e31335 100644 (file)
--- a/hv.h
+++ b/hv.h
@@ -386,13 +386,35 @@ C<SV*>.
 
 #ifdef PERL_CORE
 
+/* Gosh. This really isn't a good name any longer.  */
 struct refcounted_he {
     struct refcounted_he *refcounted_he_next;  /* next entry in chain */
+#ifdef USE_ITHREADS
+    U32                   refcounted_he_hash;
+    U32                   refcounted_he_keylen;
+#else
     HEK                  *refcounted_he_hek;   /* hint key */
-    SV                   *refcounted_he_val;   /* hint value */
+#endif
     U32                          refcounted_he_refcnt; /* reference count */
+    union {
+       IV                refcounted_he_u_iv;
+       UV                refcounted_he_u_uv;
+       STRLEN            refcounted_he_u_len;
+    } refcounted_he_val;
+    /* First byte is flags. Then NUL-terminated value. Then for ithreads,
+       non-NUL terminated key.  */
+    char                  refcounted_he_data[1];
 };
 
+/* Flag bits are HVhek_UTF8, HVhek_WASUTF8, then */
+#define HVrhek_undef   0x00 /* Value is undef. */
+#define HVrhek_PV      0x10 /* Value is a string. */
+#define HVrhek_IV      0x20 /* Value is IV/UV. */
+#define HVrhek_delete  0x30 /* Value is placeholder - signifies delete. */
+#define HVrhek_typemask        0x30
+#define HVrhek_UTF8    0x40 /* string value is utf8. */
+#define HVrhek_UV      0x40 /* integer value is UV. */
+
 #  ifdef USE_ITHREADS
 #    define HINTS_REFCNT_LOCK          MUTEX_LOCK(&PL_hints_mutex)
 #    define HINTS_REFCNT_UNLOCK                MUTEX_UNLOCK(&PL_hints_mutex)