(optimize_sub_char_table): Perform more greedy optimization.

This commit is contained in:
Kenichi Handa 2008-08-29 07:53:11 +00:00
parent a48a6418e0
commit c3b57f2354

View file

@ -660,28 +660,27 @@ optimize_sub_char_table (table, test)
struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
int depth = XINT (tbl->depth);
Lisp_Object elt, this;
int i;
int i, optimizable;
elt = XSUB_CHAR_TABLE (table)->contents[0];
if (SUB_CHAR_TABLE_P (elt))
elt = XSUB_CHAR_TABLE (table)->contents[0]
= optimize_sub_char_table (elt, test);
if (SUB_CHAR_TABLE_P (elt))
return table;
optimizable = SUB_CHAR_TABLE_P (elt) ? 0 : 1;
for (i = 1; i < chartab_size[depth]; i++)
{
this = XSUB_CHAR_TABLE (table)->contents[i];
if (SUB_CHAR_TABLE_P (this))
this = XSUB_CHAR_TABLE (table)->contents[i]
= optimize_sub_char_table (this, test);
if (SUB_CHAR_TABLE_P (this)
|| (NILP (test) ? NILP (Fequal (this, elt)) /* defaults to `equal'. */
if (optimizable
&& (NILP (test) ? NILP (Fequal (this, elt)) /* defaults to `equal'. */
: EQ (test, Qeq) ? !EQ (this, elt) /* Optimize `eq' case. */
: NILP (call2 (test, this, elt))))
break;
optimizable = 0;
}
return (i < chartab_size[depth] ? table : elt);
return (optimizable ? elt : table);
}
DEFUN ("optimize-char-table", Foptimize_char_table, Soptimize_char_table,