]> git.eshelyaron.com Git - emacs.git/commitdiff
Try and avoid hardcoding lists of function types
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 12 Mar 2024 20:09:23 +0000 (16:09 -0400)
committerEshel Yaron <me@eshelyaron.com>
Fri, 15 Mar 2024 08:58:50 +0000 (09:58 +0100)
* lisp/bind-key.el (bind-key--get-binding-description):
Show docstrings for compiled functions also.  Don't hardcode knowledge
about various particular kinds of functions.

* lisp/emacs-lisp/bytecomp.el (display-call-tree): Remove special
support for functions with a `byte-code` body since we never generate
that nowadays.  Don't hardcode knowledge
about various particular kinds of functions.

(cherry picked from commit 4afafa03704aab0c21e4cb4f028256ecead5f795)

lisp/bind-key.el
lisp/emacs-lisp/bytecomp.el

index 378ad69b2bcd7fb8e445aea768dc7644598f55b5..1e59c75566ae0aac5c613229fba8fc3c647d402b 100644 (file)
@@ -453,31 +453,27 @@ other modes.  See `override-global-mode'."
   (macroexp-progn (bind-keys-form args 'override-global-map)))
 
 (defun bind-key--get-binding-description (elem)
-  (cond
-   ((listp elem)
+  (let (doc)
     (cond
-     ((memq (car elem) '(lambda function))
-      (if (and bind-key-describe-special-forms
-               (stringp (nth 2 elem)))
-          (nth 2 elem)
-        "#<lambda>"))
-     ((eq 'closure (car elem))
-      (if (and bind-key-describe-special-forms
-               (stringp (nth 3 elem)))
-          (nth 3 elem)
-        "#<closure>"))
-     ((eq 'keymap (car elem))
-      "#<keymap>")
+     ((symbolp elem)
+      (cond
+       ((and bind-key-describe-special-forms (keymapp elem)
+             ;; FIXME: Is this really ever better than the symbol-name?
+             ;; FIXME: `variable-documentation' describe what's in
+             ;; elem's `symbol-value', whereas `elem' here stands for
+             ;; its `symbol-function'.
+             (stringp (setq doc (get elem 'variable-documentation))))
+        doc)
+       (t elem)))
+     ((and bind-key-describe-special-forms (functionp elem)
+           (stringp (setq doc (documentation elem))))
+      doc) ;;FIXME: Keep only the first line?
+     ((consp elem)
+      (if (symbolp (car elem))
+          (format "#<%s>" (car elem))
+        elem))
      (t
-      elem)))
-   ;; must be a symbol, non-symbol keymap case covered above
-   ((and bind-key-describe-special-forms (keymapp elem))
-    (let ((doc (get elem 'variable-documentation)))
-      (if (stringp doc) doc elem)))
-   ((symbolp elem)
-    elem)
-   (t
-    "#<byte-compiled lambda>")))
+      (format "#<%s>" (type-of elem))))))
 
 (defun bind-key--compare-keybindings (l r)
   (let* ((regex bind-key-segregation-regexp)
index cf0e6d600dd6bb4b46638f28104f9ed322a495a8..7af568cfe34a1125672f62431d657f9b8c6e86da 100644 (file)
@@ -5536,23 +5536,14 @@ invoked interactively."
                 (if (null f)
                     " <top level>";; shouldn't insert nil then, actually -sk
                   " <not defined>"))
-               ((subrp (setq f (symbol-function f)))
-                " <subr>")
-               ((symbolp f)
+               ((symbolp (setq f (symbol-function f))) ;; An alias.
                 (format " ==> %s" f))
-               ((byte-code-function-p f)
-                "<compiled function>")
                ((not (consp f))
-                "<malformed function>")
+                (format " <%s>" (type-of f)))
                ((eq 'macro (car f))
-                (if (or (compiled-function-p (cdr f))
-                        ;; FIXME: Can this still happen?
-                        (assq 'byte-code (cdr (cdr (cdr f)))))
+                (if (compiled-function-p (cdr f))
                     " <compiled macro>"
                   " <macro>"))
-               ((assq 'byte-code (cdr (cdr f)))
-                ;; FIXME: Can this still happen?
-                "<compiled lambda>")
                ((eq 'lambda (car f))
                 "<function>")
                (t "???"))