chiark / gitweb /
src/class-*.lisp: Improve metaclass selection.
[sod] / doc / meta.tex
index 280a21c35f57e308aac653864f0acb135ab2867f..25236427555e4c8a18344e9ef08fc66c4ea018e7 100644 (file)
 \section{Base metaobject classes} \label{sec:meta.classes}
 
 \begin{describe}{cls}
-    {sod-class () \\ \ind
-      \&key \=:name :nick :location :pset \+ \\
-              :superclasses :link :metaclass \\
+    {sod-class ()                                               \\ \ind
+      \&key \=:name :nick :location :pset                     \+\\
+              :superclasses :link :metaclass                    \\
               :slots :instance-initializers :class-initializers \\
+              :initargs :initfrags :tearfrags                   \\
               :messages :methods}
 \end{describe}
 
      \dhead{gf}{setf (sod-class-instance-initializers @<class>) @<list>}
      \dhead{gf}{sod-class-class-initializers @<class> @> @<list>}
      \dhead{gf}{setf (sod-class-class-initializers @<class>) @<list>}
+     \dhead{gf}{sod-class-initargs @<class> @> @<list>}
+     \dhead{gf}{setf (sod-class-initargs @<class>) @<list>}
+     \dhead{gf}{sod-class-initfrags @<class> @> @<list>}
+     \dhead{gf}{setf (sod-class-initfrags @<class>) @<list>}
+     \dhead{gf}{sod-class-tearfrags @<class> @> @<list>}
+     \dhead{gf}{setf (sod-class-tearfrags @<class>) @<list>}
      \dhead{gf}{sod-class-messages @<class> @> @<list>}
      \dhead{gf}{setf (sod-class-messages @<class>) @<list>}
      \dhead{gf}{sod-class-methods @<class> @> @<list>}
     {find-superclass-by-nick @<class> @<nick> @> @<superclass>}
 \end{describe}
 
+\begin{describe}{ty}{inheritance-path-reporter-state}
+\end{describe}
+
+\begin{describe}{fun}{make-inheritance-path-reporter-state @> @<state>}
+\end{describe}
+
+\begin{describe}{fun}{report-inheritance-path @<state> @<super>}
+\end{describe}
+
+\begin{describe}{fun}
+    {select-minimal-class-property
+        \=@<supers> @<key> @<order> @<default> @<what> \\
+        \>\&key :present :allow-empty
+      \nlret @<object>}
+\end{describe}
+
 \begin{describe}{fun}
     {sod-subclass-p @<class-a> @<class-b> @> @<generalized-boolean>}
 \end{describe}
 \end{describe}
 
 \begin{describe}{cls}
-    {sod-class-slot (sod-slot) \\ \ind
+    {sod-class-slot (sod-slot)                                  \\ \ind
       \&key :name :location :pset :class :type
             :initializer-function :prepare-function}
 \end{describe}
 
 \begin{describe*}
     {\dhead{cls}{sod-initializer ()
-       \&key :slot :location :class :value-kind :value-form}
+       \&key :slot :location :class :value}
      \dhead{cls}{sod-instance-initializer (sod-initializer)
-       \&key :slot :location :class :value-kind :value-form}
+       \&key :slot :location :class :value}
      \dhead{cls}{sod-class-initializer (sod-initializer)
-       \&key :slot :location :class :value-kind :value-form}}
+       \&key :slot :location :class :value}}
 \end{describe*}
 
 \begin{describe*}
     {\dhead{gf}{sod-initializer-slot @<init> @> @<slot>}
-     \dhead{gf}{sod-initializer-value-kind @<init> @> @<kind>}
-     \dhead{gf}{sod-initializer-value-form @<init> @> @<fragment>}}
+     \dhead{gf}{sod-initializer-value @<init> @> @<fragment>}}
 \end{describe*}
 
 \begin{describe*}
     {\dhead{gf}
-      {make-slot-instance-initializer \=@<class> @<nick> @<name>
-                                        @<value-kind> @<value-form> \+ \\
-                                        @<pset> \&optional @<floc> \-
+      {make-slot-instance-initializer
+          \=@<class> @<nick> @<name> @<value> @<pset> \&optional @<floc>
         \nlret @<init>}
      \dhead{gf}
-      {make-slot-class-initializer \=@<class> @<nick> @<name>
-                                     @<value-kind> @<value-form> \+ \\
-                                     @<pset> \&optional @<floc> \-
+      {make-slot-class-initializer
+          \=@<class> @<nick> @<name> @<value> @<pset> \&optional @<floc>
         \nlret @<init>}}
 \end{describe*}
 
 \begin{describe}{gf}
-    {make-sod-initializer-using-slot \=@<class> @<slot> @<init-class>
-                                       @<value-kind> @<value-form> \+ \\
-                                       @<pset> \&optional @<floc> \-
+    {make-sod-initializer-using-slot
+        \=@<class> @<slot> @<init-class> @<value> @<pset> \&optional @<floc>
       \nlret @<init>}
 \end{describe}
 
+\begin{describe}{cls}{sod-initarg () \&key :class :location :name :type}
+\end{describe}
+
+\begin{describe*}
+    {\dhead{gf}{sod-initarg-class @<initarg> @> @<class>}
+     \dhead{gf}{sod-initarg-name @<initarg> @> @<string>}
+     \dhead{gf}{sod-initarg-type @<initarg> @> @<c-type>}}
+\end{describe*}
+
+\begin{describe}{cls}
+    {sod-user-initarg (sod-initarg)
+      \&key :class :location :name :type :default}
+\end{describe}
+
+\begin{describe}{gf}
+     {make-sod-user-initarg @<class> @<name> @<type> @<pset>
+                            \&optional @<default> @<floc>}
+\end{describe}
+
+\begin{describe}{gf}{sod-initarg-default @<initarg> @> @<default>}
+\end{describe}
+
+\begin{describe}{cls}
+    {sod-slot-initarg (sod-initarg)
+      \&key :class :location :name :type :slot}
+\end{describe}
+
+\begin{describe}{gf}{sod-initarg-slot @<initarg> @> @<slot>}
+\end{describe}
+
+\begin{describe}{gf}
+    {make-sod-slot-initarg @<class> @<name> @<nick> @<slot-name> @<pset>
+                           \&optional @<floc>}
+\end{describe}
+
+\begin{describe}{gf}
+    {make-sod-slot-initarg @<class> @<name> @<nick> @<slot-name> @<pset>
+                           \&optional @<floc>}
+\end{describe}
+
+\begin{describe}{gf}
+    {make-sod-slot-initarg-using-slot @<class> @<name> @<slot> @<pset>
+                                      \&optional @<floc>}
+\end{describe}
+
+\begin{describe*}
+    {\dhead{gf}{make-sod-class-initfrag @<class> @<frag> @<pset>
+                                        \&optional @<floc>}
+     \dhead{gf}{make-sod-class-tearfrag @<class> @<frag> @<pset>
+                                        \&optional @<floc>}}
+\end{describe*}
+
 \begin{describe}{cls}{sod-message () \&key :name :location :class :type}
 \end{describe}
 
 \end{describe*}
 
 \begin{describe}{gf}
-    {make-sod-method \=@<class> @<nick> @<name> @<type> @<body> \+ \\
-                       @<pset> \&optional @<floc> \-
+    {make-sod-method
+        \=@<class> @<nick> @<name> @<type> @<body>            \+\\
+          @<pset> \&optional @<floc>                          \-
       \nlret @<method>}
 \end{describe}
 
 \begin{describe}{gf}
-    {make-sod-method-using-message \=@<message> @<class>
-                                     @<type> @<body> \+ \\
-                                     @<pset> \&optional @<floc> \-
+    {make-sod-method-using-message
+        \=@<message> @<class>
+          @<type> @<body>                                     \+\\
+          @<pset> \&optional @<floc>                          \-
       \nlret @<method>}
 \end{describe}
 
 \section{Class finalization protocol} \label{sec:meta.finalization}
 
 \begin{describe*}
-    {\dhead{gf}{sod-class-precedence-list <class> @> @<list>}
+    {\dhead{gf}{sod-class-precedence-list @<class> @> @<list>}
      \dhead{gf}{sod-class-type @<class> @> @<c-type>}
      \dhead{gf}{sod-class-chain-head @<class> @> @<class>}
      \dhead{gf}{sod-class-chain @<class> @> @<list>}
 \begin{describe}{gf}{compute-cpl @<class> @> @<list>}
 \end{describe}
 
+\begin{describe}{fun}{merge-class-lists @<lists> @<pick> @> @<list>}
+\end{describe}
+
 \begin{describe}{gf}{compute-chains @<class> @> @<list>}
 \end{describe}
 
 \end{describe}
 
 \begin{describe}{gf}{finalize-sod-class @<class>}
+  \begin{describe}{meth}{finalize-sod-class (@<class> sod-class)}
+  \end{describe}
+  \begin{describe}{ar-meth}{finalize-sod-class (@<class> sod-class)}
+  \end{describe}
 \end{describe}
 
 \begin{describe}{fun}{clos-cpl @<class> @> @<list>}