X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/blobdiff_plain/6ee1970906d33f0b1b2be20e2f8a4521a6ca514f..7b7947024fedb0bb7a0ea3ccb0029f6060de901b:/src/pset-proto.lisp?ds=sidebyside diff --git a/src/pset-proto.lisp b/src/pset-proto.lisp index e16e04c..61793b5 100644 --- a/src/pset-proto.lisp +++ b/src/pset-proto.lisp @@ -317,7 +317,8 @@ (defmacro default-slot-from-property We initialize SLOT in INSTANCE. In full: if PSET contains a property called NAME, then convert it to TYPE, bind the value to PVAR and evaluate CONVERT-FORMS -- these default to just using the property value. If - there's no property, and the slot is named in SLOT-NAMES and currently + there's no property, and DEFAULT-FORMS contains at least one non- + declaration form, and the slot is named in SLOT-NAMES and currently unbound, then evaluate DEFAULT-FORMS and use their value to compute the slot value." @@ -333,7 +334,8 @@ (defmacro default-slot-from-property (setf (slot-value ,instance ,slot) (with-default-error-location (,floc) ,@(or convert-forms `(,pvar)))) - (default-slot (,instance ,slot ,slot-names) - ,@body))))))) + ,@(and body + `((default-slot (,instance ,slot ,slot-names) + ,@body))))))))) ;;;----- That's all, folks --------------------------------------------------