Merge from CEDET upstream (8569).
authorDavid Engster <dengste@eml.cc>
Sat, 27 Jul 2013 21:09:43 +0000 (23:09 +0200)
committerDavid Engster <dengste@eml.cc>
Sat, 27 Jul 2013 21:09:43 +0000 (23:09 +0200)
* 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.

lisp/cedet/ChangeLog
lisp/cedet/semantic/bovine/el.el
lisp/cedet/semantic/db-el.el
lisp/cedet/semantic/edit.el

index 705277c..1b8e472 100644 (file)
@@ -1,3 +1,21 @@
+2013-07-27  Eric Ludlam <zappo@gnu.org>
+
+       * lisp/cedet/semantic/edit.el (semantic-edits-splice-remove): Wrap
+       debug message removing middle tag in semantic-edits-verbose-flag
+       check.
+
+2013-07-27  David Engster <deng@randomsample.de>
+
+       * 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.
+
 2013-06-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * data-debug.el, cedet-idutils.el: Neuter the "Version:" header.
index 0bbe3c6..c6f1ceb 100644 (file)
@@ -25,6 +25,7 @@
 
 (require 'semantic)
 (require 'semantic/bovine)
+(require 'semantic/db-el)
 (require 'find-func)
 
 (require 'semantic/ctxt)
index 1b0f329..3376389 100644 (file)
@@ -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)
index a27eab5..91455cd 100644 (file)
@@ -882,8 +882,9 @@ pre-positioned to a convenient location."
            ;; reparse
            (semantic-parse-changes-failed "Splice-remove failed.  Empty buffer?")
            ))
-      (message "To Remove Middle Tag: (%s)"
-              (semantic-format-tag-name first)))
+      (when semantic-edits-verbose-flag
+       (message "To Remove Middle Tag: (%s)"
+                (semantic-format-tag-name first))))
     ;; Find in the cache the preceding tag
     (while (and cachestart (not (eq first (car (cdr cachestart)))))
       (setq cachestart (cdr cachestart)))