diff options
author | David Engster <dengste@eml.cc> | 2013-07-27 23:09:43 +0200 |
---|---|---|
committer | David Engster <dengste@eml.cc> | 2013-07-27 23:09:43 +0200 |
commit | 25ac1ded77db0e0a839841872dbd514c4c14956b (patch) | |
tree | ee6756b5233c98406ac9c69f2cce4150339e42a8 /lisp/cedet/semantic/db-el.el | |
parent | f5950f7afe5c62af0ba7dd834419a533c7215b3d (diff) | |
download | emacs-25ac1ded77db0e0a839841872dbd514c4c14956b.tar.gz |
Merge from CEDET upstream (8569).
* lisp/cedet/semantic/edit.el (semantic-edits-splice-remove): Wrap
debug message removing middle tag in semantic-edits-verbose-flag
check.
* semantic/bovine/el.el (semantic/db-el): New require.
* semantic/db-el.el (semanticdb-normalize-one-tag): It might be that a
symbol comes from a file but cannot be found in its table. This
happens for instance when a symbol was dynamically created through a
macro like `defstruct'. In this case, return the original tag.
(semanticdb-elisp-sym->tag): Deal with autoloaded functions, where
the argument list is not available until the file is loaded.
Diffstat (limited to 'lisp/cedet/semantic/db-el.el')
-rw-r--r-- | lisp/cedet/semantic/db-el.el | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/lisp/cedet/semantic/db-el.el b/lisp/cedet/semantic/db-el.el index 1b0f3292ad3..3376389c7d5 100644 --- a/lisp/cedet/semantic/db-el.el +++ b/lisp/cedet/semantic/db-el.el @@ -173,13 +173,17 @@ If Emacs cannot resolve this symbol to a particular file, then return nil." (newtags (when tab (semanticdb-find-tags-by-name-method tab (semantic-tag-name tag)))) (match nil)) - ;; Find the best match. - (dolist (T newtags) - (when (semantic-tag-similar-p T tag) - (setq match T))) - ;; Backup system. - (when (not match) - (setq match (car newtags))) + ;; We might not have a parsed tag in this file, because it + ;; might be generated through a macro like defstruct. + (if (null newtags) + (setq match tag) + ;; Find the best match. + (dolist (T newtags) + (when (semantic-tag-similar-p T tag) + (setq match T))) + ;; Backup system. + (when (not match) + (setq match (car newtags)))) ;; Return it. (when tab (cons tab match)))))) @@ -196,15 +200,18 @@ TOKTYPE is a hint to the type of tag desired." (when sym (cond ((and (eq toktype 'function) (fboundp sym)) (require 'semantic/bovine/el) - (semantic-tag-new-function - (symbol-name sym) - nil ;; return type - (semantic-elisp-desymbolify - (help-function-arglist sym)) ;; arg-list - :user-visible-flag (condition-case nil - (interactive-form sym) - (error nil)) - )) + (let ((arglist (help-function-arglist sym))) + (when (not (listp arglist)) + ;; Function might be autoloaded, in which case + ;; the arglist is not available yet. + (setq arglist nil)) + (semantic-tag-new-function + (symbol-name sym) + nil ;; return type + (semantic-elisp-desymbolify arglist) + :user-visible-flag (condition-case nil + (interactive-form sym) + (error nil))))) ((and (eq toktype 'variable) (boundp sym)) (semantic-tag-new-variable (symbol-name sym) |