diff options
Diffstat (limited to 'src/chartab.c')
| -rw-r--r-- | src/chartab.c | 15 |
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 | } |