summaryrefslogtreecommitdiff
path: root/lisp/gnus/nnoo.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/gnus/nnoo.el')
-rw-r--r--lisp/gnus/nnoo.el17
1 files changed, 9 insertions, 8 deletions
diff --git a/lisp/gnus/nnoo.el b/lisp/gnus/nnoo.el
index 2260fd694e4..7759951662a 100644
--- a/lisp/gnus/nnoo.el
+++ b/lisp/gnus/nnoo.el
@@ -49,6 +49,9 @@
(defun ,func ,args ,@forms)
(nnoo-register-function ',func)))
+(defun noo--defalias (fun val)
+ (prog1 (defalias fun val) (nnoo-register-function fun)))
+
(defun nnoo-register-function (func)
(let ((funcs (nthcdr 3 (assoc (nnoo-backend func)
nnoo-definition-alist))))
@@ -90,9 +93,9 @@
(dolist (fun (or (cdr imp) (nnoo-functions (car imp))))
(let ((function (nnoo-symbol backend (nnoo-rest-symbol fun))))
(unless (fboundp function)
- ;; FIXME: Use `defalias' and closures to avoid `eval'.
- (eval `(deffoo ,function (&rest args)
- (,call-function ',backend ',fun args)))))))))
+ (noo--defalias function
+ (lambda (&rest args)
+ (funcall call-function backend fun args)))))))))
(defun nnoo-parent-function (backend function args)
(let ((pbackend (nnoo-backend function))
@@ -301,11 +304,9 @@ All functions will return nil and report an error."
request-list request-post request-list-newsgroups))
(let ((fun (nnoo-symbol backend op)))
(unless (fboundp fun)
- ;; FIXME: Use `defalias' and closures to avoid `eval'.
- (eval `(deffoo ,fun
- (&rest _args)
- (nnheader-report ',backend ,(format "%s-%s not implemented"
- backend op))))))))
+ (let ((msg (format "%s-%s not implemented" backend op)))
+ (noo--defalias fun
+ (lambda (&rest _args) (nnheader-report backend msg))))))))
(defun nnoo-set (server &rest args)
(let ((parents (nnoo-parents (car server)))