-const struct lrecord_implementation lrecord_##c_name = \
- { name, marker, printer, nuker, equal, hash, desc, \
- getprop, putprop, remprop, plist, size, sizer, \
- lrecord_type_##c_name, basic_p }
-
-#define DEFINE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \
-DEFINE_EXTERNAL_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype)
-
-#define DEFINE_EXTERNAL_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \
-MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof (structtype),0,0,structtype)
-
-#define DEFINE_EXTERNAL_LRECORD_SEQUENCE_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \
-DEFINE_EXTERNAL_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,sizer,structtype)
-
-#define DEFINE_EXTERNAL_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \
-MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype)
-
-#define MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \
-DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) \
-unsigned int lrecord_type_##c_name = lrecord_type_count++; \
-const struct lrecord_implementation lrecord_##c_name = \
- { name, marker, printer, nuker, equal, hash, desc, \
- getprop, putprop, remprop, plist, size, sizer, \
- (enum lrecord_type)lrecord_type_##c_name, basic_p }
-
-
-extern Lisp_Object (*lrecord_markers[]) (Lisp_Object);
-
-#define INIT_LRECORD_IMPLEMENTATION(type) do { \
- lrecord_implementations_table[lrecord_type_##type] = &lrecord_##type; \
- lrecord_markers[lrecord_type_##type] = \
- lrecord_implementations_table[lrecord_type_##type]->marker; \
-} while (0)
-
-#define LRECORDP(a) (XTYPE (a) == Lisp_Type_Record)
+static int lrecord_##c_name##_lrecord_type_index; \
+CONST_IF_NOT_DEBUG struct lrecord_implementation lrecord_##c_name[2] = \
+ { { name, marker, printer, nuker, equal, hash, \
+ getprop, putprop, remprop, props, size, sizer, \
+ &(lrecord_##c_name##_lrecord_type_index), basic_p }, \
+ { 0, 0, 0, this_marks_a_marked_record, 0, 0, 0, 0, 0, 0, 0, 0, 0, basic_p } }
+
+#define LRECORDP(a) (XTYPE ((a)) == Lisp_Type_Record)