aboutsummaryrefslogtreecommitdiffstats
path: root/src/chartab.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/chartab.c')
-rw-r--r--src/chartab.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/chartab.c b/src/chartab.c
index 9ad182131e9..7a0a3aabbb6 100644
--- a/src/chartab.c
+++ b/src/chartab.c
@@ -392,7 +392,8 @@ sub_char_table_set_range (Lisp_Object *table, int depth, int min_char, int from,
392 *table = val; 392 *table = val;
393 else 393 else
394 { 394 {
395 int i, j; 395 int i;
396 unsigned j;
396 397
397 depth++; 398 depth++;
398 if (! SUB_CHAR_TABLE_P (*table)) 399 if (! SUB_CHAR_TABLE_P (*table))
@@ -404,7 +405,7 @@ sub_char_table_set_range (Lisp_Object *table, int depth, int min_char, int from,
404 i = CHARTAB_IDX (from, depth, min_char); 405 i = CHARTAB_IDX (from, depth, min_char);
405 j = CHARTAB_IDX (to, depth, min_char); 406 j = CHARTAB_IDX (to, depth, min_char);
406 min_char += chartab_chars[depth] * i; 407 min_char += chartab_chars[depth] * i;
407 for (; i <= j; i++, min_char += chartab_chars[depth]) 408 for (j++; i < j; i++, min_char += chartab_chars[depth])
408 sub_char_table_set_range (XSUB_CHAR_TABLE (*table)->contents + i, 409 sub_char_table_set_range (XSUB_CHAR_TABLE (*table)->contents + i,
409 depth, min_char, from, to, val); 410 depth, min_char, from, to, val);
410 } 411 }
@@ -416,16 +417,16 @@ char_table_set_range (Lisp_Object table, int from, int to, Lisp_Object val)
416{ 417{
417 struct Lisp_Char_Table *tbl = XCHAR_TABLE (table); 418 struct Lisp_Char_Table *tbl = XCHAR_TABLE (table);
418 Lisp_Object *contents = tbl->contents; 419 Lisp_Object *contents = tbl->contents;
419 int i, min_char; 420 int i;
420 421
421 if (from == to) 422 if (from == to)
422 char_table_set (table, from, val); 423 char_table_set (table, from, val);
423 else 424 else
424 { 425 {
425 for (i = CHARTAB_IDX (from, 0, 0), min_char = i * chartab_chars[0]; 426 unsigned lim = to / chartab_chars[0] + 1;
426 min_char <= to; 427 for (i = CHARTAB_IDX (from, 0, 0); i < lim; i++)
427 i++, min_char += chartab_chars[0]) 428 sub_char_table_set_range (contents + i, 0, i * chartab_chars[0],
428 sub_char_table_set_range (contents + i, 0, min_char, from, to, val); 429 from, to, val);
429 if (ASCII_CHAR_P (from)) 430 if (ASCII_CHAR_P (from))
430 tbl->ascii = char_table_ascii (table); 431 tbl->ascii = char_table_ascii (table);
431 } 432 }