X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/4ee476bc29b80fca2faabb4bd286ca70c98f7a44..f458e64e36509fa8c204f1dbcafff1d3dc059619:/src/pset-impl.lisp diff --git a/src/pset-impl.lisp b/src/pset-impl.lisp index 60674ff..e6986a5 100644 --- a/src/pset-impl.lisp +++ b/src/pset-impl.lisp @@ -74,6 +74,14 @@ (error "Symbol `~A' not external in package `~A'" name (package-name package))))))))) +(let ((truish '("true" "t" "yes" "verily")) + (falsish '("false" "nil" "no" "nowise"))) + (defun truishp (string) + "Convert STRING to a boolean." + (cond ((member string truish :test #'string=) t) + ((member string falsish :test #'string=) nil) + (t (error "Unrecognized boolean value `~A'" string))))) + ;;;-------------------------------------------------------------------------- ;;; Property representation. @@ -114,6 +122,20 @@ ((value symbol) (type (eql :symbol)) (wanted (eql :id))) (frob-identifier (symbol-name value))) +;;; Boolean. + +(defmethod coerce-property-value + ((value symbol) (type (eql :symbol)) (wanted (eql :boolean))) + value) + +(defmethod coerce-property-value + ((value string) (type (eql :id)) (wanted (eql :boolean))) + (truishp value)) + +(defmethod coerce-property-value + ((value integer) (type (eql :int)) (wanted (eql :boolean))) + (not (zerop value))) + ;;; Types. (defmethod coerce-property-value