]> git.eshelyaron.com Git - emacs.git/commitdiff
(add-hook): Fix regression
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 23 Feb 2022 03:52:40 +0000 (22:52 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 23 Feb 2022 03:52:40 +0000 (22:52 -0500)
* lisp/subr.el (add-hook): When the hook has no local part yet, don't
set `local` to t, so we set the right part of the depth-sym.
(remove-hook): Don't modify the depth alist by side-effect since I'm
not completely sure it's safe.

lisp/subr.el

index 1b9b67b7054f45af153a4477210d1721bb6428aa..eb9af0b36dac105b8bac652621c08ff774ac7dfc 100644 (file)
@@ -1905,7 +1905,9 @@ performance impact when running `add-hook' and `remove-hook'."
              (set (make-local-variable hook) (list t)))
     ;; Detect the case where make-local-variable was used on a hook
     ;; and do what we used to do.
-    (unless (and (consp (symbol-value hook)) (memq t (symbol-value hook)))
+    (when (and (local-variable-if-set-p hook)
+               (not (and (consp (symbol-value hook))
+                         (memq t (symbol-value hook)))))
       (setq local t)))
   (let ((hook-value (if local (symbol-value hook) (default-value hook))))
     ;; If the hook value is a single function, turn it into a list.
@@ -2020,7 +2022,7 @@ one will be removed."
           (when di
             (setf (if local (symbol-value depth-sym)
                     (default-value depth-sym))
-                  (delq di depth-alist)))))
+                  (remq di depth-alist)))))
       ;; If the function is on the global hook, we need to shadow it locally
       ;;(when (and local (member function (default-value hook))
       ;;              (not (member (cons 'not function) hook-value)))