Mercurial > emacs
changeset 99975:dddfb4772d33
(hash_get_category_set): New function.
(Fmodify_category_entry): Adjusted for the change of
char_table_ref_and_range. Call hash_get_category_set to get a
category set to store in the table.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 27 Nov 2008 07:59:21 +0000 |
parents | dd35b16ab453 |
children | 33f97c9e6889 |
files | src/category.c |
diffstat | 1 files changed, 29 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/category.c Thu Nov 27 07:59:11 2008 +0000 +++ b/src/category.c Thu Nov 27 07:59:21 2008 +0000 @@ -58,6 +58,32 @@ /* Category set staff. */ +static Lisp_Object hash_get_category_set P_ ((Lisp_Object, Lisp_Object)); + +static Lisp_Object +hash_get_category_set (table, category_set) + Lisp_Object table, category_set; +{ + Lisp_Object val; + struct Lisp_Hash_Table *h; + int i; + unsigned hash; + + if (NILP (XCHAR_TABLE (table)->extras[1])) + XCHAR_TABLE (table)->extras[1] + = make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE), + make_float (DEFAULT_REHASH_SIZE), + make_float (DEFAULT_REHASH_THRESHOLD), + Qnil, Qnil, Qnil); + h = XHASH_TABLE (XCHAR_TABLE (table)->extras[1]); + i = hash_lookup (h, category_set, &hash); + if (i >= 0) + return HASH_KEY (h, i); + hash_put (h, category_set, Qnil, hash); + return category_set; +} + + DEFUN ("make-category-set", Fmake_category_set, Smake_category_set, 1, 1, 0, doc: /* Return a newly created category-set which contains CATEGORIES. CATEGORIES is a string of category mnemonics. @@ -370,15 +396,14 @@ while (start <= end) { + from = start, to = end; category_set = char_table_ref_and_range (table, start, &from, &to); if (CATEGORY_MEMBER (XFASTINT (category), category_set) != NILP (reset)) { category_set = Fcopy_sequence (category_set); SET_CATEGORY_SET (category_set, category, set_value); - if (to > end) - char_table_set_range (table, start, end, category_set); - else - char_table_set_range (table, start, to, category_set); + category_set = hash_get_category_set (table, category_set); + char_table_set_range (table, start, to, category_set); } start = to + 1; }