diff src/rangetab.c @ 398:74fd4e045ea6 r21-2-29

Import from CVS: tag r21-2-29
author cvs
date Mon, 13 Aug 2007 11:13:30 +0200
parents 8626e4521993
children a86b2b5e0111
line wrap: on
line diff
--- a/src/rangetab.c	Mon Aug 13 11:12:06 2007 +0200
+++ b/src/rangetab.c	Mon Aug 13 11:13:30 2007 +0200
@@ -41,20 +41,20 @@
    is not hard but just requires moving that stuff out of that file. */
 
 static Lisp_Object
-mark_range_table (Lisp_Object obj, void (*markobj) (Lisp_Object))
+mark_range_table (Lisp_Object obj)
 {
-  struct Lisp_Range_Table *rt = XRANGE_TABLE (obj);
+  Lisp_Range_Table *rt = XRANGE_TABLE (obj);
   int i;
 
   for (i = 0; i < Dynarr_length (rt->entries); i++)
-    markobj (Dynarr_at (rt->entries, i).val);
+    mark_object (Dynarr_at (rt->entries, i).val);
   return Qnil;
 }
 
 static void
 print_range_table (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
-  struct Lisp_Range_Table *rt = XRANGE_TABLE (obj);
+  Lisp_Range_Table *rt = XRANGE_TABLE (obj);
   char buf[200];
   int i;
 
@@ -77,8 +77,8 @@
 static int
 range_table_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
 {
-  struct Lisp_Range_Table *rt1 = XRANGE_TABLE (obj1);
-  struct Lisp_Range_Table *rt2 = XRANGE_TABLE (obj2);
+  Lisp_Range_Table *rt1 = XRANGE_TABLE (obj1);
+  Lisp_Range_Table *rt2 = XRANGE_TABLE (obj2);
   int i;
 
   if (Dynarr_length (rt1->entries) != Dynarr_length (rt2->entries))
@@ -107,7 +107,7 @@
 static unsigned long
 range_table_hash (Lisp_Object obj, int depth)
 {
-  struct Lisp_Range_Table *rt = XRANGE_TABLE (obj);
+  Lisp_Range_Table *rt = XRANGE_TABLE (obj);
   int i;
   int size = Dynarr_length (rt->entries);
   unsigned long hash = size;
@@ -132,10 +132,36 @@
   return hash;
 }
 
+static const struct lrecord_description rte_description_1[] = {
+  { XD_LISP_OBJECT, offsetof (range_table_entry, val) },
+  { XD_END }
+};
+
+static const struct struct_description rte_description = {
+  sizeof (range_table_entry),
+  rte_description_1
+};
+
+static const struct lrecord_description rted_description_1[] = {
+  XD_DYNARR_DESC (range_table_entry_dynarr, &rte_description),
+  { XD_END }
+};
+
+static const struct struct_description rted_description = {
+  sizeof (range_table_entry_dynarr),
+  rted_description_1
+};
+
+static const struct lrecord_description range_table_description[] = {
+  { XD_STRUCT_PTR,  offsetof (Lisp_Range_Table, entries),  1, &rted_description },
+  { XD_END }
+};
+
 DEFINE_LRECORD_IMPLEMENTATION ("range-table", range_table,
                                mark_range_table, print_range_table, 0,
 			       range_table_equal, range_table_hash,
-			       struct Lisp_Range_Table);
+			       range_table_description,
+			       Lisp_Range_Table);
 
 /************************************************************************/
 /*                        Range table operations                        */
@@ -144,7 +170,7 @@
 #ifdef ERROR_CHECK_TYPECHECK
 
 static void
-verify_range_table (struct Lisp_Range_Table *rt)
+verify_range_table (Lisp_Range_Table *rt)
 {
   int i;
 
@@ -207,8 +233,8 @@
        ())
 {
   Lisp_Object obj;
-  struct Lisp_Range_Table *rt = alloc_lcrecord_type (struct Lisp_Range_Table,
-						     lrecord_range_table);
+  Lisp_Range_Table *rt = alloc_lcrecord_type (Lisp_Range_Table,
+					      &lrecord_range_table);
   rt->entries = Dynarr_new (range_table_entry);
   XSETRANGE_TABLE (obj, rt);
   return obj;
@@ -220,13 +246,13 @@
 */
        (old_table))
 {
-  struct Lisp_Range_Table *rt, *rtnew;
+  Lisp_Range_Table *rt, *rtnew;
   Lisp_Object obj;
 
   CHECK_RANGE_TABLE (old_table);
   rt = XRANGE_TABLE (old_table);
 
-  rtnew = alloc_lcrecord_type (struct Lisp_Range_Table, lrecord_range_table);
+  rtnew = alloc_lcrecord_type (Lisp_Range_Table, &lrecord_range_table);
   rtnew->entries = Dynarr_new (range_table_entry);
 
   Dynarr_add_many (rtnew->entries, Dynarr_atp (rt->entries, 0),
@@ -241,7 +267,7 @@
 */
        (pos, table, default_))
 {
-  struct Lisp_Range_Table *rt;
+  Lisp_Range_Table *rt;
 
   CHECK_RANGE_TABLE (table);
   rt = XRANGE_TABLE (table);
@@ -258,7 +284,7 @@
 {
   int i;
   int insert_me_here = -1;
-  struct Lisp_Range_Table *rt = XRANGE_TABLE (table);
+  Lisp_Range_Table *rt = XRANGE_TABLE (table);
 
   /* Now insert in the proper place.  This gets tricky because
      we may be overlapping one or more existing ranges and need