From 903c89e30c08c4cdc072dc280f2d692b7e84d9de Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Wed, 17 Mar 2021 16:18:19 -0700 Subject: check for disallowed keywords in ORDINARY-LL-* Signed-off-by: Sean Whitton --- src/util.lisp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/util.lisp') diff --git a/src/util.lisp b/src/util.lisp index 1f469ac..f9098b1 100644 --- a/src/util.lisp +++ b/src/util.lisp @@ -41,8 +41,25 @@ (defun memstring= (string list) (member string list :test #'string=)) +(defun assert-ordinary-ll-member (arg) + "Assert that ARG is not an implementation-specific lambda list keyword or a +lambda list keyword which is not permitted in ordinary lambda lists. + +Consfigurator's property-writing macros do not support lambda list keywords +which fail this assertion." + (or + (not + (member arg + '#.(set-difference lambda-list-keywords + '(&optional &rest &key &allow-other-keys &aux)))) + (simple-program-error + "Implementation-specific or non-ordinary lambda list keyword ~A not +supported." + arg))) + (defun ordinary-ll-without-&aux (ll) (loop for arg in ll + do (assert-ordinary-ll-member arg) if (eq '&aux arg) return accum else collect arg into accum finally (return accum))) @@ -50,6 +67,7 @@ (defun ordinary-ll-variable-names (ll) (loop for arg in ll for arg* = (ensure-car arg) + do (assert-ordinary-ll-member arg) unless (char= #\& (char (symbol-name arg*) 0)) collect arg*)) -- cgit v1.2.3