changeset 17807:8a8e26aa76ed

(compute_trt_identity): Use make_sub_char_table. (compute_trt_identity, compute_trt_shuffle): Set up bytes[0] with the charset code. Check for a sub-char-table when deciding to recurse. Terminate the loop properly for a sub-char-table.
author Richard M. Stallman <rms@gnu.org>
date Thu, 15 May 1997 03:22:38 +0000
parents 96eb40f791e4
children 7a8eda2e280a
files src/casetab.c
diffstat 1 files changed, 11 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/casetab.c	Thu May 15 02:28:34 1997 +0000
+++ b/src/casetab.c	Thu May 15 03:22:38 1997 +0000
@@ -177,21 +177,21 @@
      struct Lisp_Char_Table *trt, *inverse;
 {
   register int i;
+  int lim = (depth == 0 ? CHAR_TABLE_ORDINARY_SLOTS : SUB_CHAR_TABLE_ORDINARY_SLOTS);
 
-  for (i = 0; i < CHAR_TABLE_ORDINARY_SLOTS; i++)
+  for (i = 0; i < lim; i++)
     {
       if (NATNUMP (trt->contents[i]))
 	{
 	  bytes[depth] = i;
 	  XSETFASTINT (inverse->contents[i],
 		       (depth == 0 && i < CHAR_TABLE_SINGLE_BYTE_SLOTS ? i
-			: MAKE_NON_ASCII_CHAR (bytes[0]-128,
-					       bytes[1], bytes[2])));
+			: MAKE_NON_ASCII_CHAR (bytes[0], bytes[1], bytes[2])));
 	}
-      else if (CHAR_TABLE_P (trt->contents[i]))
+      else if (SUB_CHAR_TABLE_P (trt->contents[i]))
 	{
-	  bytes[depth] = i;
-	  inverse->contents[i] = Fmake_char_table (Qnil, Qnil);
+	  bytes[depth] = i - 128;
+	  inverse->contents[i] = make_sub_char_table (Qnil);
 	  compute_trt_identity (bytes, depth + 1,
 				XCHAR_TABLE (trt->contents[i]),
 				XCHAR_TABLE (inverse->contents[i]));
@@ -210,14 +210,14 @@
 {
   register int i;
   Lisp_Object j, tem, q;
+  int lim = (depth == 0 ? CHAR_TABLE_ORDINARY_SLOTS : SUB_CHAR_TABLE_ORDINARY_SLOTS);
 
-  for (i = 0; i < CHAR_TABLE_SINGLE_BYTE_SLOTS; i++)
+  for (i = 0; i < lim; i++)
     {
       bytes[depth] = i;
       XSETFASTINT (j,
 		   (depth == 0 && i < CHAR_TABLE_SINGLE_BYTE_SLOTS ? i
-		    : MAKE_NON_ASCII_CHAR (bytes[0]-128,
-					   bytes[1], bytes[2])));
+		    : MAKE_NON_ASCII_CHAR (bytes[0], bytes[1], bytes[2])));
       q = trt->contents[i];
       if (NATNUMP (q) && XFASTINT (q) != XFASTINT (j))
 	{
@@ -225,9 +225,9 @@
 	  Faset (ibase, q, j);
 	  Faset (ibase, j, tem);
 	}
-      else if (CHAR_TABLE_P (q))
+      else if (SUB_CHAR_TABLE_P (q))
 	{
-	  bytes[depth] = i;
+	  bytes[depth] = i - 128;
 	  compute_trt_shuffle (bytes, depth + 1, ibase,
 			       XCHAR_TABLE (trt->contents[i]),
 			       XCHAR_TABLE (inverse->contents[i]));