diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2021-03-17 16:18:19 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2021-03-18 09:55:57 -0700 |
commit | 903c89e30c08c4cdc072dc280f2d692b7e84d9de (patch) | |
tree | 51fcc232e5485f46c83469c6f4d60028bf8c4d24 /src/util.lisp | |
parent | 5e65876d1ab38e982c3496d27036c494671f7316 (diff) | |
download | consfigurator-903c89e30c08c4cdc072dc280f2d692b7e84d9de.tar.gz |
check for disallowed keywords in ORDINARY-LL-*
Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
Diffstat (limited to 'src/util.lisp')
-rw-r--r-- | src/util.lisp | 18 |
1 files changed, 18 insertions, 0 deletions
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*)) |