changeset 75797:1c398694f7b2

(unload-feature): Handle (t . SYMBOL) entries in load history.
author Richard M. Stallman <rms@gnu.org>
date Sun, 11 Feb 2007 11:11:09 +0000
parents 9238d5453f3c
children 8496bd7b062a
files lisp/loadhist.el
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/loadhist.el	Sun Feb 11 07:14:38 2007 +0000
+++ b/lisp/loadhist.el	Sun Feb 11 11:11:09 2007 +0000
@@ -173,6 +173,9 @@
 	       (prin1-to-string dependents) file))))
   (let* ((unload-hook-features-list (feature-symbols feature))
          (file (pop unload-hook-features-list))
+	 ;; If non-nil, this is a symbol for which we should
+	 ;; restore a previous autoload if possible.
+	 restore-autoload
          (unload-hook (intern-soft (concat (symbol-name feature)
                                            "-unload-hook"))))
     ;; Try to avoid losing badly when hooks installed in critical
@@ -209,6 +212,7 @@
       (dolist (elt unload-hook-features-list)
 	(when (symbolp elt)
 	  (elp-restore-function elt))))
+
     (dolist (x unload-hook-features-list)
       (if (consp x)
 	  (case (car x)
@@ -221,10 +225,14 @@
 		(when (fboundp 'ad-unadvise)
 		  (ad-unadvise fun))
 		(let ((aload (get fun 'autoload)))
-		  (if aload
+		  (if (and aload (eq fun restore-autoload))
                       (fset fun (cons 'autoload aload))
                     (fmakunbound fun))))))
-           ((t require defface) nil)
+	   ;; (t . SYMBOL) comes before (defun . SYMBOL)
+	   ;; and says we should restore SYMBOL's autoload
+	   ;; when we undefine it.
+	   ((t) (setq restore-autoload (cdr x)))
+           ((require defface) nil)
 	   (t (message "Unexpected element %s in load-history" x)))
 	;; Kill local values as much as possible.
 	(dolist (buf (buffer-list))