chiark / gitweb /
src/method-impl.lisp, etc.: Add a `readonly' message property.
[sod] / src / method-impl.lisp
index be33ecd38177d4b74dc27c8b0b309d8f3d9a742f..c1e1b248f3f19981880ff22be25f02ccd93423c1 100644 (file)
@@ -62,7 +62,8 @@ (defmethod sod-message-method-class
 
 (defmethod sod-message-receiver-type ((message sod-message)
                                      (class sod-class))
-  (c-type (* (class class))))
+  (c-type (* (class class
+                   (and (sod-message-readonly-p message) :const)))))
 
 (export 'simple-message)
 (defclass simple-message (basic-message)
@@ -684,7 +685,10 @@ (defmethod compute-method-entry-functions ((method basic-effective-method))
 
         ;; Effective method function details.
         (emf-name (effective-method-function-name method))
-        (ilayout-type (c-type (* (struct (ilayout-struct-tag class)))))
+        (ilayout-type (c-type (* (struct (ilayout-struct-tag class)
+                                         (and (sod-message-readonly-p
+                                               message)
+                                              :const)))))
         (emf-type (c-type (fun (lisp return-type)
                                ("sod__obj" (lisp ilayout-type))
                                . entry-args))))