aboutsummaryrefslogtreecommitdiff
path: root/src/combinator.lisp
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2021-04-02 16:10:04 -0700
committerSean Whitton <spwhitton@spwhitton.name>2021-04-02 16:13:32 -0700
commit76c3ac60450fb144bf6cfd0fb4197b91af5a3f87 (patch)
treee243c625c95625cd3ac7635b9ff764037eb86a73 /src/combinator.lisp
parentfc6d35b5bf33d6a5fcba9c44a769e653fa6712fa (diff)
downloadconsfigurator-76c3ac60450fb144bf6cfd0fb4197b91af5a3f87.tar.gz
factor out DEFINE-CHOOSING-PROPERTY-COMBINATOR
Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
Diffstat (limited to 'src/combinator.lisp')
-rw-r--r--src/combinator.lisp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/combinator.lisp b/src/combinator.lisp
index ee70d62..3c1d21d 100644
--- a/src/combinator.lisp
+++ b/src/combinator.lisp
@@ -33,6 +33,24 @@
(return-from ,name (list* psym args)))))
,@forms))))
+(defmacro define-choosing-property-combinator
+ (name lambda-list &key type choose)
+ `(define-function-property-combinator ,name ,lambda-list
+ (flet ((choose-propapp () ,choose))
+ (:retprop :type ,type
+ :desc (lambda (&rest args)
+ (declare (ignore args))
+ (propappdesc (choose-propapp)))
+ :hostattrs (lambda (&rest args)
+ (declare (ignore args))
+ (propappattrs (choose-propapp)))
+ :apply (lambda (&rest args)
+ (declare (ignore args))
+ (propappapply (choose-propapp)))
+ :unapply (lambda (&rest args)
+ (declare (ignore args))
+ (propappunapply (choose-propapp)))))))
+
(defmacro with-skip-failed-changes (&body forms)
`(handler-bind ((failed-change
(lambda (c)