(name init).
+7. Existence of &KEY in the lambda-list.
+
Signals a PROGRAM-ERROR is the lambda-list is malformed."
(let ((state :required)
(allow-other-keys nil)
(optional nil)
(rest nil)
(keys nil)
+ (keyp nil)
(aux nil))
(labels ((fail (elt)
(simple-program-error "Misplaced ~S in ordinary lambda-list:~% ~S"
(&key
(if (member state '(:required &optional :after-rest))
(setf state elt)
- (fail elt)))
+ (fail elt))
+ (setf keyp t))
(&allow-other-keys
(if (eq state '&key)
(setf allow-other-keys t
(t
(simple-program-error "Invalid ordinary lambda-list:~% ~S" lambda-list)))))))
(values (nreverse required) (nreverse optional) rest (nreverse keys)
- allow-other-keys (nreverse aux))))
+ allow-other-keys (nreverse aux) keyp)))
;;;; DESTRUCTURING-*CASE
(equal '(#C(0.0 0.0) #C(0.0 2.0) #C(0.0 4.0))
(iota 3 :start 0.0 :step #C(0 2)))
t)
+
+(deftest parse-ordinary-lambda-list.1
+ (multiple-value-bind (req opt rest keys allowp aux keyp)
+ (parse-ordinary-lambda-list '(a b c &optional d &key))
+ (and (equal '(a b c) req)
+ (equal '((d nil nil)) opt)
+ (equal '() keys)
+ (not allowp)
+ (not aux)
+ (eq t keyp))))