emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 4afafa03704: Try and avoid hardcoding lists of function types


From: Stefan Monnier
Subject: master 4afafa03704: Try and avoid hardcoding lists of function types
Date: Tue, 12 Mar 2024 16:09:27 -0400 (EDT)

branch: master
commit 4afafa03704aab0c21e4cb4f028256ecead5f795
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    Try and avoid hardcoding lists of function types
    
    * 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.
---
 lisp/bind-key.el            | 42 +++++++++++++++++++-----------------------
 lisp/emacs-lisp/bytecomp.el | 15 +++------------
 2 files changed, 22 insertions(+), 35 deletions(-)

diff --git a/lisp/bind-key.el b/lisp/bind-key.el
index 378ad69b2bc..1e59c75566a 100644
--- a/lisp/bind-key.el
+++ b/lisp/bind-key.el
@@ -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)
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index cf0e6d600dd..7af568cfe34 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -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 "???"))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]