changeset 7110:ea2aef9d9f0e

(run-hooks): Don't use mapcar--save consing. (run-hook-with-args): New function.
author Richard M. Stallman <rms@gnu.org>
date Tue, 26 Apr 1994 07:43:54 +0000
parents d4842450463c
children e3daba09b015
files lisp/subr.el
diffstat 1 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Tue Apr 26 02:22:52 1994 +0000
+++ b/lisp/subr.el	Tue Apr 26 07:43:54 1994 +0000
@@ -491,10 +491,31 @@
 	   (symbol-value sym)
 	   (let ((value (symbol-value sym)))
 	     (if (and (listp value) (not (eq (car value) 'lambda)))
-		 (mapcar 'funcall value)
+		 (let ((functions value))
+		   (while value
+		     (funcall (car value))
+		     (setq value (cdr value))))
 	       (funcall value)))))
     (setq hooklist (cdr hooklist))))
 
+(defun run-hook-with-args (hook &rest args)
+  "Run HOOK with the specified arguments ARGS.
+HOOK should be a symbol, a hook variable.  If HOOK has a non-nil
+value, that value may be a function or a list of functions to be
+called to run the hook.  If the value is a function, it is called with
+the given arguments and its return value is returned.  If it is a list
+of functions, those functions are called, in order,
+with the given arguments ARGS.
+It is best not to depend on the value return by `run-hook-with-args',
+as that may change."
+  (and (boundp hook)
+       (symbol-value hook)
+       (let ((value (symbol-value hook)))
+	 (if (and (listp value) (not (eq (car value) 'lambda)))
+	     (mapcar '(lambda (foo) (apply foo args))
+		     value)
+	   (apply value args)))))
+
 ;; Tell C code how to call this function.
 (defconst run-hooks 'run-hooks
   "Variable by which C primitives find the function `run-hooks'.