-#define DEFVAR_BUFFER_LOCAL_1(lname, field_name, forward_type, magicfun) do { \
- static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C \
- = { { { symbol_value_forward_lheader_initializer, \
- (struct lcrecord_header *) &(buffer_local_flags.field_name), 69 }, \
- forward_type }, magicfun }; \
- { \
- int offset = ((char *)symbol_value_forward_forward (&I_hate_C) - \
- (char *)&buffer_local_flags); \
- defvar_magic (lname, &I_hate_C); \
- \
- *((Lisp_Object *)(offset + (char *)XBUFFER (Vbuffer_local_symbols))) \
- = intern (lname); \
- } \
-} while (0)
-
-#define DEFVAR_BUFFER_LOCAL_MAGIC(lname, field_name, magicfun) \
- DEFVAR_BUFFER_LOCAL_1 (lname, field_name, \
- SYMVAL_CURRENT_BUFFER_FORWARD, magicfun)
-#define DEFVAR_BUFFER_LOCAL(lname, field_name) \
- DEFVAR_BUFFER_LOCAL_MAGIC (lname, field_name, 0)
-#define DEFVAR_CONST_BUFFER_LOCAL_MAGIC(lname, field_name, magicfun) \
- DEFVAR_BUFFER_LOCAL_1 (lname, field_name, \
- SYMVAL_CONST_CURRENT_BUFFER_FORWARD, magicfun)
-#define DEFVAR_CONST_BUFFER_LOCAL(lname, field_name) \
- DEFVAR_CONST_BUFFER_LOCAL_MAGIC (lname, field_name, 0)
-
-#define DEFVAR_BUFFER_DEFAULTS_MAGIC(lname, field_name, magicfun) \
- DEFVAR_SYMVAL_FWD (lname, &(buffer_local_flags.field_name), \
- SYMVAL_DEFAULT_BUFFER_FORWARD, magicfun)
-#define DEFVAR_BUFFER_DEFAULTS(lname, field_name) \
- DEFVAR_BUFFER_DEFAULTS_MAGIC (lname, field_name, 0)
+#define DEFVAR_BUFFER_LOCAL(lname, field_name) do { \
+static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C \
+ = { { { symbol_value_forward_lheader_initializer, \
+ (struct lcrecord_header *) &(buffer_local_flags.field_name), 69 }, \
+ SYMVAL_CURRENT_BUFFER_FORWARD }, 0 }; \
+ defvar_buffer_local ((lname), &I_hate_C); \
+ } while (0)
+
+#define DEFVAR_BUFFER_LOCAL_MAGIC(lname, field_name, magicfun) do { \
+static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C \
+ = { { { symbol_value_forward_lheader_initializer, \
+ (struct lcrecord_header *) &(buffer_local_flags.field_name), 69 }, \
+ SYMVAL_CURRENT_BUFFER_FORWARD }, magicfun }; \
+ defvar_buffer_local ((lname), &I_hate_C); \
+ } while (0)
+
+#define DEFVAR_CONST_BUFFER_LOCAL(lname, field_name) do { \
+static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C \
+ = { { { symbol_value_forward_lheader_initializer, \
+ (struct lcrecord_header *) &(buffer_local_flags.field_name), 69 }, \
+ SYMVAL_CONST_CURRENT_BUFFER_FORWARD }, 0 }; \
+ defvar_buffer_local ((lname), &I_hate_C); \
+ } while (0)
+
+#define DEFVAR_CONST_BUFFER_LOCAL_MAGIC(lname, field_name, magicfun) do{\
+static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C \
+ = { { { symbol_value_forward_lheader_initializer, \
+ (struct lcrecord_header *) &(buffer_local_flags.field_name), 69 }, \
+ SYMVAL_CONST_CURRENT_BUFFER_FORWARD }, magicfun }; \
+ defvar_buffer_local ((lname), &I_hate_C); \
+ } while (0)
+
+static void
+defvar_buffer_local (CONST char *namestring,
+ CONST struct symbol_value_forward *m)
+{
+ int offset = ((char *)symbol_value_forward_forward (m)
+ - (char *)&buffer_local_flags);
+
+ defvar_mumble (namestring, m, sizeof (*m));
+
+ *((Lisp_Object *)(offset + (char *)XBUFFER (Vbuffer_local_symbols)))
+ = intern (namestring);
+}
+
+/* DOC is ignored because it is snagged and recorded externally
+ * by make-docfile */
+#define DEFVAR_BUFFER_DEFAULTS(lname, field_name) do { \
+static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C \
+ = { { { symbol_value_forward_lheader_initializer, \
+ (struct lcrecord_header *) &(buffer_local_flags.field_name), 69 }, \
+ SYMVAL_DEFAULT_BUFFER_FORWARD }, 0 }; \
+ defvar_mumble ((lname), &I_hate_C, sizeof (I_hate_C)); \
+ } while (0)
+
+#define DEFVAR_BUFFER_DEFAULTS_MAGIC(lname, field_name, magicfun) do { \
+static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C \
+ = { { { symbol_value_forward_lheader_initializer, \
+ (struct lcrecord_header *) &(buffer_local_flags.field_name), 69 }, \
+ SYMVAL_DEFAULT_BUFFER_FORWARD }, magicfun }; \
+ defvar_mumble ((lname), &I_hate_C, sizeof (I_hate_C)); \
+ } while (0)