aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2011-04-09 15:21:42 -0700
committerPaul Eggert2011-04-09 15:21:42 -0700
commit9248994de4e597941230d9cb07a50df994c7825b (patch)
tree1ac11e5bf7778a1b82b9d39771df00d74a4bdfc9 /src
parent3befa583862681a0df1f75274287d1d32f95f7e4 (diff)
downloademacs-9248994de4e597941230d9cb07a50df994c7825b.tar.gz
emacs-9248994de4e597941230d9cb07a50df994c7825b.zip
* chartab.c (sub_char_table_set_range, char_table_set_range): Likewise.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog1
-rw-r--r--src/chartab.c16
2 files changed, 10 insertions, 7 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 1e2d4fd00af..9029fff9820 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,6 +1,7 @@
12011-04-09 Paul Eggert <eggert@cs.ucla.edu> 12011-04-09 Paul Eggert <eggert@cs.ucla.edu>
2 2
3 * charset.c (load_charset_map): <, not <=, for optimization. 3 * charset.c (load_charset_map): <, not <=, for optimization.
4 * chartab.c (sub_char_table_set_range, char_table_set_range): Likewise.
4 5
5 * xmenu.c (set_frame_menubar): Allocate smaller local vectors. 6 * xmenu.c (set_frame_menubar): Allocate smaller local vectors.
6 This also lets GCC 4.6.0 generate slightly better loop code. 7 This also lets GCC 4.6.0 generate slightly better loop code.
diff --git a/src/chartab.c b/src/chartab.c
index 9ad182131e9..450948a9b37 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))
@@ -403,8 +404,9 @@ sub_char_table_set_range (Lisp_Object *table, int depth, int min_char, int from,
403 to = max_char; 404 to = max_char;
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);
407 j++;
406 min_char += chartab_chars[depth] * i; 408 min_char += chartab_chars[depth] * i;
407 for (; i <= j; i++, min_char += chartab_chars[depth]) 409 for (; i < j; i++, min_char += chartab_chars[depth])
408 sub_char_table_set_range (XSUB_CHAR_TABLE (*table)->contents + i, 410 sub_char_table_set_range (XSUB_CHAR_TABLE (*table)->contents + i,
409 depth, min_char, from, to, val); 411 depth, min_char, from, to, val);
410 } 412 }
@@ -416,16 +418,16 @@ char_table_set_range (Lisp_Object table, int from, int to, Lisp_Object val)
416{ 418{
417 struct Lisp_Char_Table *tbl = XCHAR_TABLE (table); 419 struct Lisp_Char_Table *tbl = XCHAR_TABLE (table);
418 Lisp_Object *contents = tbl->contents; 420 Lisp_Object *contents = tbl->contents;
419 int i, min_char; 421 int i;
420 422
421 if (from == to) 423 if (from == to)
422 char_table_set (table, from, val); 424 char_table_set (table, from, val);
423 else 425 else
424 { 426 {
425 for (i = CHARTAB_IDX (from, 0, 0), min_char = i * chartab_chars[0]; 427 unsigned lim = to / chartab_chars[0] + 1;
426 min_char <= to; 428 for (i = CHARTAB_IDX (from, 0, 0); i < lim; i++)
427 i++, min_char += chartab_chars[0]) 429 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); 430 from, to, val);
429 if (ASCII_CHAR_P (from)) 431 if (ASCII_CHAR_P (from))
430 tbl->ascii = char_table_ascii (table); 432 tbl->ascii = char_table_ascii (table);
431 } 433 }