-void defvar_mumble (CONST char *names, CONST void *magic, size_t sizeof_magic);
-
-#ifdef USE_INDEXED_LRECORD_IMPLEMENTATION
-# define symbol_value_forward_lheader_initializer { 1, 0, 0 }
-#else
-# define symbol_value_forward_lheader_initializer \
- { lrecord_symbol_value_forward }
-#endif
-
-#define DEFVAR_HEADER(lname, c_location, forward_type) \
- DEFVAR_MAGIC_HEADER (lname, c_location, forward_type, 0)
+void defvar_magic (const char *symbol_name, const struct symbol_value_forward *magic);
+
+#define DEFVAR_SYMVAL_FWD(lname, c_location, forward_type, magicfun) do { \
+ static const struct symbol_value_forward I_hate_C = \
+ { /* struct symbol_value_forward */ \
+ { /* struct symbol_value_magic */ \
+ { /* struct lcrecord_header */ \
+ { /* struct lrecord_header */ \
+ lrecord_type_symbol_value_forward, /* lrecord_type_index */ \
+ 1, /* mark bit */ \
+ 1, /* c_readonly bit */ \
+ 1 /* lisp_readonly bit */ \
+ }, \
+ 0, /* next */ \
+ 0, /* uid */ \
+ 0 /* free */ \
+ }, \
+ c_location, \
+ forward_type \
+ }, \
+ magicfun \
+ }; \
+ defvar_magic ((lname), &I_hate_C); \
+} while (0)