1.0.10.11: Make FEATUREP accept only symbols or conses.
authorAndreas Fuchs <asf@boinkor.net>
Thu, 27 Sep 2007 19:25:25 +0000 (19:25 +0000)
committerAndreas Fuchs <asf@boinkor.net>
Thu, 27 Sep 2007 19:25:25 +0000 (19:25 +0000)
One more restriction on feature expressions: They can contain only conses
or symbols. The previous implementation allowed conses and atoms.

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

index 65f98d7..68cf7c5 100644 (file)
   (def-constantly-fun constantly-nil nil)
   (def-constantly-fun constantly-0 0))
 
-;;; If X is an atom, see whether it is present in *FEATURES*. Also
+;;; If X is a symbol, see whether it is present in *FEATURES*. Also
 ;;; handle arbitrary combinations of atoms using NOT, AND, OR.
 (defun featurep (x)
-  (if (consp x)
-      (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*)))))
+  (etypecase x
+    (cons
+     (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))))
+    (symbol (not (null (memq x *features*))))))
 \f
 ;;;; utilities for two-VALUES predicates
 
index 8758dac..1558149 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.10.10"
+"1.0.10.11"