changeset 61720:314c959fa176

(unload-feature): Don't remove a function from hooks if it is about to be restored to an autoload . Remove functions that will become unbound from auto-mode-alist. Simplify the code.
author Lute Kamstra <lute@gnu.org>
date Thu, 21 Apr 2005 21:36:24 +0000
parents 05723b20cc75
children 2e5e4800dc8a
files lisp/loadhist.el
diffstat 1 files changed, 23 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/loadhist.el	Thu Apr 21 21:29:34 2005 +0000
+++ b/lisp/loadhist.el	Thu Apr 21 21:36:24 2005 +0000
@@ -188,27 +188,34 @@
 			     (string-match "-hooks?\\'" (symbol-name x)))
 			(memq x unload-feature-special-hooks)))	; Known abnormal hooks etc.
 	   (dolist (y unload-hook-features-list)
-	     (when (eq (car-safe y) 'defun)
-	       (remove-hook x (cdr y))))))))
+	     (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-hook-features-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)))))
     (when (fboundp 'elp-restore-function) ; remove ELP stuff first
       (dolist (elt unload-hook-features-list)
 	(when (symbolp elt)
 	  (elp-restore-function elt))))
     (dolist (x unload-hook-features-list)
       (if (consp x)
-	  (progn
-	    ;; Remove any feature names that this file provided.
-	    (when (eq (car x) 'provide)
-	      (setq features (delq (cdr x) features)))
-	    (when (eq (car x) 'defun)
-	      (let ((fun (cdr x)))
-		(when (fboundp fun)
-		  (when (fboundp 'ad-unadvise)
-		    (ad-unadvise fun))
-		  (fmakunbound fun)
-		  (let ((aload (get fun 'autoload)))
-		    (when aload 
-		      (fset fun (cons 'autoload aload))))))))
+	  (cond
+	   ;; Remove any feature names that this file provided.
+	   ((eq (car x) 'provide)
+	    (setq features (delq (cdr x) features)))
+	   ((eq (car x) 'defun)
+	    (let ((fun (cdr x)))
+	      (when (fboundp fun)
+		(when (fboundp 'ad-unadvise)
+		  (ad-unadvise fun))
+		(fmakunbound fun)
+		(let ((aload (get fun 'autoload)))
+		  (when aload
+		    (fset fun (cons 'autoload aload))))))))
 	;; Kill local values as much as possible.
 	(dolist (buf (buffer-list))
 	  (with-current-buffer buf
@@ -217,8 +224,7 @@
 	(unless (local-variable-if-set-p x)
 	  (makunbound x))))
     ;; Delete the load-history element for this file.
-    (let ((elt (assoc file load-history)))
-      (setq load-history (delq elt load-history)))))
+    (setq load-history (delq (assoc file load-history) load-history))))
 
 (provide 'loadhist)