X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/2c7465aca4457e99441bb44d47da14291d7d779a..d1cf6f0eb28e9f887b7f02d7debd0b363b1ad431:/doc/clang.tex diff --git a/doc/clang.tex b/doc/clang.tex index 52e330d..99ad30a 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 @@ -350,9 +355,11 @@ In Sod, the leaf types are \begin{tabular}[C]{ll} \hlx*{hv} \thd{C type} & \thd{Specifiers} \\ \hlx{vhv} @|void| & @|void| \\ \hlx{v} - @|char| & @|char| \\ \hlx{v} - @|unsigned char| & @|unsigned-char|, @|uchar| \\ \hlx{} - @|signed char| & @|signed-char|, @|schar| \\ \hlx{v} + @|_Bool| & @|bool| \\ \hlx{v} + @|char| & @|char| \\ \hlx{} + @|wchar_t| & @|wchar-t| \\ \hlx{v} + @|signed char| & @|signed-char|, @|schar| \\ \hlx{} + @|unsigned char| & @|unsigned-char|, @|uchar| \\ \hlx{v} @|short| & @|short|, @|signed-short|, @|short-int|, @|signed-short-int| @|sshort| \\ \hlx{} @|unsigned short| & @|unsigned-short|, @|unsigned-short-int|, @@ -365,17 +372,26 @@ In Sod, the leaf types are @|unsigned long| & @|unsigned-long|, @|unsigned-long-int|, @|ulong| \\ \hlx{v} @|long long| & @|long-long|, @|signed-long-long|, - @|long-long-int|, \\ + @|long-long-int|, \\ \hlx{} & \qquad @|signed-long-long-int|, @|llong|, @|sllong| \\ \hlx{v} @|unsigned long long| & @|unsigned-long-long|, @|unsigned-long-long-int|, @|ullong| \\ \hlx{v} + @|size_t| & @|size-t| \\ \hlx{} + @|ptrdiff_t| & @|ptrdiff-t| \\ \hlx{v} @|float| & @|float| \\ \hlx{} - @|double| & @|double| \\ \hlx{v} - @|va_list| & @|va-list| \\ \hlx{v} - @|size_t| & @|size-t| \\ \hlx{v} - @|ptrdiff_t| & @|ptrdiff-t| \\ \hlx*{vh} + @|double| & @|double| \\ \hlx{} + @|long double| & @|long-double| \\ \hlx{v} + @|float _Imaginary| & @|float-imaginary| \\ \hlx{} + @|double _Imaginary|& @|double-imaginary| \\ \hlx{} + @|long double _Imaginary| + & @|long-double-imaginary| \\ \hlx{v} + @|float _Complex| & @|float-complex| \\ \hlx{} + @|double _Complex| & @|double-complex| \\ \hlx{} + @|long double _Complex| + & @|long-double-complex| \\ \hlx{v} + @|va_list| & @|va-list| \\ \hlx*{vh} \end{tabular} \caption{Builtin symbolic type specifiers for simple C types} \label{tab:codegen.c-types.simple} @@ -592,13 +608,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 +727,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 +854,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 +953,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 @ @ @} @@ -927,7 +987,6 @@ Temporary names are represented by objects which implement a simple protocol. \nlret @ @ @} \end{describe} -\relax %%%----- That's all, folks -------------------------------------------------- %%% Local variables: