From 281abdd3c1768bf75d5c23b52ad77c67052750fa Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Thu, 8 Jul 2021 23:34:34 -0700 Subject: 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 --- src/combinator.lisp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/combinator.lisp') 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) -- cgit v1.2.3