aboutsummaryrefslogtreecommitdiff
path: root/src/combinator.lisp
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2021-07-08 23:34:34 -0700
committerSean Whitton <spwhitton@spwhitton.name>2021-07-10 21:31:38 -0700
commit281abdd3c1768bf75d5c23b52ad77c67052750fa (patch)
tree84ca8db6d81a0b97932f5486470b88f36c2619eb /src/combinator.lisp
parent171f39f340f1799060968c608cf2c096f3eb3aee (diff)
downloadconsfigurator-281abdd3c1768bf75d5c23b52ad77c67052750fa.tar.gz
ON-CHANGE: use ESEQPROPS to sequence the secondary propapps
This means that we get APPLY-AND-PRINT's output when there are multiple secondary propapps. Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
Diffstat (limited to 'src/combinator.lisp')
-rw-r--r--src/combinator.lisp18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/combinator.lisp b/src/combinator.lisp
index 4814f6f..ffd2828 100644
--- a/src/combinator.lisp
+++ b/src/combinator.lisp
@@ -229,27 +229,27 @@ apply the elements of REQUIREMENTS in reverse order."
(defmacro on-change (propapp &body on-change)
"If applying PROPAPP makes a change, also apply each of of the propapps
ON-CHANGE in order."
- `(on-change* ,propapp ,@on-change))
+ `(on-change*
+ ,propapp
+ ,(if (cdr on-change) `(eseqprops ,@on-change) (car on-change))))
-(define-function-property-combinator on-change* (propapp &rest propapps)
- (:retprop :type (collapse-types (propapptype propapp)
- (mapcar #'propapptype propapps))
+(define-function-property-combinator on-change* (propapp on-change)
+ (:retprop :type
+ (collapse-types (propapptype propapp) (propapptype on-change))
:desc (get (car propapp) 'desc)
:hostattrs (lambda (&rest args)
(apply #'propattrs (car propapp) args)
- (mapc #'propappattrs propapps))
+ (propappattrs on-change))
:apply (lambda (&rest args)
(if (eql :no-change
(propappapply (cons (car propapp) args)))
:no-change
- (dolist (propapp propapps)
- (propappapply propapp))))
+ (propappapply on-change)))
:unapply (lambda (&rest args)
(if (eql :no-change
(propappunapply (cons (car propapp) args)))
:no-change
- (dolist (propapp propapps)
- (propappapply propapp))))
+ (propappapply on-change)))
:args (cdr propapp)))
(defmacro as (user &body properties)