comparison src/chartab.c @ 97818:a4677d55715f

(optimize_sub_char_table): Perform more greedy optimization.
author Kenichi Handa <handa@m17n.org>
date Fri, 29 Aug 2008 07:53:11 +0000
parents 04a952ac356f
children f0ad9e3cb1a4
comparison
equal deleted inserted replaced
97817:f15876e66681 97818:a4677d55715f
658 Lisp_Object table, test; 658 Lisp_Object table, test;
659 { 659 {
660 struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table); 660 struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
661 int depth = XINT (tbl->depth); 661 int depth = XINT (tbl->depth);
662 Lisp_Object elt, this; 662 Lisp_Object elt, this;
663 int i; 663 int i, optimizable;
664 664
665 elt = XSUB_CHAR_TABLE (table)->contents[0]; 665 elt = XSUB_CHAR_TABLE (table)->contents[0];
666 if (SUB_CHAR_TABLE_P (elt)) 666 if (SUB_CHAR_TABLE_P (elt))
667 elt = XSUB_CHAR_TABLE (table)->contents[0] 667 elt = XSUB_CHAR_TABLE (table)->contents[0]
668 = optimize_sub_char_table (elt, test); 668 = optimize_sub_char_table (elt, test);
669 if (SUB_CHAR_TABLE_P (elt)) 669 optimizable = SUB_CHAR_TABLE_P (elt) ? 0 : 1;
670 return table;
671 for (i = 1; i < chartab_size[depth]; i++) 670 for (i = 1; i < chartab_size[depth]; i++)
672 { 671 {
673 this = XSUB_CHAR_TABLE (table)->contents[i]; 672 this = XSUB_CHAR_TABLE (table)->contents[i];
674 if (SUB_CHAR_TABLE_P (this)) 673 if (SUB_CHAR_TABLE_P (this))
675 this = XSUB_CHAR_TABLE (table)->contents[i] 674 this = XSUB_CHAR_TABLE (table)->contents[i]
676 = optimize_sub_char_table (this, test); 675 = optimize_sub_char_table (this, test);
677 if (SUB_CHAR_TABLE_P (this) 676 if (optimizable
678 || (NILP (test) ? NILP (Fequal (this, elt)) /* defaults to `equal'. */ 677 && (NILP (test) ? NILP (Fequal (this, elt)) /* defaults to `equal'. */
679 : EQ (test, Qeq) ? !EQ (this, elt) /* Optimize `eq' case. */ 678 : EQ (test, Qeq) ? !EQ (this, elt) /* Optimize `eq' case. */
680 : NILP (call2 (test, this, elt)))) 679 : NILP (call2 (test, this, elt))))
681 break; 680 optimizable = 0;
682 } 681 }
683 682
684 return (i < chartab_size[depth] ? table : elt); 683 return (optimizable ? elt : table);
685 } 684 }
686 685
687 DEFUN ("optimize-char-table", Foptimize_char_table, Soptimize_char_table, 686 DEFUN ("optimize-char-table", Foptimize_char_table, Soptimize_char_table,
688 1, 2, 0, 687 1, 2, 0,
689 doc: /* Optimize CHAR-TABLE. 688 doc: /* Optimize CHAR-TABLE.