summaryrefslogtreecommitdiff
path: root/lisp/loadhist.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2002-09-29 03:34:12 +0000
committerRichard M. Stallman <rms@gnu.org>2002-09-29 03:34:12 +0000
commit3147ee6dbce06908d914c41cee3d79b086062c0d (patch)
treedafe4efcf9dca890eb84286ba10ea69036ea8eff /lisp/loadhist.el
parentebaa33494bec61deaf0d935745fff13cee38d473 (diff)
downloademacs-3147ee6dbce06908d914c41cee3d79b086062c0d.tar.gz
(unload-feature): When undefining a variable, delete its buffer-local bindings.
Diffstat (limited to 'lisp/loadhist.el')
-rw-r--r--lisp/loadhist.el10
1 files changed, 8 insertions, 2 deletions
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index 00597615c2d..e609596e4a8 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -167,8 +167,14 @@ is nil, raise an error."
;; Remove any feature names that this file provided.
(if (eq (car x) 'provide)
(setq features (delq (cdr x) features)))
- (if (eq (car x) 'defvar)
- (makunbound (cdr x))))
+ (when (eq (car x) 'defvar)
+ ;; Kill local values as much as possible.
+ (dolist (buf (buffer-list))
+ (with-current-buffer buf
+ (kill-local-variable (cdr x))))
+ ;; Get rid of the default binding if we can.
+ (unless (local-variable-if-set-p (cdr x))
+ (makunbound (cdr x)))))
(t
(when (fboundp x)
(if (fboundp 'ad-unadvise)