Mercurial > emacs
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; }