(optimize_sub_char_table): Perform more greedy optimization.
This commit is contained in:
parent
a48a6418e0
commit
c3b57f2354
1 changed files with 6 additions and 7 deletions
|
@ -660,28 +660,27 @@ optimize_sub_char_table (table, test)
|
||||||
struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
|
struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
|
||||||
int depth = XINT (tbl->depth);
|
int depth = XINT (tbl->depth);
|
||||||
Lisp_Object elt, this;
|
Lisp_Object elt, this;
|
||||||
int i;
|
int i, optimizable;
|
||||||
|
|
||||||
elt = XSUB_CHAR_TABLE (table)->contents[0];
|
elt = XSUB_CHAR_TABLE (table)->contents[0];
|
||||||
if (SUB_CHAR_TABLE_P (elt))
|
if (SUB_CHAR_TABLE_P (elt))
|
||||||
elt = XSUB_CHAR_TABLE (table)->contents[0]
|
elt = XSUB_CHAR_TABLE (table)->contents[0]
|
||||||
= optimize_sub_char_table (elt, test);
|
= optimize_sub_char_table (elt, test);
|
||||||
if (SUB_CHAR_TABLE_P (elt))
|
optimizable = SUB_CHAR_TABLE_P (elt) ? 0 : 1;
|
||||||
return table;
|
|
||||||
for (i = 1; i < chartab_size[depth]; i++)
|
for (i = 1; i < chartab_size[depth]; i++)
|
||||||
{
|
{
|
||||||
this = XSUB_CHAR_TABLE (table)->contents[i];
|
this = XSUB_CHAR_TABLE (table)->contents[i];
|
||||||
if (SUB_CHAR_TABLE_P (this))
|
if (SUB_CHAR_TABLE_P (this))
|
||||||
this = XSUB_CHAR_TABLE (table)->contents[i]
|
this = XSUB_CHAR_TABLE (table)->contents[i]
|
||||||
= optimize_sub_char_table (this, test);
|
= optimize_sub_char_table (this, test);
|
||||||
if (SUB_CHAR_TABLE_P (this)
|
if (optimizable
|
||||||
|| (NILP (test) ? NILP (Fequal (this, elt)) /* defaults to `equal'. */
|
&& (NILP (test) ? NILP (Fequal (this, elt)) /* defaults to `equal'. */
|
||||||
: EQ (test, Qeq) ? !EQ (this, elt) /* Optimize `eq' case. */
|
: EQ (test, Qeq) ? !EQ (this, elt) /* Optimize `eq' case. */
|
||||||
: NILP (call2 (test, this, elt))))
|
: 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,
|
DEFUN ("optimize-char-table", Foptimize_char_table, Soptimize_char_table,
|
||||||
|
|
Loading…
Add table
Reference in a new issue