chiark / gitweb /
Static instance support.
[sod] / doc / output.tex
index 22d8552ca4c1db7ed1ca70ec3329cf80748f92d3..1615119b64a4e6842ed60077e1f69bc2dc48186a 100644 (file)
@@ -414,6 +414,18 @@ The following notes may be helpful.
   %
   (:classes :end)                                               \\ \hlx{v/}
   %
+  (:static-instances :start)    & static-instance, :h
+        & \begin{nprog} \banner{Public static instances} \\ \end{nprog}
+                                                                \\*\hlx{v}
+  :static-instances             & static-instance, :h
+        & \begin{nprog}
+            extern $[@"const"]$ struct @<class>{}__ilayout
+              @<inst>{}__instance;                              \\
+            \#define @<inst> (\&@<inst>{}__instance.@<h>.@<c>)
+          \end{nprog}                                           \\*
+  (:static-instances :end)      & static-instance, :h
+        &                                                       \\ \hlx{v/}
+  %
   (:user :start)                                                \\*
   :user                                                         \\*
   (:user :end)                                                  \\ \hlx{v/}
@@ -464,6 +476,39 @@ The following notes may be helpful.
   :early                                                        \\*
   (:early-user :end)                                            \\ \hlx{v/}
   %
+  (:static-instances :start)    & static-instance, :c
+        & \begin{nprog} \banner{Static instance definitions} \\ \end{nprog}
+                                                                \\*\hlx{v}
+  (:static-instances :decls)    & static-instance, :c
+        & \begin{nprog}
+            /* Forward declarations. */                         \\+
+            static $[@"const"]$ struct @<class>{}__ilayout
+              @<inst>{}__instance;                              \\
+            \#define @<inst> (\&@<inst>{}__instance.@<h>.@<c>)
+          \end{nprog}                                           \\*
+  (:static-instances :gap)      & static-instance, :c
+        &                                                       \\
+  (@<inst> :start)              & sod-class, 'static-instance
+        & \begin{nprog}
+            /* Static instance `@<inst>'. */                    \\
+            $[@"static"]$ $[@"const"]$ struct @<inst>{}__ilayout
+              @<inst>{}__instance = \{
+          \end{nprog}                                           \\*\hlx{v}
+  (@<inst> :chain @<chain-head> :start) & ichain, 'static-instance
+        & \quad \{ \{ /* @<n> ichain */                         \\*
+  (@<inst> :vtable @<chain-head>) & vtable-pointer, 'static-instance
+        & \slotlabel{3}{_vt} \&@<class>{}__vtable_@<h>.@<c>,    \\*
+  (@<inst> :slots @<super> :start) & islots, 'static-instance
+        & \quad\quad \{ /* Class @<super> */                    \\*
+  (@<inst> :slots @<super>)     & effective-slot, 'static-instance
+        & \slotlabel{4}{@<slot>} @<value>,                      \\*
+  (@<inst> :slots @<super> :end) & islots, 'static-instance
+        & \quad\quad \},                                        \\*
+  (@<inst> :chain @<chain-head> :end) & ichain, 'static-instance
+        & \quad \} \},                                          \\*
+  (@<inst> :end)                & sod-class, 'static-instance
+        & \begin{nprog} \}; \\ \end{nprog}                      \\ \hlx{v/}
+  %
   (:classes :start)                                             \\*\hlx{v}
   %
   (@<class> :banner)            & sod-class, :c
@@ -686,6 +731,17 @@ The following notes may be helpful.
                   \>@<in-names> @<out-names> @<stream>}}
 \end{describe*}
 
+\begin{describe}{var}{*static-instance*}
+\end{describe}
+
+\begin{describe}{gf}{declare-static-instance @<static-instance> @<stream>}
+\end{describe}
+
+\begin{describe}{gf}
+    {output-static-instance-initializer @<static-instance> @<effective-slot>
+                                        @<stream>}
+\end{describe}
+
 %%%----- That's all, folks --------------------------------------------------
 
 %%% Local variables: