updated for version 7.0043
diff --git a/src/structs.h b/src/structs.h
index 051eb2d..a5e9e8d 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -910,6 +910,42 @@
     int		userhl;
 };
 
+/* Item for a hashtable.  "hi_key" can be one of three values:
+ * NULL:	   Never been used
+ * HI_KEY_REMOVED: Entry was removed
+ * Otherwise:	   Used item, pointer to the actual key; this usually is
+ *		   inside the item, subtract an offset to locate the item.
+ *		   This reduces the size of hashitem by 1/3.
+ */
+typedef struct hashitem_S
+{
+    long_u	hi_hash;	/* cached hash number of hi_key */
+    char_u	*hi_key;
+} hashitem;
+
+/* The address of "hash_removed" is used as a magic number for hi_key to
+ * indicate a removed item. */
+#define HI_KEY_REMOVED &hash_removed
+#define HASHITEM_EMPTY(hi) ((hi)->hi_key == NULL || (hi)->hi_key == &hash_removed)
+
+/* Initial size for a hashtable.  Our items are relatively small and growing
+ * is expensive, thus use 16 as a start.  Must be a power of 2. */
+#define HT_INIT_SIZE 16
+
+typedef struct hashtable_S
+{
+    long_u	ht_mask;	/* mask used for hash value (nr of items in
+				 * array is "ht_mask" + 1) */
+    int		ht_used;	/* number of items used */
+    int		ht_filled;	/* number of items used + removed */
+    int		ht_locked;	/* counter for hash_lock() */
+    int		ht_error;	/* when set growing failed, can't add more
+				   items before growing works */
+    hashitem	*ht_array;	/* points to the array, allocated when it's
+				   not "ht_smallarray" */
+    hashitem	ht_smallarray[HT_INIT_SIZE];   /* initial array */
+} hashtable;
+
 /*
  * buffer: structure that holds information about one file
  *
@@ -1223,7 +1259,7 @@
 #endif
 
 #ifdef FEAT_EVAL
-    garray_T	b_vars;		/* internal variables, local to buffer */
+    hashtable	b_vars;		/* internal variables, local to buffer */
 #endif
 
     /* When a buffer is created, it starts without a swap file.  b_may_swap is
@@ -1567,7 +1603,7 @@
 #endif
 
 #ifdef FEAT_EVAL
-    garray_T	w_vars;		/* internal variables, local to window */
+    hashtable	w_vars;		/* internal variables, local to window */
 #endif
 
 #if defined(FEAT_RIGHTLEFT) && defined(FEAT_FKMAP)
@@ -1929,38 +1965,3 @@
 } prt_settings_T;
 
 #define PRINT_NUMBER_WIDTH 8
-
-/* Item for a hashtable.  "hi_key" can be one of three values:
- * NULL:	   Never been used
- * HI_KEY_REMOVED: Entry was removed
- * Otherwise:	   Used item, pointer to the actual key; this usually is
- *		   inside the item, subtract an offset to locate the item.
- *		   This reduces the size of hashitem by 1/3.
- */
-typedef struct hashitem_S
-{
-    long_u	hi_hash;	/* cached hash number of hi_key */
-    char_u	*hi_key;
-} hashitem;
-
-/* The address of "hash_removed" is used as a magic number for hi_key to
- * indicate a removed item. */
-#define HI_KEY_REMOVED &hash_removed
-#define HASHITEM_EMPTY(hi) ((hi)->hi_key == NULL || (hi)->hi_key == &hash_removed)
-
-/* Initial size for a hashtable.  Our items are relatively small and growing
- * is expensive, thus use 16 as a start.  Must be a power of 2. */
-#define HT_INIT_SIZE 16
-
-typedef struct hashtable_S
-{
-    long_u	ht_mask;	/* mask used for hash value (nr of items in
-				 * array is "ht_mask" + 1) */
-    int		ht_used;	/* number of items used */
-    int		ht_filled;	/* number of items used + removed */
-    int		ht_error;	/* when set growing failed, can't add more
-				   items before growing works */
-    hashitem	*ht_array;	/* points to the array, allocated when it's
-				   not "ht_smallarray" */
-    hashitem	ht_smallarray[HT_INIT_SIZE];   /* initial array */
-} hashtable;