src/method-impl.lisp, etc.: Add a `readonly' message property.
[sod] / src / class-make-impl.lisp
index 4785d9c..1da8bac 100644 (file)
     ((class sod-class) name (slot sod-slot) pset &key location)
   (with-slots (initargs) class
     (with-slots ((type %type)) slot
-      (push (make-instance (get-property pset :initarg-class :symbol
-                                        'sod-slot-initarg)
-                          :location (file-location location)
-                          :class class :name name :type type :slot slot)
-           initargs))))
+      (setf initargs
+           (append initargs
+                   (cons (make-instance (get-property pset :initarg-class
+                                                      :symbol
+                                                      'sod-slot-initarg)
+                                        :location (file-location location)
+                                        :class class :name name
+                                        :type type :slot slot)
+                         nil))))))
 
 (defmethod sod-initarg-default ((initarg sod-initarg)) nil)
 
 
 (defmethod shared-initialize :after
     ((message sod-message) slot-names &key pset)
-  (declare (ignore slot-names pset))
   (with-slots ((type %type)) message
-    (check-message-type message type)))
+    (check-message-type message type))
+  (default-slot-from-property (message 'readonlyp slot-names)
+      (pset :readonly :boolean)
+    nil))
 
 (defmethod check-message-type ((message sod-message) (type c-function-type))
   nil)