diff lisp/derived.el @ 1578:e2ddc2a2b794

[xemacs-hg @ 2003-07-18 07:42:47 by stephent] fix derived-mode-merge-syntax-tables <8765m0jnb1.fsf@tleepslib.sk.tsukuba.ac.jp>
author stephent
date Fri, 18 Jul 2003 07:42:48 +0000
parents 7f5ac0d2a71f
children e6d43c299b9c
line wrap: on
line diff
--- a/lisp/derived.el	Thu Jul 17 21:52:19 2003 +0000
+++ b/lisp/derived.el	Fri Jul 18 07:42:48 2003 +0000
@@ -342,12 +342,20 @@
       ;; check for inheritance.
       (map-char-table
        #'(lambda (key value)
-	   (if (eq ?@ (char-syntax-from-code value))
-	       (map-char-table #'(lambda (key1 value1)
-				   (put-char-table key1 value1 new))
-			       old
-			       key)))
-       new)
+	   (let ((newval (get-range-char-table key new 'multi)))
+	     (cond ((eq newval 'multi)	; OK, dive into the class hierarchy
+		    (map-char-table
+		     #'(lambda (key1 value1)
+			 (when (eq ?@ (char-syntax-from-code
+				       (get-range-char-table key new ?@)))
+			   (put-char-table key1 value new))
+			 nil)
+		     new
+		     key))
+		   ((eq ?@ (char-syntax-from-code newval)) ;; class at once
+		    (put-char-table key value new))))
+	   nil)
+       old)
     ;; pre-20.0
     (let ((idx 0)
 	  (end (min (length new) (length old))))