X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/bb80145308ea388d7c6ed5336c061340e78f66e8..52e2a70f115d79f743314f98420e69f7e5ac62b8:/doc/clang.tex diff --git a/doc/clang.tex b/doc/clang.tex index bd1053f..0806f1d 100644 --- a/doc/clang.tex +++ b/doc/clang.tex @@ -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 @@ -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 @@ -592,13 +597,13 @@ function type is the type of the function's return value. argument name. \end{describe} -\begin{describe}{fun}{argument-name @ @> @} - Return the name of the @, as it was supplied to @|make-argument|. -\end{describe} - -\begin{describe}{fun}{argument-type @ @> @} - Return the type of the @, as it was supplied to @|make-argument|. -\end{describe} +\begin{describe*} + {\dhead{fun}{argument-name @ @> @} + \dhead{fun}{argument-type @ @> @}} + Accessor functions for @|argument| objects. They return the name (for + @|argument-name|) or type (for @|argument-type|) from the object, as passed + to @|make-argument|. +\end{describe*} \begin{describe}{gf} {commentify-argument-name @ @> @} @@ -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: