summaryrefslogtreecommitdiff
path: root/lisp/cedet/semantic/db-el.el
diff options
context:
space:
mode:
authorDavid Engster <dengste@eml.cc>2013-07-27 23:09:43 +0200
committerDavid Engster <dengste@eml.cc>2013-07-27 23:09:43 +0200
commit25ac1ded77db0e0a839841872dbd514c4c14956b (patch)
treeee6756b5233c98406ac9c69f2cce4150339e42a8 /lisp/cedet/semantic/db-el.el
parentf5950f7afe5c62af0ba7dd834419a533c7215b3d (diff)
downloademacs-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.el39
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)