X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/blobdiff_plain/1645e4335e58ef3a8f1cafb1834e93760d80d9ae..be01e762d1fd40a88b26f4bdd40f8f9449d79e0a:/src/pset-proto.lisp 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 --------------------------------------------------