changeset 105441:457c7a0ec078

* 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.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 04 Oct 2009 19:22:09 +0000
parents bec7f10791da
children 96247a7ec10d
files lisp/ChangeLog lisp/cedet/semantic.el lisp/cedet/srecode/compile.el
diffstat 3 files changed, 43 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Oct 04 19:00:54 2009 +0000
+++ b/lisp/ChangeLog	Sun Oct 04 19:22:09 2009 +0000
@@ -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.
--- a/lisp/cedet/semantic.el	Sun Oct 04 19:00:54 2009 +0000
+++ b/lisp/cedet/semantic.el	Sun Oct 04 19:22:09 2009 +0000
@@ -260,6 +260,30 @@
   :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 @@
 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 @@
 		     (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))
--- a/lisp/cedet/srecode/compile.el	Sun Oct 04 19:00:54 2009 +0000
+++ b/lisp/cedet/srecode/compile.el	Sun Oct 04 19:22:09 2009 +0000
@@ -188,6 +188,8 @@
 	  (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)