aboutsummaryrefslogtreecommitdiff
path: root/src/util.lisp
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2021-03-17 16:18:19 -0700
committerSean Whitton <spwhitton@spwhitton.name>2021-03-18 09:55:57 -0700
commit903c89e30c08c4cdc072dc280f2d692b7e84d9de (patch)
tree51fcc232e5485f46c83469c6f4d60028bf8c4d24 /src/util.lisp
parent5e65876d1ab38e982c3496d27036c494671f7316 (diff)
downloadconsfigurator-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.lisp18
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*))