src/method-{proto,impl}.lisp: Abstract out the receiver type.
[sod] / doc / layout.tex
index 688d693..458ceef 100644 (file)
@@ -7,7 +7,7 @@
 
 %%%----- Licensing notice ---------------------------------------------------
 %%%
-%%% This file is part of the Sensble Object Design, an object system for C.
+%%% This file is part of the Sensible Object Design, an object system for C.
 %%%
 %%% SOD is free software; you can redistribute it and/or modify
 %%% it under the terms of the GNU General Public License as published by
 \end{describe}
 
 \begin{describe}{gf}
+    {find-class-initializer @<slot> @<class> @> @<init-or-nil>}
+\end{describe}
+
+\begin{describe}{gf}{find-slot-initargs @<class> @<slot> @> @<list>}
+\end{describe}
+
+\begin{describe}{gf}
     {compute-effective-slot @<class> @<slot> @> @<effective-slot>}
 \end{describe}
 
 \begin{describe}{gf}{compute-islots @<class> @<subclass> @> @<islots>}
 \end{describe}
 
-\begin{describe}{gf}{vtable-pointer () \&key :class :chain-head :chain-tail}
+\begin{describe}{cls}{vtable-pointer () \&key :class :chain-head :chain-tail}
 \end{describe}
 
 \begin{describe*}
      \dhead{gf}{vtable-pointer-chain-tail @<vtable-pointer> @> @<class>}}
 \end{describe*}
 
-\begin{describe}{gf}{ichain () \&key :class :chain-head :chain-tail :body}
+\begin{describe}{cls}{ichain () \&key :class :chain-head :chain-tail :body}
 \end{describe}
 
 \begin{describe*}
     {\dhead{gf}{ichain-class @<ichain> @> @<class>}
-     \dhead{gf}{ichain-chain-head @<ichain> @> @<class>}
-     \dhead{gf}{ichain-chain-tail @<ichain> @> @<class>}
+     \dhead{gf}{ichain-head @<ichain> @> @<class>}
+     \dhead{gf}{ichain-tail @<ichain> @> @<class>}
      \dhead{gf}{ichain-body @<ichain> @> @<list>}}
 \end{describe*}
 
 \begin{describe}{gf}{compute-ichain @<class> @<chain> @> @<ichain>}
 \end{describe}
 
-\begin{describe}{gf}{ilayout () \&key :class :ichains}
+\begin{describe}{cls}{ilayout () \&key :class :ichains}
 \end{describe}
 
 \begin{describe*}
      \dhead{gf}{ilayout-ichains @<ilayout> @> @<list>}}
 \end{describe*}
 
+\begin{describe}{gf}{sod-class-ilayout @<class> @> @<ilayout>}
+\end{describe}
+
 \begin{describe}{gf}{compute-ilayout @<class> @> @<ilayout>}
 \end{describe}
 
      \dhead{gf}{vtmsgs-entries @<vtmsgs> @> @<list>}}
 \end{describe*}
 
+\begin{describe}{gf}
+    {compute-vtmsgs @<class> @<subclass> @<chain-head> @<chain-tail>
+      @> @<vtmsgs>}
+\end{describe}
+
 \begin{describe}{cls}
     {class-pointer () \&key :class :chain-head :metaclass :meta-chain-head}
 \end{describe}
       @> @<chain-offset>}
 \end{describe}
 
-\begin{describe}{gf}{vtable () \&key :class :chain-head :chain-tail :body}
+\begin{describe}{cls}{vtable () \&key :class :chain-head :chain-tail :body}
 \end{describe}
 
 \begin{describe*}
 \begin{describe}{gf}{compute-vtable @<class> @<chain> @> @<vtable>}
 \end{describe}
 
+\begin{describe}{gf}{sod-class-vtables @<class> @> @<list>}
+\end{describe}
+
 \begin{describe}{gf}{compute-vtables @<class> @> @<list>}
 \end{describe}
 
 %%%--------------------------------------------------------------------------
 \section{Method combination} \label{sec:layout.methods}
 
-\begin{describe}{cls}{effective-method () \&key :message :class}
+\begin{describe}{cls}{effective-method () \&key :message :class :keywords}
 \end{describe}
 
 \begin{describe*}
     {\dhead{gf}{effective-method-message @<method> @> @<message>}
-     \dhead{gf}{effective-method-class @<method> @> @<class>}}
+     \dhead{gf}{effective-method-class @<method> @> @<class>}
+     \dhead{gf}{effective-method-keywords @<method> @> @<list>}}
 \end{describe*}
 
 \begin{describe}{gf}
+    {sod-message-receiver-type @<message> @<class> @> @<c-type>}
+\end{describe}
+
+\begin{describe}{gf}
+    {sod-message-applicable-methods @<message> @<class> @> list}
+\end{describe}
+
+\begin{describe}{gf}
+    {sod-message-keyword-argument-lists @<message> @<class>
+                                        @<direct-methods> @<state>
+      \nlret @<list>}
+\end{describe}
+
+\begin{describe}{fun}
+    {compute-effective-method-keyword-arguments @<message>
+                                                @<class>
+                                                @<direct-methods>
+      \nlret @<list>}
+\end{describe}
+
+\begin{describe}{gf}
+    {sod-message-check-methods @<message> @<class> @<direct-methods>}
+\end{describe}
+
+\begin{describe}{gf}
     {sod-message-effective-method-class @<message> @> @<class>}
 \end{describe}
 
     {compute-sod-effective-method @<message> @<class> @> @<method>}
 \end{describe}
 
