]> git.eshelyaron.com Git - emacs.git/commitdiff
(unload-feature): Handle (t . SYMBOL) entries in load history.
authorRichard M. Stallman <rms@gnu.org>
Sun, 11 Feb 2007 11:11:09 +0000 (11:11 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 11 Feb 2007 11:11:09 +0000 (11:11 +0000)
lisp/loadhist.el

index 8ca1de4aeca093aeb08ff6077258c78daaad8438..39d51a280f51acd2478a22c7dbbd533c1b1aa90d 100644 (file)
@@ -173,6 +173,9 @@ such as redefining an Emacs function."
               (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 @@ such as redefining an Emacs function."
       (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 @@ such as redefining an Emacs function."
                (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))