Show
Ignore:
Timestamp:
07/29/06 07:48:34 (2 years ago)
Author:
miyoshi
Message:

Sync up with Emacs CVS HEAD.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lisp/progmodes/cc-langs.el

    r4111 r4131  
    135135(eval-and-compile 
    136136  ;; These are used to collect the init forms from the subsequent 
    137   ;; `c-lang-defvar'.  They are used to build the lambda in 
    138   ;; `c-make-init-lang-vars-fun' below. 
     137  ;; `c-lang-defvar' and `c-lang-setvar'.  They are used to build the 
     138  ;;  lambda in `c-make-init-lang-vars-fun' below, and to build `defvar's 
     139  ;;  and `make-variable-buffer-local's in cc-engine and 
     140  ;;  `make-local-variable's in `c-init-language-vars-for'. 
    139141  (defvar c-lang-variable-inits nil) 
    140142  (defvar c-lang-variable-inits-tail nil) 
    141143  (setq c-lang-variable-inits (list nil) 
    142         c-lang-variable-inits-tail c-lang-variable-inits)) 
     144        c-lang-variable-inits-tail c-lang-variable-inits) 
     145  (defvar c-emacs-variable-inits nil) 
     146  (defvar c-emacs-variable-inits-tail nil) 
     147  (setq c-emacs-variable-inits (list nil) 
     148        c-emacs-variable-inits-tail c-emacs-variable-inits)) 
    143149 
    144150(defmacro c-lang-defvar (var val &optional doc) 
     
    169175      (setcdr c-lang-variable-inits-tail (list (list var val doc))) 
    170176      (setq c-lang-variable-inits-tail (cdr c-lang-variable-inits-tail)))) 
     177 
     178  ;; Return the symbol, like the other def* forms. 
     179  `',var) 
     180 
     181(defmacro c-lang-setvar (var val) 
     182  "Causes the variable VAR to be made buffer local and to get set to the 
     183value VAL.  VAL is evaluated and assigned at mode initialization.  More 
     184precisely, VAL is evaluated and bound to VAR when the result from the 
     185macro `c-init-language-vars' is evaluated.  VAR is typically a standard 
     186Emacs variable like `comment-start'. 
     187 
     188`c-lang-const' is typically used in VAL to get the right value for the 
     189language being initialized, and such calls will be macro expanded to 
     190the evaluated constant value at compile time." 
     191  (let ((elem (assq var (cdr c-emacs-variable-inits)))) 
     192    (if elem 
     193        (setcdr elem (list val)) ; Maybe remove "list", sometime. 2006-07-19 
     194      (setcdr c-emacs-variable-inits-tail (list (list var val))) 
     195      (setq c-emacs-variable-inits-tail (cdr c-emacs-variable-inits-tail)))) 
    171196 
    172197  ;; Return the symbol, like the other def* forms. 
     
    11041129  ;; comments aren't entirely portable. 
    11051130  c "/* ") 
    1106 (c-lang-defvar comment-start (c-lang-const comment-start) 
    1107   'dont-doc) 
     1131(c-lang-setvar comment-start (c-lang-const comment-start)) 
    11081132 
    11091133(c-lang-defconst comment-end 
     
    11181142        (concat " " (c-lang-const c-block-comment-ender)) 
    11191143      "")) 
    1120 (c-lang-defvar comment-end (c-lang-const comment-end) 
    1121   'dont-doc) 
     1144(c-lang-setvar comment-end (c-lang-const comment-end)) 
    11221145 
    11231146(c-lang-defconst comment-start-skip 
     
    11351158             "\\|") 
    11361159            "\\)\\s *")) 
    1137 (c-lang-defvar comment-start-skip (c-lang-const comment-start-skip) 
    1138   'dont-doc) 
     1160(c-lang-setvar comment-start-skip (c-lang-const comment-start-skip)) 
    11391161 
    11401162(c-lang-defconst c-syntactic-ws-start 
     
    28072829 
    28082830;; Compile in the list of language variables that has been collected 
    2809 ;; with the `c-lang-defvar' macro.  Note that the first element is 
    2810 ;; nil. 
     2831;; with the `c-lang-defvar' and `c-lang-setvar' macros.  Note that the 
     2832;; first element of each is nil. 
    28112833(defconst c-lang-variable-inits (cc-eval-when-compile c-lang-variable-inits)) 
     2834(defconst c-emacs-variable-inits (cc-eval-when-compile c-emacs-variable-inits)) 
    28122835 
    28132836(defun c-make-init-lang-vars-fun (mode) 
     
    28422865                             ;; constant immediately in `cl-macroexpand-all' 
    28432866                             ;; below. 
    2844                              (mapcan 
    2845                               (lambda (init) 
    2846                                 `(current-var ',(car init) 
    2847                                   ,(car init) ,(cl-macroexpand-all 
    2848                                                 (elt init 1)))) 
    2849                               (cdr c-lang-variable-inits)))) 
     2867                              (mapcan 
     2868                               (lambda (init) 
     2869                                 `(current-var ',(car init) 
     2870                                   ,(car init) ,(cl-macroexpand-all 
     2871                                                 (elt init 1)))) 
     2872                               ;; Note: The following `append' copies the 
     2873                               ;; first argument.  That list is small, so 
     2874                               ;; this doesn't matter too much. 
     2875                              (append (cdr c-emacs-variable-inits) 
     2876                                      (cdr c-lang-variable-inits))))) 
    28502877 
    28512878                 ;; This diagnostic message isn't useful for end 
     
    28602887                 (require 'cc-langs) 
    28612888                 (setq source-eval t) 
    2862                  (let ((init (cdr c-lang-variable-inits))) 
     2889                 (let ((init (append (cdr c-emacs-variable-inits) 
     2890                                     (cdr c-lang-variable-inits)))) 
    28632891                   (while init 
    28642892                     (setq current-var (caar init)) 
     
    28682896             (error 
    28692897              (if current-var 
    2870                   (message "Eval error in the `c-lang-defvar' for `%s'%s: %S" 
     2898                  (message "Eval error in the `c-lang-defvar' or `c-lang-setvar' for `%s'%s: %S" 
    28712899                           current-var 
    28722900                           (if source-eval 
     
    28842912       (require 'cc-langs) 
    28852913       (let ((c-buffer-is-cc-mode ',mode) 
    2886              (init (cdr c-lang-variable-inits)) 
     2914             (init (append (cdr c-emacs-variable-inits) 
     2915                           (cdr c-lang-variable-inits))) 
    28872916             current-var) 
    28882917         (condition-case err 
     
    28962925            (if current-var 
    28972926                (message 
    2898                  "Eval error in the `c-lang-defvar' for `%s' (source eval): %S" 
     2927                 "Eval error in the `c-lang-defvar' or `c-lang-setver' for `%s' (source eval): %S" 
    28992928                 current-var err) 
    29002929              (signal (car err) (cdr err)))))))