emacs-diffs
[Top][All Lists]
Advanced

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

master 0e9e367 1/3: unload-feature: Improve logic (don't repeat computat


From: Št?pán N?mec
Subject: master 0e9e367 1/3: unload-feature: Improve logic (don't repeat computation)
Date: Wed, 21 Oct 2020 12:51:05 -0400 (EDT)

branch: master
commit 0e9e36747f060a52ce4ecbf48eeb8421d4a19c68
Author: Štěpán Němec <stepnem@gmail.com>
Commit: Štěpán Němec <stepnem@gmail.com>

    unload-feature: Improve logic (don't repeat computation)
    
    * lisp/loadhist.el (unload-feature): Don't do the same computation twice.
---
 lisp/loadhist.el | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index a1ff2f6..60da00c 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -287,22 +287,23 @@ something strange, such as redefining an Emacs function."
        ;; functions which the package might just have installed, and
        ;; there might be other important state, but this tactic
        ;; normally works.
-       (mapatoms
-        (lambda (x)
-          (when (and (boundp x)
-                     (or (and (consp (symbol-value x)) ; Random hooks.
-                              (string-match "-hooks?\\'" (symbol-name x)))
-                         (memq x unload-feature-special-hooks)))       ; Known 
abnormal hooks etc.
-            (dolist (y unload-function-defs-list)
-              (when (and (eq (car-safe y) 'defun)
-                         (not (get (cdr y) 'autoload)))
-                (remove-hook x (cdr y)))))))
-       ;; Remove any feature-symbols from auto-mode-alist as well.
-       (dolist (y unload-function-defs-list)
-         (when (and (eq (car-safe y) 'defun)
-                    (not (get (cdr y) 'autoload)))
-           (setq auto-mode-alist
-                 (rassq-delete-all (cdr y) auto-mode-alist)))))
+        (let ((removables (cl-loop for def in unload-function-defs-list
+                                   when (and (eq (car-safe def) 'defun)
+                                             (not (get (cdr def) 'autoload)))
+                                   collect (cdr def))))
+          (mapatoms
+          (lambda (x)
+            (when (and (boundp x)
+                       (or (and (consp (symbol-value x)) ; Random hooks.
+                                (string-match "-hooks?\\'" (symbol-name x)))
+                            ;; Known abnormal hooks etc.
+                           (memq x unload-feature-special-hooks)))
+              (dolist (func removables)
+                (remove-hook x func)))))
+          ;; Remove any feature-symbols from auto-mode-alist as well.
+          (dolist (func removables)
+            (setq auto-mode-alist
+                  (rassq-delete-all func auto-mode-alist)))))
 
       ;; Change major mode in all buffers using one defined in the feature 
being unloaded.
       (unload--set-major-mode)



reply via email to

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