1.0.9.63: Disallow (:not) in #+/#- expressions.
authorAndreas Fuchs <asf@boinkor.net>
Tue, 18 Sep 2007 08:05:28 +0000 (08:05 +0000)
committerAndreas Fuchs <asf@boinkor.net>
Tue, 18 Sep 2007 08:05:28 +0000 (08:05 +0000)
NOT in feature expressions is specified to accept exactly one argument.
The previous implementation of FEATUREP allowed zero or one argument,
so tighten that check.

Might need to fix CLRFI-1, as well (-:

src/code/early-extensions.lisp
version.lisp-expr

index 833adb7..65f98d7 100644 (file)
 ;;; handle arbitrary combinations of atoms using NOT, AND, OR.
 (defun featurep (x)
   (if (consp x)
-    (case (car x)
-      ((:not not)
-       (if (cddr x)
-         (error "too many subexpressions in feature expression: ~S" x)
-         (not (featurep (cadr x)))))
-      ((:and and) (every #'featurep (cdr x)))
-      ((:or or) (some #'featurep (cdr x)))
-      (t
-       (error "unknown operator in feature expression: ~S." x)))
-    (not (null (memq x *features*)))))
+      (case (car x)
+        ((:not not)
+         (cond
+           ((cddr x)
+            (error "too many subexpressions in feature expression: ~S" x))
+           ((null (cdr x))
+            (error "too few subexpressions in feature expression: ~S" x))
+           (t (not (featurep (cadr x))))))
+        ((:and and) (every #'featurep (cdr x)))
+        ((:or or) (some #'featurep (cdr x)))
+        (t
+         (error "unknown operator in feature expression: ~S." x)))
+      (not (null (memq x *features*)))))
 \f
 ;;;; utilities for two-VALUES predicates
 
index 80aeb76..51f6012 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.9.62"
+"1.0.9.63"