summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/cl-macs.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp/cl-macs.el')
-rw-r--r--lisp/emacs-lisp/cl-macs.el38
1 files changed, 11 insertions, 27 deletions
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 6aed060cb50..5535100d4ae 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -281,13 +281,8 @@ FORM is of the form (ARGS . BODY)."
(or (not optional)
;; Optional args whose default is nil are simple.
(null (nth 1 (assq (car args) (cdr cl--bind-defs)))))
- (not (and (eq (car args) '&optional)
- (progn
- (when (memq (cadr args)
- '(nil &rest &body &key &aux))
- (error "Variable missing after &optional"))
- (setq optional t)
- (car cl--bind-defs)))))
+ (not (and (eq (car args) '&optional) (setq optional t)
+ (car cl--bind-defs))))
(push (pop args) simple-args))
(when optional
(if args (push '&optional args))
@@ -539,17 +534,14 @@ its argument list allows full Common Lisp conventions."
arglist))))
(defun cl--do-&aux (args)
- (when (eq (car args) '&aux)
- (pop args)
- (when (null args)
- (error "Variable missing after &aux")))
- (while (and args (not (memq (car args) cl--lambda-list-keywords)))
- (if (consp (car args))
- (if (and cl--bind-enquote (cl-cadar args))
- (cl--do-arglist (caar args)
- `',(cadr (pop args)))
- (cl--do-arglist (caar args) (cadr (pop args))))
- (cl--do-arglist (pop args) nil)))
+ (while (and (eq (car args) '&aux) (pop args))
+ (while (and args (not (memq (car args) cl--lambda-list-keywords)))
+ (if (consp (car args))
+ (if (and cl--bind-enquote (cl-cadar args))
+ (cl--do-arglist (caar args)
+ `',(cadr (pop args)))
+ (cl--do-arglist (caar args) (cadr (pop args))))
+ (cl--do-arglist (pop args) nil))))
(if args (error "Malformed argument list ends with: %S" args)))
(defun cl--do-arglist (args expr &optional num) ; uses cl--bind-*
@@ -566,9 +558,6 @@ its argument list allows full Common Lisp conventions."
(keys nil)
(laterarg nil) (exactarg nil) minarg)
(or num (setq num 0))
- (when (and restarg (or (null (cdr restarg))
- (memq (cadr restarg) cl--lambda-list-keywords)))
- (error "Variable missing after &rest"))
(setq restarg (if (listp (cadr restarg))
(make-symbol "--cl-rest--")
(cadr restarg)))
@@ -620,12 +609,7 @@ its argument list allows full Common Lisp conventions."
`',cl--bind-block)
(+ ,num (length ,restarg)))))
cl--bind-forms)))
- (while (eq (car args) '&key)
- (pop args)
- (when (or (null args) (memq (car args) cl--lambda-list-keywords))
- (error "Missing variable after &key"))
- (when keys
- (error "Multiple occurrences of &key"))
+ (while (and (eq (car args) '&key) (pop args))
(while (and args (not (memq (car args) cl--lambda-list-keywords)))
(let ((arg (pop args)))
(or (consp arg) (setq arg (list arg)))