changeset 51032:663da44e6176

(map_char_table): New arg TABLE gets the master table. All calls changed. Process default and inheritance, resorting to Faref if necessary.
author Richard M. Stallman <rms@gnu.org>
date Sat, 17 May 2003 12:45:52 +0000
parents 0c0b80172350
children 8fe4bdd97052
files src/fns.c
diffstat 1 files changed, 11 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/fns.c	Sat May 17 12:44:28 2003 +0000
+++ b/src/fns.c	Sat May 17 12:45:52 2003 +0000
@@ -2634,9 +2634,9 @@
    ARG is passed to C_FUNCTION when that is called.  */
 
 void
-map_char_table (c_function, function, subtable, arg, depth, indices)
+map_char_table (c_function, function, table, subtable, arg, depth, indices)
      void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
-     Lisp_Object function, subtable, arg, *indices;
+     Lisp_Object function, table, subtable, arg, *indices;
      int depth;
 {
   int i, to;
@@ -2646,7 +2646,11 @@
       /* At first, handle ASCII and 8-bit European characters.  */
       for (i = 0; i < CHAR_TABLE_SINGLE_BYTE_SLOTS; i++)
 	{
-	  Lisp_Object elt = XCHAR_TABLE (subtable)->contents[i];
+	  Lisp_Object elt= XCHAR_TABLE (subtable)->contents[i];
+	  if (NILP (elt))
+	    elt = XCHAR_TABLE (subtable)->defalt;
+	  if (NILP (elt))
+	    elt = Faref (subtable, make_number (i));
 	  if (c_function)
 	    (*c_function) (arg, make_number (i), elt);
 	  else
@@ -2687,7 +2691,7 @@
 	{
 	  if (depth >= 3)
 	    error ("Too deep char table");
-	  map_char_table (c_function, function, elt, arg, depth + 1, indices);
+	  map_char_table (c_function, function, table, elt, arg, depth + 1, indices);
 	}
       else
 	{
@@ -2695,6 +2699,8 @@
 
 	  if (NILP (elt))
 	    elt = XCHAR_TABLE (subtable)->defalt;
+	  if (NILP  (elt))
+	    elt = Faref (table, make_number (i));
 	  c1 = depth >= 1 ? XFASTINT (indices[1]) : 0;
 	  c2 = depth >= 2 ? XFASTINT (indices[2]) : 0;
 	  c = MAKE_CHAR (charset, c1, c2);
@@ -2731,7 +2737,7 @@
      be passed to map_char_table because it returns a Lisp_Object rather
      than returning nothing.
      Casting leads to crashes on some architectures.  -stef  */
-  map_char_table (void_call2, Qnil, char_table, function, 0, indices);
+  map_char_table (void_call2, Qnil, char_table, char_table, function, 0, indices);
   return Qnil;
 }