Mercurial > emacs
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'.