diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2021-04-02 16:10:04 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2021-04-02 16:13:32 -0700 |
commit | 76c3ac60450fb144bf6cfd0fb4197b91af5a3f87 (patch) | |
tree | e243c625c95625cd3ac7635b9ff764037eb86a73 /src/combinator.lisp | |
parent | fc6d35b5bf33d6a5fcba9c44a769e653fa6712fa (diff) | |
download | consfigurator-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.lisp | 18 |
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) |