+\begin{describe}{gf}{sod-class-effective-methods @<class> @> @<list>}
+\end{describe}
+
 \begin{describe}{gf}{compute-effective-methods @<class> @> @<list>}
 \end{describe}
 
 \begin{describe}{gf}{sod-message-argument-tail @<message> @> @<list>}
 \end{describe}
 
-\begin{describe}{gf}{sod-message-no-varargs-tail @<message> @> @<list>}
-\end{describe}
-
 \begin{describe}{gf}{sod-method-function-type @<method> @> @<c-type>}
 \end{describe}
 
 \begin{describe}{gf}{sod-method-next-method-type @<method> @> @<c-type>}
 \end{describe}
 
+\begin{describe}{gf}{sod-method-description @<method> @> @<string>}
+\end{describe}
+
 \begin{describe}{gf}{sod-method-function-name @<method> @> @<string>}
 \end{describe}
 
 \begin{describe}{fun}{varargs-message-p @<message> @> @<generalized-boolean>}
 \end{describe}
 
+\begin{describe}{fun}{keyword-message-p @<message> @> @<generalized-boolean>}
+\end{describe}
+
 \begin{describe}{gf}{method-entry-function-type @<entry> @> @<c-type>}
 \end{describe}
 
     {effective-method-basic-argument-names @<method> @> @<list>}
 \end{describe}
 
+\begin{describe}{gf}
+    {effective-method-live-p @<method> @> @<generalized-boolean>}
+\end{describe}
 
 
 \begin{describe}{cls}
-    {method-codegen (codegen) \\ \ind
+    {method-codegen (codegen)                                   \\ \ind
       \&key :vars :insts :temp-index
             :message :class :method :target}
 \end{describe}
     {\dhead{cls}{convert-to-ilayout-inst (inst)}
      \dhead{fun}
        {make-convert-to-ilayout-inst @<class> @<chain-head> @<expr>}}
+  \def\makelabels#1#2{%
+    #1{gf}{inst-class}[#2]#1{gf}{inst-chain-head}[#2]%
+    \descindex{gf}{inst-expr}[#2]%
+  }
+  \makelabels{\desclabel}{|(}
+
   \begin{prog}
     SOD_ILAYOUT(@<class>, @<chain-head-nick>, @<expr>)
   \end{prog}
+
+  \makelabels{\descindex}{|)}
 \end{describe*}
 
 
 \end{describe}
 
 \begin{describe}{cls}
-    {daemon-direct-method (basic-direct-method) \\ \ind
+    {daemon-direct-method (basic-direct-method)                 \\ \ind
       \&key :message :location :class :type :body :role}
 \end{describe}
 
 \begin{describe}{cls}
-    {delegating-direct-method (basic-direct-method) \\ \ind
+    {delegating-direct-method (basic-direct-method)             \\ \ind
       \&key :message :location :class :type :body :role}
 \end{describe}
 
 \begin{describe}{cls}
-    {basic-effective-method (effective-method) \\ \ind
+    {basic-effective-method (effective-method)                  \\ \ind
       \&key :message :class :around-methods :before-methods :after-methods}
 \end{describe}
 
 \end{describe*}
 
 \begin{describe}{cls}
-    {simple-effective-method (basic-effective-method) \\ \ind
+    {simple-effective-method (basic-effective-method)           \\ \ind
       \&key :message :class
             :around-methods :before-methods :after-methods :primary-methods}
 \end{describe}
 \end{describe}
 
 \begin{describe}{cls}
-    {standard-effective-method (simple-effective-method) \\ \ind
+    {standard-effective-method (simple-effective-method)        \\ \ind
       \&key :message :class
             :around-methods :before-methods :after-methods :primary-methods}
 \end{describe}
       \&key :name :location :class :type :combination}
 \end{describe}
 
+\begin{describe*}
+    {\dhead{gf}{sod-message-combination @<message> @> @<keyword>}
+     \dhead{gf}{sod-message-kernel-function @<message> @> @<function>}}
+\end{describe*}
+
 \begin{describe}{gf}
     {aggregating-message-properties @<message> @<combination> @> @<plist>}
 \end{describe}
 
 \begin{describe}{gf}
     {compute-aggregating-message-kernel
-      \=@<message> @<combination> @<target> \+ \\
+      \=@<message> @<combination> @<target>                   \+\\
         @<methods> @<arg-names> \&key}
 \end{describe}
 
 \end{describe}
 
 \begin{describe}{cls}
-     {aggregating-effective-method (simple-effective-method) \\ \ind
+     {aggregating-effective-method (simple-effective-method)    \\ \ind
       \&key :message :class
             :around-methods :before-methods :after-methods :primary-methods}
 \end{describe}
 
 \begin{describe}{mac}
-    {define-aggregating-method-combination @<combination> \\ \ind\ind
+    {define-aggregating-method-combination @<combination>       \\ \ind\ind
         ((@<var-name>^*)
          @[[ :codegen @<codegen-var> @!
-             :methods @<methods-var> @]]) \- \\
+             :methods @<methods-var> @]])                     \-\\
       @[[ \=:properties (@{ (@{ @<name> @! (@[@<keyword>@] @<name>) @}
                              @<c-type>
                              @[@<default>
-                               @[@<suppliedp-var>@]@]) @}^*) @! \+ \\
-            :return-type @<c-type> @! \\
+                               @[@<suppliedp-var>@]@]) @}^*) @! \+\\
+            :return-type @<c-type> @!                           \\
             :around @<around-func> @!
             :first-method @<first-method-func> @!
             :method @<method-func> @]]}