From d2370aa9d420b1e466e58f00dbda0309ade6ced9 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Sun, 27 Jul 2008 12:34:26 +0200 Subject: D-B: Fix &OPTIONAL handling. --- destructuring-bind.lisp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'destructuring-bind.lisp') 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)) -- cgit v1.2.3