X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/fcb6c0fb72f7e2211322cfc303ee403bdf3ddd7d..9b53c8fc05a9cad189e941e0160a601523b72433:/doc/clang.tex diff --git a/doc/clang.tex b/doc/clang.tex index bd1053f..87a6b6e 100644 --- a/doc/clang.tex +++ b/doc/clang.tex @@ -138,7 +138,10 @@ type specifier. Type specifiers fit into two syntactic categories. \end{describe} \begin{describe}{mac} - {define-c-type-syntax @ @ @
^* @> @} + {define-c-type-syntax @ @ \\ \ind + @[[ @^* @! @ @]] \\ + @^* \- + \nlret @} Defines the symbol @ as a new type operator. When a list of the form @|(@ @^*)| is used as a type specifier, the @s are bound to fresh variables according to @ (a destructuring @@ -265,7 +268,9 @@ argument lists for methods. This is done by @|c-type-equal-p|. \end{describe} \begin{describe}{mac} - {maybe-in-parens (@ @) @^*} + {maybe-in-parens (@ @) + @^* + @^*} The @ is evaluated, and then the @s are evaluated in sequence within a pretty-printer logical block writing to the stream named by the symbol @. If the @ evaluates to nil, then @@ -711,6 +716,44 @@ function type is the type of the function's return value. \subsection{Parsing C types} \label{sec:clang.c-types.parsing} +\begin{describe}{fun} + {parse-c-type @ + @> @ @ @} +\end{describe} + +\begin{describe}{fun} + {parse-declarator @ @ \&key :kernel :abstractp + \nlret @ @ @} +\end{describe} + +\subsection{Class types} \label{sec:clang.c-types.class} + +\begin{describe}{cls} + {c-class-type (simple-c-type) \&key :class :tag :qualifiers :name} +\end{describe} + +\begin{describe*} + {\dhead{gf}{c-type-class @ @> @} + \dhead{gf}{setf (c-type-class @) @}} +\end{describe*} + +\begin{describe}{fun}{find-class-type @ @> @} +\end{describe} + +\begin{describe}{fun} + {make-class-type @ \&optional @ @> @} +\end{describe} + +\begin{describe}{fun} + {make-class-type @ \&optional @ @> @} +\end{describe} + +\begin{describe}{fun}{find-sod-class @ @> @} +\end{describe} + +\begin{describe}{fun}{record-sod-class @} +\end{describe} + %%%-------------------------------------------------------------------------- \section{Generating C code} \label{sec:clang.codegen} @@ -800,13 +843,17 @@ Temporary names are represented by objects which implement a simple protocol. \end{describe} \begin{describe}{mac} - {definst @ (@ \&key @) (@^*) - @^*} + {definst @ (@ \&key @) (@^*) \\ \ind + @[[ @^* @! @ @]] \\ + @^* \- + \nlret @} \end{describe} \begin{describe}{mac} - {format-compound-statement (@ @ \&optional @) - @^*} + {format-compound-statement + (@ @ \&optional @) \\ \ind + @^* \\ + @^*} \end{describe} \begin{table} @@ -895,8 +942,10 @@ Temporary names are represented by objects which implement a simple protocol. \end{describe} \begin{describe}{mac} - {with-temporary-var (@ @ @) @^* - @> @^*} + {with-temporary-var (@ @ @) \\ \ind + @^* \\ + @^* \- + \nlret @^*} \end{describe} \begin{describe}{fun}{deliver-expr @ @ @} @@ -908,6 +957,25 @@ Temporary names are represented by objects which implement a simple protocol. \begin{describe}{cls}{codegen () \&key :vars :insts (:temp-index 0)} \end{describe} +%%%-------------------------------------------------------------------------- +\section{Literal C code fragments} \label{sec:clang.fragment} + +\begin{describe}{cls}{c-fragment () \&key :location :text} +\end{describe} + +\begin{describe}{gf}{c-fragment-text @ @> @} +\end{describe} + +\begin{describe}{fun} + {scan-c-fragment @ @ + @> @ @ @} +\end{describe} + +\begin{describe}{fun} + {parse-delimited-fragment @ @ @ \&key :keep-end + \nlret @ @ @} +\end{describe} + %%%----- That's all, folks -------------------------------------------------- %%% Local variables: