From 3f2a848dbeb297cdadfc9dd3cff71bab24679b92 Mon Sep 17 00:00:00 2001 From: David Engster Date: Thu, 25 Oct 2012 22:13:16 +0200 Subject: [PATCH] Merge CEDET upstream. * emacs-lisp/eieio.el (eieio-update-lisp-imenu-expression): Removed. This feature is already integrated in imenu. * emacs-lisp/eieio-opt.el: Remove require for `button' since it is always loaded. Require `speedbar' unconditionally. * semantic/analyze.el (semantic-analyze-dereference-alias): New function to dereference aliases. (semantic-analyze-current-context-default): Use it. * semantic/grammar.el (semantic-grammar-create-package): * srecode/compile.el (srecode-compile-templates): Throw a proper error if semantic-mode is not enabled (bug#9968). Compiler warning fixes: * semantic.el (semantic-elapsed-time): Make it a defsubst. * srecode/dictionary.el (srecode-adebug-dictionary): Remove require for `semantic'. * srecode/map.el: * srecode/insert.el: Declare functions from `data-debug'. * semantic/grammar.el: Require `help-fns'. Declare functions from `eldoc', which is required in function body. * srecode/java.el: * semantic/texi.el: * semantic/grammar-wy.el: * semantic/db-file.el: * semantic/db-el.el: * semantic/chart.el: Fix requires. * ede/locate.el: Remove useless requires. Declare functions instead and require in functions when needed. --- lisp/ChangeLog | 8 ++++++++ lisp/cedet/ChangeLog | 33 ++++++++++++++++++++++++++++++ lisp/cedet/ede/locate.el | 30 ++++++++++++++++++++------- lisp/cedet/semantic.el | 2 +- lisp/cedet/semantic/analyze.el | 34 ++++++++++++++++++++++++++----- lisp/cedet/semantic/chart.el | 5 +---- lisp/cedet/semantic/db-el.el | 7 +------ lisp/cedet/semantic/db-file.el | 5 +---- lisp/cedet/semantic/grammar-wy.el | 5 ++--- lisp/cedet/semantic/grammar.el | 12 +++++++++++ lisp/cedet/semantic/texi.el | 10 ++------- lisp/cedet/srecode/compile.el | 2 ++ lisp/cedet/srecode/dictionary.el | 1 - lisp/cedet/srecode/insert.el | 4 ++++ lisp/cedet/srecode/java.el | 5 +---- lisp/cedet/srecode/map.el | 3 ++- lisp/emacs-lisp/eieio-opt.el | 8 ++------ lisp/emacs-lisp/eieio.el | 23 --------------------- 18 files changed, 124 insertions(+), 73 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ea75d3774a1..188cd9ce941 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-10-25 David Engster + + * emacs-lisp/eieio.el (eieio-update-lisp-imenu-expression): + Removed. This feature is already integrated in imenu. + + * emacs-lisp/eieio-opt.el: Remove require for `button' since it is + always loaded. Require `speedbar' unconditionally. + 2012-10-25 Stefan Monnier * dired.el (dired-get-marked-files): Allow ! on . and .. (bug#12725). diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 7656248cac5..6f2669e9fee 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,36 @@ +2012-10-25 David Engster + + * semantic/analyze.el (semantic-analyze-dereference-alias): New + function to dereference aliases. + (semantic-analyze-current-context-default): Use it. + + * semantic/grammar.el (semantic-grammar-create-package): + * srecode/compile.el (srecode-compile-templates): Throw a proper + error if semantic-mode is not enabled (bug#9968). + + Compiler warning fixes: + + * semantic.el (semantic-elapsed-time): Make it a defsubst. + + * srecode/dictionary.el (srecode-adebug-dictionary): Remove + require for `semantic'. + + * srecode/map.el: + * srecode/insert.el: Declare functions from `data-debug'. + + * semantic/grammar.el: Require `help-fns'. Declare functions from + `eldoc', which is required in function body. + + * srecode/java.el: + * semantic/texi.el: + * semantic/grammar-wy.el: + * semantic/db-file.el: + * semantic/db-el.el: + * semantic/chart.el: Fix requires. + + * ede/locate.el: Remove useless requires. Declare functions + instead and require in functions when needed. + 2012-10-23 Stefan Monnier * semantic/db-file.el (semanticdb-save-database-functions): diff --git a/lisp/cedet/ede/locate.el b/lisp/cedet/ede/locate.el index c008f5fb945..03227907af4 100644 --- a/lisp/cedet/ede/locate.el +++ b/lisp/cedet/ede/locate.el @@ -49,13 +49,7 @@ ;; when it is available. (require 'ede) -(eval-when-compile (require 'data-debug) - (require 'eieio-datadebug) - (require 'cedet-global) - (require 'cedet-idutils) - (require 'cedet-cscope)) - -(require 'locate) +(eval-when-compile (require 'locate)) ;;; Code: (defcustom ede-locate-setup-options @@ -214,6 +208,12 @@ that created this EDE locate object." ;;; GLOBAL ;; + +(declare-function cedet-gnu-global-version-check "cedet-global") +(declare-function cedet-gnu-global-root "cedet-global") +(declare-function cedet-gnu-global-expand-filename "cedet-global") +(declare-function cedet-gnu-global-create/update-database "cedet-global") + (defclass ede-locate-global (ede-locate-base) () "EDE Locator using GNU Global. @@ -260,6 +260,12 @@ that created this EDE locate object." ;;; IDUTILS ;; + +(declare-function cedet-idutils-version-check "cedet-idutils") +(declare-function cedet-idutils-support-for-directory "cedet-idutils") +(declare-function cedet-idutils-expand-filename "cedet-idutils") +(declare-function cedet-idutils-create/update-database "cedet-idutils") + (defclass ede-locate-idutils (ede-locate-base) () "EDE Locator using IDUtils. @@ -303,6 +309,12 @@ that created this EDE locate object." ;;; CSCOPE ;; + +(declare-function cedet-cscope-version-check "cedet-scope") +(declare-function cedet-cscope-support-for-directory "cedet-scope") +(declare-function cedet-cscope-expand-filename "cedet-cscope") +(declare-function cedet-cscope-create/update-database "cedet-cscope") + (defclass ede-locate-cscope (ede-locate-base) () "EDE Locator using Cscope. @@ -315,6 +327,7 @@ file name searching variable `cedet-cscope-file-command'.") ;; Get ourselves initialized. (call-next-method) ;; Do the checks. + (require 'cedet-cscope) (cedet-cscope-version-check) (when (not (cedet-cscope-support-for-directory (oref loc root))) (error "Cannot use Cscope in %s" @@ -324,6 +337,7 @@ file name searching variable `cedet-cscope-file-command'.") (defmethod ede-locate-ok-in-project :static ((loc ede-locate-cscope) root) "Is it ok to use this project type under ROOT." + (require 'cedet-cscope) (cedet-cscope-version-check) (when (cedet-cscope-support-for-directory root) root)) @@ -334,11 +348,13 @@ file name searching variable `cedet-cscope-file-command'.") Searches are done under the current root of the EDE project that created this EDE locate object." (let ((default-directory (oref loc root))) + (require 'cedet-cscope) (cedet-cscope-expand-filename filesubstring))) (defmethod ede-locate-create/update-root-database :STATIC ((loc ede-locate-cscope) root) "Create or update the GNU Global database for the current project." + (require 'cedet-cscope) (cedet-cscope-create/update-database root)) (provide 'ede/locate) diff --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el index 373864a43d5..01d3206f662 100644 --- a/lisp/cedet/semantic.el +++ b/lisp/cedet/semantic.el @@ -382,7 +382,7 @@ to use Semantic, and `semantic-init-hook' is run." "When non-nil, activate the interactive parsing debugger. Do not set this yourself. Call `semantic-debug'.") -(defun semantic-elapsed-time (start end) +(defsubst semantic-elapsed-time (start end) "Copied from elp.el. Was `elp-elapsed-time'. Arguments START and END bound the time being calculated." (float-time (time-subtract end start))) diff --git a/lisp/cedet/semantic/analyze.el b/lisp/cedet/semantic/analyze.el index 63acc555343..d03c72a5983 100644 --- a/lisp/cedet/semantic/analyze.el +++ b/lisp/cedet/semantic/analyze.el @@ -527,7 +527,7 @@ Returns an object based on symbol `semantic-analyze-context'." (function nil) (fntag nil) arg fntagend argtag - assign asstag + assign asstag newseq ) ;; Pattern for Analysis: @@ -601,16 +601,26 @@ Returns an object based on symbol `semantic-analyze-context'." (if debug-on-error (catch 'unfindable - ;; If debug on error is on, allow debugging in this fcn. (setq prefix (semantic-analyze-find-tag-sequence - prefix scope 'prefixtypes 'unfindable))) + prefix scope 'prefixtypes 'unfindable)) + ;; If there's an alias, dereference it and analyze + ;; sequence again. + (when (setq newseq + (semantic-analyze-dereference-alias prefix)) + (setq prefix (semantic-analyze-find-tag-sequence + newseq scope 'prefixtypes 'unfindable)))) ;; Debug on error is off. Capture errors and move on (condition-case err ;; NOTE: This line is duplicated in ;; semantic-analyzer-debug-global-symbol ;; You will need to update both places. - (setq prefix (semantic-analyze-find-tag-sequence - prefix scope 'prefixtypes)) + (progn + (setq prefix (semantic-analyze-find-tag-sequence + prefix scope 'prefixtypes)) + (when (setq newseq + (semantic-analyze-dereference-alias prefix)) + (setq prefix (semantic-analyze-find-tag-sequence + newseq scope 'prefixtypes)))) (error (semantic-analyze-push-error err)))) ) @@ -679,6 +689,20 @@ Returns an object based on symbol `semantic-analyze-context'." ;; Return our context. context-return)) +(defun semantic-analyze-dereference-alias (taglist) + "Dereference first tag in TAGLIST if it is an alias. +Returns a sequence of names which can then be fed again into +`semantic-analyze-find-tag-sequence'. +Returns nil if no alias was found." + (when (eq (semantic-tag-get-attribute (car taglist) :kind) 'alias) + (let ((tagname + (semantic-analyze-split-name + (semantic-tag-name + (car (semantic-tag-get-attribute (car taglist) :members)))))) + (append (if (listp tagname) + tagname + (list tagname)) + (cdr taglist))))) (defun semantic-adebug-analyze (&optional ctxt) "Perform `semantic-analyze-current-context'. diff --git a/lisp/cedet/semantic/chart.el b/lisp/cedet/semantic/chart.el index c6b13475862..2c6f7344acf 100644 --- a/lisp/cedet/semantic/chart.el +++ b/lisp/cedet/semantic/chart.el @@ -26,12 +26,9 @@ ;; the output of the semantic parser. ;; -(require 'semantic) (require 'chart) (require 'semantic/db) -(require 'semantic/tag) - -(eval-when-compile (require 'semantic/find)) +(require 'semantic/find) ;;; Code: diff --git a/lisp/cedet/semantic/db-el.el b/lisp/cedet/semantic/db-el.el index 281479045ea..dbb3bfae34d 100644 --- a/lisp/cedet/semantic/db-el.el +++ b/lisp/cedet/semantic/db-el.el @@ -31,12 +31,7 @@ ;; (require 'semantic/db) - -(eval-when-compile - ;; For generic function searching. - (require 'eieio) - (require 'eieio-opt) - (require 'eieio-base)) +(require 'eieio-opt) (declare-function semantic-elisp-desymbolify "semantic/bovine/el") (declare-function semantic-tag-similar-p "semantic/tag-ls") diff --git a/lisp/cedet/semantic/db-file.el b/lisp/cedet/semantic/db-file.el index 4f8e93dc391..905c62a89dd 100644 --- a/lisp/cedet/semantic/db-file.el +++ b/lisp/cedet/semantic/db-file.el @@ -25,12 +25,9 @@ ;; A set of semanticdb classes for persistently saving caches on disk. ;; -(require 'semantic) (require 'semantic/db) (require 'cedet-files) - -(eval-when-compile - (require 'data-debug)) +(require 'data-debug) (defvar semanticdb-file-version semantic-version "Version of semanticdb we are writing files to disk with.") diff --git a/lisp/cedet/semantic/grammar-wy.el b/lisp/cedet/semantic/grammar-wy.el index 8a33c8c8a1a..a926f636b4b 100644 --- a/lisp/cedet/semantic/grammar-wy.el +++ b/lisp/cedet/semantic/grammar-wy.el @@ -23,9 +23,8 @@ ;;; Code: -(require 'semantic/lex) -(eval-when-compile (require 'semantic/bovine)) - +(require 'semantic) + ;;; Prologue ;; (defvar semantic-grammar-lex-c-char-re) diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el index b85396a79ae..c0e7b8f9038 100644 --- a/lisp/cedet/semantic/grammar.el +++ b/lisp/cedet/semantic/grammar.el @@ -35,6 +35,7 @@ (require 'semantic/format) (require 'semantic/grammar-wy) (require 'semantic/idle) +(require 'help-fns) (declare-function semantic-momentary-highlight-tag "semantic/decorate") (declare-function semantic-analyze-context "semantic/analyze") @@ -47,6 +48,9 @@ (require 'semantic/find) (require 'semantic/db)) +(declare-function semantic-grammar-wy--install-parser + "semantic/gram-wy-fallback") + ;;;; ;;;; Set up lexer @@ -825,6 +829,8 @@ Does nothing if the Lisp code seems up to date. If optional argument FORCE is non-nil, unconditionally re-generate the Lisp code." (interactive "P") + (unless (semantic-active-p) + (error "You have to activate semantic-mode to create a package.")) (setq force (or force current-prefix-arg)) (semantic-fetch-tags) (let* ( @@ -1636,6 +1642,12 @@ Select the buffer containing the tag's definition, and move point there." ) "Association of syntax elements, and the corresponding help.") +(declare-function eldoc-function-argstring "eldoc") +(declare-function eldoc-docstring-format-sym-doc "eldoc") +(declare-function eldoc-last-data-store "eldoc") +(declare-function eldoc-get-fnsym-args-string "eldoc") +(declare-function eldoc-get-var-docstring "eldoc") + (defun semantic-grammar-eldoc-get-macro-docstring (macro expander) "Return a one-line docstring for the given grammar MACRO. EXPANDER is the name of the function that expands MACRO." diff --git a/lisp/cedet/semantic/texi.el b/lisp/cedet/semantic/texi.el index 9380940282f..d79e71bb265 100644 --- a/lisp/cedet/semantic/texi.el +++ b/lisp/cedet/semantic/texi.el @@ -26,17 +26,11 @@ ;; parser plug-in is the function `semantic-texi-parse-region' that ;; overrides `semantic-parse-region'. -(require 'semantic) +(require 'semantic/db-find) (require 'semantic/format) +(require 'semantic/ctxt) (require 'texinfo) -(eval-when-compile - (require 'semantic/db) - (require 'semantic/db-find) - (require 'semantic/ctxt) - (require 'semantic/find) - (require 'semantic/doc)) - (defvar ede-minor-mode) (declare-function lookup-words "ispell") (declare-function ede-current-project "ede") diff --git a/lisp/cedet/srecode/compile.el b/lisp/cedet/srecode/compile.el index 8a1291f8d72..8457e35abe5 100644 --- a/lisp/cedet/srecode/compile.el +++ b/lisp/cedet/srecode/compile.el @@ -199,6 +199,8 @@ Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use." (defun srecode-compile-templates () "Compile a semantic recode template file into a mode-local variable." (interactive) + (unless (semantic-active-p) + (error "You have to activate semantic-mode to compile SRecode templates.")) (require 'srecode/insert) (message "Compiling template %s..." (file-name-nondirectory (buffer-file-name))) diff --git a/lisp/cedet/srecode/dictionary.el b/lisp/cedet/srecode/dictionary.el index 6262383c397..2b6bbb51eaa 100644 --- a/lisp/cedet/srecode/dictionary.el +++ b/lisp/cedet/srecode/dictionary.el @@ -604,7 +604,6 @@ STATE is the current compiler state." "Run data-debug on this mode's dictionary." (interactive) (require 'eieio-datadebug) - (require 'semantic) (require 'srecode/find) (let* ((modesym major-mode) (start (current-time)) diff --git a/lisp/cedet/srecode/insert.el b/lisp/cedet/srecode/insert.el index 726aa41cffd..f099c0ca6eb 100644 --- a/lisp/cedet/srecode/insert.el +++ b/lisp/cedet/srecode/insert.el @@ -195,6 +195,10 @@ Buffer based features related to change hooks is handled one level up." ;; area. Return value is not important. )) +(declare-function data-debug-new-buffer "data-debug") +(declare-function data-debug-insert-stuff-list "data-debug") +(declare-function data-debug-insert-thing dictionary "data-debug") + (defun srecode-insert-show-error-report (dictionary format &rest args) "Display an error report based on DICTIONARY, FORMAT and ARGS. This is intended to diagnose problems with failed template diff --git a/lisp/cedet/srecode/java.el b/lisp/cedet/srecode/java.el index 3635a39d383..43e9273da76 100644 --- a/lisp/cedet/srecode/java.el +++ b/lisp/cedet/srecode/java.el @@ -26,10 +26,7 @@ ;;; Code: (require 'srecode/dictionary) -(require 'semantic/tag) - -(eval-when-compile - (require 'semantic/find)) +(require 'semantic/find) ;;;###autoload (defun srecode-semantic-handle-:java (dict) diff --git a/lisp/cedet/srecode/map.el b/lisp/cedet/srecode/map.el index d6613ee1b02..7fb5c16a1f3 100644 --- a/lisp/cedet/srecode/map.el +++ b/lisp/cedet/srecode/map.el @@ -215,7 +215,8 @@ Optional argument RESET forces a reset of the current map." ;; Eventually, I want to return many maps to search through. (list srecode-current-map))) -(eval-when-compile (require 'data-debug)) +(declare-function data-debug-new-buffer "data-debug") +(declare-function data-debug-insert-stuff-list "data-debug") (defun srecode-adebug-maps () "Run ADEBUG on the output of `srecode-get-maps'." diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el index 64b240b9d5d..c8bdd7758fa 100644 --- a/lisp/emacs-lisp/eieio-opt.el +++ b/lisp/emacs-lisp/eieio-opt.el @@ -29,9 +29,9 @@ ;; (require 'eieio) -(require 'button) -(require 'help-mode) (require 'find-func) +(require 'speedbar) +(require 'help-mode) ;;; Code: ;;;###autoload @@ -710,10 +710,6 @@ Arguments UNUSED are not used." ;;; SPEEDBAR SUPPORT ;; -(eval-when-compile - (condition-case nil - (require 'speedbar) - (error (message "Error loading speedbar... ignored")))) (defvar eieio-class-speedbar-key-map nil "Keymap used when working with a project in speedbar.") diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index 608134bd54f..3f7b49bde25 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -3049,29 +3049,6 @@ Optional argument NOESCAPE is passed to `prin1-to-string' when appropriate." ) ) -;;; Interfacing with imenu in emacs lisp mode -;; (Only if the expression is defined) -;; -(if (eval-when-compile (boundp 'lisp-imenu-generic-expression)) -(progn - -(defun eieio-update-lisp-imenu-expression () - "Examine `lisp-imenu-generic-expression' and modify it to find `defmethod'." - (let ((exp lisp-imenu-generic-expression)) - (while exp - ;; it's of the form '( ( title expr indx ) ... ) - (let* ((subcar (cdr (car exp))) - (substr (car subcar))) - (if (and (not (string-match "|method\\\\" substr)) - (string-match "|advice\\\\" substr)) - (setcar subcar - (replace-match "|advice\\|method\\" t t substr 0)))) - (setq exp (cdr exp))))) - -(eieio-update-lisp-imenu-expression) - -)) - ;;; Autoloading some external symbols, and hooking into the help system ;; -- 2.39.2