]> git.eshelyaron.com Git - emacs.git/commitdiff
(optimize_sub_char_table): Perform more greedy optimization.
authorKenichi Handa <handa@m17n.org>
Fri, 29 Aug 2008 07:53:11 +0000 (07:53 +0000)
committerKenichi Handa <handa@m17n.org>
Fri, 29 Aug 2008 07:53:11 +0000 (07:53 +0000)
src/chartab.c

index 7e43aa4e31593de3e4192b76d20f2971dfad99e2..fdce932993f8809bd344b24cdd493ba5cbf47020 100644 (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,