From 7a42065fe54cc335ab5015a99967652d81a24011 Mon Sep 17 00:00:00 2001
From: Attila Lendvai <attila@lendvai.name>
Date: Thu, 27 Oct 2016 17:27:42 +0200
Subject: [PATCH] Fix issue #2: parse-ordinary-lambda-list &key and &optional
 normalization.

Based on Kyle Littler's patch.
---
 macros.lisp | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/macros.lisp b/macros.lisp
index 4dd679a..0ac3447 100644
--- a/macros.lisp
+++ b/macros.lisp
@@ -184,8 +184,10 @@ Signals a PROGRAM-ERROR is the lambda-list is malformed."
                        (check-variable name "optional parameter")
                        (cond ((cdr tail)
                               (check-spec tail "optional-supplied-p parameter"))
+                             ((and normalize-optional tail)
+                              (setf elt (append elt '(nil))))
                              (normalize-optional
-                              (setf elt (append elt '(nil)))))))
+                              (setf elt (append elt '(nil nil)))))))
                     (t
                      (check-variable elt "optional parameter")
                      (when normalize-optional
@@ -209,10 +211,12 @@ Signals a PROGRAM-ERROR is the lambda-list is malformed."
                               (check-variable var-or-kv "keyword parameter")
                               (when normalize-keyword
                                 (setf var-or-kv (list (make-keyword var-or-kv) var-or-kv)))))
-                       (if (cdr tail)
-                           (check-spec tail "keyword-supplied-p parameter")
-                           (when normalize-keyword
-                             (setf tail (append tail '(nil)))))
+                       (cond ((cdr tail)
+                              (check-spec tail "keyword-supplied-p parameter"))
+                             ((and normalize-keyword tail)
+                              (setf tail (append tail '(nil))))
+                             (normalize-keyword
+                              (setf tail '(nil nil))))
                        (setf elt (cons var-or-kv tail))))
                     (t
                      (check-variable elt "keyword parameter")
-- 
GitLab