src/method-impl.lisp, etc.: Add a `readonly' message property.
[sod] / src / method-proto.lisp
index d2ab761..e72044e 100644 (file)
    will be a list of applicable methods sorted in most-to-least specific
    order."))
 
+(export 'sod-message-receiver-type)
+(defgeneric sod-message-receiver-type (message class)
+  (:documentation
+   "Return the type of the `me' argument in a MESSAGE received by CLASS.
+
+   Typically this will just be `CLASS *' or `const CLASS *'."))
+
 (export 'sod-message-applicable-methods)
 (defgeneric sod-message-applicable-methods (message class)
   (:documentation
   (:documentation
    "Returns true if the effective METHOD is live.
 
-   An effective method is `live' if it should actually have proper method entry
-   functions associated with it and stored in the class vtable.  The other
-   possibility is that the method is `dead', in which case the function
+   An effective method is `live' if it should actually have proper method
+   entry functions associated with it and stored in the class vtable.  The
+   other possibility is that the method is `dead', in which case the function
    pointers in the vtable are left null."))
 
 ;;;--------------------------------------------------------------------------
                          ((keyword-message-p message)
                           (cons (make-argument *sod-key-pointer*
                                                (c-type (* (void :const))))
-                                raw-args))))
+                                raw-args))
+                         (t raw-args)))
         (*keyword-struct-disposition* (if (effective-method-keywords method)
                                           :pointer :null)))
     (codegen-push codegen)
     (ensure-ilayout-var codegen super)
+    (deliver-call codegen :void "SOD__IGNORE" "sod__obj")
     (when (keyword-message-p message)
       (if (eq *keyword-struct-disposition* :null)
          (deliver-call codegen :void "SOD__IGNORE" *sod-key-pointer*)