diff options
author | Matthias Andreas Benkard <matthias@benkard.de> | 2008-07-27 12:34:26 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <matthias@benkard.de> | 2008-07-27 12:34:26 +0200 |
commit | d2370aa9d420b1e466e58f00dbda0309ade6ced9 (patch) | |
tree | 387e1b9575caab40bc0fddf31a680132a9cc6881 /destructuring-bind.lisp | |
parent | 85ee881e611058e41e7dd7bc9cacfb7933f6778b (diff) |
D-B: Fix &OPTIONAL handling.
Diffstat (limited to 'destructuring-bind.lisp')
-rw-r--r-- | destructuring-bind.lisp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/destructuring-bind.lisp b/destructuring-bind.lisp index 161390d..7be7e41 100644 --- a/destructuring-bind.lisp +++ b/destructuring-bind.lisp @@ -17,7 +17,7 @@ ,@body))) (&aux (if (or (endp (cdr lambda-list)) - (member (cadr lambda-list) lambda-list-keywords)) + (%member (cadr lambda-list) lambda-list-keywords)) `(d-b ,(cdr lambda-list) ,environment ,whole-sym ,expression ,@body) `(let (,(cadr lambda-list)) @@ -25,29 +25,29 @@ ,@body)))) (&optional (if (or (endp (cdr lambda-list)) - (member (cadr lambda-list) lambda-list-keywords)) + (%member (cadr lambda-list) lambda-list-keywords)) `(d-b ,(cdr lambda-list) ,environment ,whole-sym ,expression ,@body) (let ((sym (gensym)) - (head (car lambda-list))) + (head (cadr lambda-list))) `(let* ((,sym ,expression) ,@(cond ((atom head) - `((,head (cadr ,sym)))) + `((,head (car ,sym)))) ((null (cdr head)) - `((,(car head) (cadr ,sym)))) + `((,(car head) (car ,sym)))) ((null (cddr head)) `((,(car head) (if (null ,sym) ,(cadr head) - (cadr ,sym))))) + (car ,sym))))) (t `((,(car head) (if (null ,sym) ,(cadr head) - (cadr ,sym))) + (car ,sym))) (,(caddr head) (not (null ,sym))))))) (d-b (&optional ,@(cddr lambda-list)) ,environment ,whole-sym (cdr ,sym) ,@body))))) ((&rest &body) - (if (member (cadr lambda-list) lambda-list-keywords) + (if (%member (cadr lambda-list) lambda-list-keywords) `(d-b ,(cdr lambda-list) ,environment ,whole-sym ,expression ,@body) (let ((sym (gensym))) @@ -64,7 +64,7 @@ ,@body)) (&key (if (or (endp (cdr lambda-list)) - (member (cadr lambda-list) lambda-list-keywords)) + (%member (cadr lambda-list) lambda-list-keywords)) `(d-b ,(cdr lambda-list) ,environment ,whole-sym ,expression ,@body) (let* ((sym (gensym)) |