Fix copy-char-table on syntax tables

Olivier Galibert galibert at pobox.com
Sat Mar 24 18:10:53 EDT 2007


Somebody please commit it, I changed ssh key recently (to go from ssh1
to ssh2) and haven't bothered Stephen with it yet.

  OG.

2007-03-24   Olivier Galibert <galibert at pobox.com>

	* chartab.c (Fcopy_char_table): Simplify the mirror table
	handling: never copy a mirror table, just make a new one and mark
	it dirty.  Fixes http://article.gmane.org/gmane.emacs.xemacs.beta/17353
-------------- next part --------------
Index: src/chartab.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/chartab.c,v
retrieving revision 1.39
diff -u -r1.39 chartab.c
--- src/chartab.c	2005/12/18 10:59:14	1.39
+++ src/chartab.c	2007/03/24 22:08:55
@@ -668,11 +668,12 @@
 
   CHECK_CHAR_TABLE (char_table);
   ct = XCHAR_TABLE (char_table);
+  assert(!ct->mirror_table_p);
   ctnew = ALLOC_LCRECORD_TYPE (Lisp_Char_Table, &lrecord_char_table);
   ctnew->type = ct->type;
   ctnew->parent = ct->parent;
   ctnew->default_ = ct->default_;
-  ctnew->mirror_table_p = ct->mirror_table_p;
+  ctnew->mirror_table_p = 0;
   obj = wrap_char_table (ctnew);
 
   for (i = 0; i < NUM_ASCII_CHARS; i++)
@@ -697,13 +698,17 @@
 
 #endif /* MULE */
 
-  if (!ct->mirror_table_p && CHAR_TABLEP (ct->mirror_table))
+  if (ct->mirror_table != Qnil)
     {
-      ctnew->mirror_table = Fcopy_char_table (ct->mirror_table);
+      ctnew->mirror_table = Fmake_char_table (Qgeneric);
+      set_char_table_default (ctnew->mirror_table, make_int (Sword));
       XCHAR_TABLE (ctnew->mirror_table)->mirror_table = obj;
+      XCHAR_TABLE (ctnew->mirror_table)->mirror_table_p = 1;
+      XCHAR_TABLE (ctnew->mirror_table)->dirty = 1;
     }
   else
-    ctnew->mirror_table = ct->mirror_table;
+    ctnew->mirror_table = Qnil;
+
   ctnew->next_table = Qnil;
   if (ctnew->type == CHAR_TABLE_TYPE_SYNTAX)
     {


More information about the XEmacs-Patches mailing list