changeset 82189:5b68c6fcbb95

Fix problem with modes derived from CC Mode: Move macro `c-make-emacs-variables-local' from cc-mode.el to cc-langs.el. Call it from c-make-init-lang-vars-fun (cc-langs.el) instead of c-init-language-vars-for (cc-mode.el).
author Alan Mackenzie <acm@muc.de>
date Sat, 28 Jul 2007 11:51:38 +0000
parents 399658799dc5
children 3b2cbc59143e
files lisp/progmodes/cc-langs.el lisp/progmodes/cc-mode.el
diffstat 2 files changed, 10 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/cc-langs.el	Sat Jul 28 11:50:44 2007 +0000
+++ b/lisp/progmodes/cc-langs.el	Sat Jul 28 11:51:38 2007 +0000
@@ -2875,6 +2875,14 @@
 (defconst c-lang-variable-inits (cc-eval-when-compile c-lang-variable-inits))
 (defconst c-emacs-variable-inits (cc-eval-when-compile c-emacs-variable-inits))
 
+;; Make the `c-lang-setvar' variables buffer local in the current buffer.
+;; These are typically standard emacs variables such as `comment-start'.
+(defmacro c-make-emacs-variables-local ()
+  `(progn
+     ,@(mapcar (lambda (init)
+		 `(make-local-variable ',(car init)))
+	       (cdr c-emacs-variable-inits))))
+
 (defun c-make-init-lang-vars-fun (mode)
   "Create a function that initializes all the language dependent variables
 for the given mode.
@@ -2898,6 +2906,7 @@
 	 ;; that could be in the result from `cl-macroexpand-all'.
 	 (let ((c-buffer-is-cc-mode ',mode)
 	       current-var source-eval)
+	   (c-make-emacs-variables-local)
 	   (condition-case err
 
 	       (if (eq c-version-sym ',c-version-sym)
@@ -2956,6 +2965,7 @@
 	     (init (append (cdr c-emacs-variable-inits)
 			   (cdr c-lang-variable-inits)))
 	     current-var)
+	 (c-make-emacs-variables-local)
 	 (condition-case err
 
 	     (while init
--- a/lisp/progmodes/cc-mode.el	Sat Jul 28 11:50:44 2007 +0000
+++ b/lisp/progmodes/cc-mode.el	Sat Jul 28 11:51:38 2007 +0000
@@ -154,21 +154,12 @@
 (defun c-leave-cc-mode-mode ()
   (setq c-buffer-is-cc-mode nil))
 
-;; Make the `c-lang-setvar' variables buffer local in the current buffer.
-;; These are typically standard emacs variables such as `comment-start'.
-(defmacro c-make-emacs-variables-local ()
-  `(progn
-     ,@(mapcar (lambda (init)
-		 `(make-local-variable ',(car init)))
-	       (cdr c-emacs-variable-inits))))
-
 (defun c-init-language-vars-for (mode)
   "Initialize the language variables for one of the language modes
 directly supported by CC Mode.  This can be used instead of the
 `c-init-language-vars' macro if the language you want to use is one of
 those, rather than a derived language defined through the language
 variable system (see \"cc-langs.el\")."
-  (c-make-emacs-variables-local)
   (cond ((eq mode 'c-mode)    (c-init-language-vars c-mode))
 	((eq mode 'c++-mode)  (c-init-language-vars c++-mode))
 	((eq mode 'objc-mode) (c-init-language-vars objc-mode))