]> git.eshelyaron.com Git - emacs.git/commitdiff
* cedet/semantic.el (semantic-new-buffer-setup-functions): New
authorChong Yidong <cyd@stupidchicken.com>
Sun, 4 Oct 2009 19:22:09 +0000 (19:22 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Sun, 4 Oct 2009 19:22:09 +0000 (19:22 +0000)
option.
(semantic-new-buffer-fcn): Call parser setup functions here.
(semantic-mode): Don't call parser setup functions here, it's done
in semantic-new-buffer-fcn now.

* cedet/srecode/compile.el (srecode-compile-file): Call
semantic-new-buffer-fcn if the buffer has not been parsed.

lisp/ChangeLog
lisp/cedet/semantic.el
lisp/cedet/srecode/compile.el

index 61bdbf43c2dcb4cd8440c491d8cc9c41c4e388aa..8edd3764c634674266620f0c0c267dd10549160c 100644 (file)
@@ -1,3 +1,14 @@
+2009-10-04  Chong Yidong  <cyd@stupidchicken.com>
+
+       * cedet/semantic.el (semantic-new-buffer-setup-functions): New
+       option.
+       (semantic-new-buffer-fcn): Call parser setup functions here.
+       (semantic-mode): Don't call parser setup functions here, it's done
+       in semantic-new-buffer-fcn now.
+
+       * cedet/srecode/compile.el (srecode-compile-file): Call
+       semantic-new-buffer-fcn if the buffer has not been parsed.
+
 2009-10-04  Chong Yidong  <cyd@stupidchicken.com>
 
        * cedet/ede/pmake.el (ede-pmake-insert-variable-once): Delete.
index e7f333def0901ebd76ed522ad61f456a278e5f3b..da557ecd45339fbb0e46c4e0f13ef9a7ece94742 100644 (file)
@@ -260,6 +260,30 @@ setup to use Semantic."
   :group 'semantic
   :type 'hook)
 
+(defcustom semantic-new-buffer-setup-functions
+  '((js-mode . wisent-javascript-setup-parser)
+    (java-mode . wisent-java-default-setup)
+    (scheme-mode . semantic-default-scheme-setup)
+    (c-mode . semantic-default-c-setup)
+    (c++-mode . semantic-default-c-setup)
+    (html-mode . semantic-default-html-setup)
+    (srecode-template-mode . srecode-template-setup-parser)
+    (makefile-automake-mode . semantic-default-make-setup)
+    (makefile-gmake-mode . semantic-default-make-setup)
+    (makefile-makepp-mode . semantic-default-make-setup)
+    (makefile-bsdmake-mode . semantic-default-make-setup)
+    (makefile-imake-mode . semantic-default-make-setup)
+    (makefile-mode . semantic-default-make-setup))
+  "Alist of functions to call to set up Semantic parsing in the buffer.
+Each element has the form (MODE . FN), where MODE is a value of
+`major-mode' for the buffer and FN is the corresponding function
+to call, with no arguments, to set up the parser.
+
+These functions are called by `semantic-new-buffer-fcn', before
+`semantic-inhibit-functions'."
+  :group 'semantic
+  :type '(alist :key-type symbol :value-type function))
+
 (defvar semantic-init-hook nil
   "Hook run when a buffer is initialized with a parsing table.")
 
@@ -299,6 +323,11 @@ That is if it is dirty or if the current parse tree isn't up to date."
 If the major mode is ready for Semantic, and no
 `semantic-inhibit-functions' disabled it, the current buffer is setup
 to use Semantic, and `semantic-init-hook' is run."
+  ;; In upstream Semantic, the parser setup functions are called from
+  ;; mode hooks.  In the version bundled with Emacs, we do it here.
+  (let ((entry (assq major-mode semantic-new-buffer-setup-functions)))
+    (when entry
+      (funcall (cdr entry))))
   ;; Do stuff if semantic was activated by a mode hook in this buffer,
   ;; and not afterwards disabled.
   (when (and semantic--parse-table
@@ -1046,30 +1075,9 @@ Semantic mode.
                     (file-exists-p semanticdb-default-system-save-directory))
            (require 'semantic/db-ebrowse)
            (semanticdb-load-ebrowse-caches)))
-       (add-hook 'mode-local-init-hook 'semantic-new-buffer-fcn)
-       ;; Add mode-local hooks
-       (add-hook 'js-mode-hook 'wisent-javascript-setup-parser)
-       (add-hook 'ecmascript-mode-hook 'wisent-javascript-setup-parser)
-       (add-hook 'java-mode-hook 'wisent-java-default-setup)
-       (add-hook 'scheme-mode-hook 'semantic-default-scheme-setup)
-       (add-hook 'makefile-mode-hook 'semantic-default-make-setup)
-       (add-hook 'c-mode-hook 'semantic-default-c-setup)
-       (add-hook 'c++-mode-hook 'semantic-default-c-setup)
-       (add-hook 'html-mode-hook 'semantic-default-html-setup)
-       (add-hook 'html-mode-hook 'semantic-default-html-setup)
-       (add-hook 'srecode-template-mode-hook 'srecode-template-setup-parser))
+       (add-hook 'mode-local-init-hook 'semantic-new-buffer-fcn))
     ;; Disable all Semantic features.
     (remove-hook 'mode-local-init-hook 'semantic-new-buffer-fcn)
-    (remove-hook 'js-mode-hook 'wisent-javascript-setup-parser)
-    (remove-hook 'ecmascript-mode-hook 'wisent-javascript-setup-parser)
-    (remove-hook 'java-mode-hook 'wisent-java-default-setup)
-    (remove-hook 'scheme-mode-hook 'semantic-default-scheme-setup)
-    (remove-hook 'makefile-mode-hook 'semantic-default-make-setup)
-    (remove-hook 'c-mode-hook 'semantic-default-c-setup)
-    (remove-hook 'c++-mode-hook 'semantic-default-c-setup)
-    (remove-hook 'html-mode-hook 'semantic-default-html-setup)
-    (remove-hook 'srecode-template-mode-hook 'srecode-template-setup-parser)
-
     ;; FIXME: handle semanticdb-load-ebrowse-caches
     (dolist (mode semantic-submode-list)
       (if (and (boundp mode) (eval mode))
index 51017d0c065c7fd993387581da21be66966d5235..626d8c8d0d05086979fca687d3a45941775a28d0 100644 (file)
@@ -188,6 +188,8 @@ Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use."
          (set-buffer (semantic-find-file-noselect fname))
        (set-buffer peb))
       ;; Do the compile.
+      (unless (semantic-active-p)
+       (semantic-new-buffer-fcn))
       (srecode-compile-templates)
       ;; Trash the buffer if we had to read it in.
       (if (not peb)