]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/elisp-mode.el
Update copyright year to 2015
[gnu-emacs] / lisp / progmodes / elisp-mode.el
index 347560a484e94ad86e35d3e0542cf1f1f06aee5c..4de40eff538cfcb03cd8158a86e3901c6d86a746 100644 (file)
@@ -1,6 +1,6 @@
 ;;; elisp-mode.el --- Emacs Lisp mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1999-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: lisp, languages
@@ -570,17 +570,26 @@ It can be quoted, or be inside a quoted form."
     (`apropos
      (elisp--xref-find-apropos id))))
 
-(defun elisp--xref-identifier-file (type sym)
-  (pcase type
-    (`defun (when (fboundp sym)
-              (find-function-library sym)))
-    (`defvar (when (boundp sym)
-               (or (symbol-file sym 'defvar)
-                   (help-C-file-name sym 'var))))
-    (`feature (when (featurep sym)
-                (find-library-name (symbol-name sym))))
-    (`defface (when (facep sym)
-                (symbol-file sym 'defface)))))
+(defun elisp--xref-identifier-location (type sym)
+  (let ((file
+         (pcase type
+           (`defun (when (fboundp sym)
+                     (let ((fun-lib
+                            (find-function-library sym)))
+                       (setq sym (car fun-lib))
+                       (cdr fun-lib))))
+           (`defvar (when (boundp sym)
+                      (or (symbol-file sym 'defvar)
+                          (help-C-file-name sym 'var))))
+           (`feature (when (featurep sym)
+                       (ignore-errors
+                         (find-library-name (symbol-name sym)))))
+           (`defface (when (facep sym)
+                       (symbol-file sym 'defface))))))
+    (when file
+      (when (string-match-p "\\.elc\\'" file)
+        (setq file (substring file 0 -1)))
+      (xref-make-elisp-location sym type file))))
 
 (defun elisp--xref-find-definitions (symbol)
   (save-excursion
@@ -588,11 +597,7 @@ It can be quoted, or be inside a quoted form."
       (dolist (type '(feature defface defvar defun))
         (let ((loc
                (condition-case err
-                   (let ((file (elisp--xref-identifier-file type symbol)))
-                     (when file
-                       (when (string-match-p "\\.elc\\'" file)
-                         (setq file (substring file 0 -1)))
-                       (xref-make-elisp-location symbol type file)))
+                   (elisp--xref-identifier-location type symbol)
                  (error
                   (xref-make-bogus-location (error-message-string err))))))
           (when loc