\begin{table}
\begin{tabular}[C]{*2{>{\codeface}l}l} \hlx*{hv}
- \thd{\textbf{C name}} & \thd{\textbf{Lisp name}} \\ \hlx{vhv}
- _Atomic & :atomic \\
- const & :const \\
- restrict & :restrict \\
- volatile & :volatile \\ \hlx*{vh}
+ \thd{C name} & \thd{Lisp name} \\ \hlx{vhv}
+ _Atomic & :atomic \\
+ const & :const \\
+ restrict & :restrict \\
+ volatile & :volatile \\ \hlx*{vh}
\end{tabular}
\caption{C and Lisp qualifier names} \label{tab:clang.ctypes.qual}
\end{table}
Two simple type objects are equal if and only if they have @|string=| names
and matching qualifiers.
- \def\x#1{\desclabel{const}{#1}}
- \x{c-type-bool} \x{c-type-char} \x{c-type-wchar-t} \x{c-type-signed-char}
- \x{c-type-unsigned-char} \x{c-type-short} \x{c-type-unsigned-short}
- \x{c-type-int} \x{c-type-unsigned} \x{c-type-long} \x{c-type-unsigned-long}
- \x{c-type-long-long} \x{c-type-unsigned-long-long} \x{c-type-size-t}
- \x{c-type-ptrdiff-t} \x{c-type-float} \x{c-type-double}
- \x{c-type-long-double} \x{c-type-float-imaginary}
- \x{c-type-double-imaginary} \x{c-type-long-double-imaginary}
- \x{c-type-float-complex} \x{c-type-double-complex}
- \x{c-type-long-double-complex} \x{c-type-va-list} \x{c-type-void}
+ \def\x#1{\desclabel{const}{c-type-#1}}
+ \x{bool} \x{char} \x{wchar-t} \x{signed-char} \x{unsigned-char} \x{short}
+ \x{unsigned-short} \x{int} \x{unsigned} \x{long} \x{unsigned-long}
+ \x{long-long} \x{unsigned-long-long} \x{size-t} \x{ptrdiff-t} \x{float}
+ \x{double} \x{long-double} \x{float-imaginary} \x{double-imaginary}
+ \x{long-double-imaginary} \x{float-complex} \x{double-complex}
+ \x{long-double-complex} \x{va-list} \x{void}
+ \crossproduct\x{{{int}{uint}}{{}{-least}{-fast}}{{8}{16}{32}{64}}{{-t}}}
+ \crossproduct\x{{{int}{uint}}{{ptr}{max}}{{-t}}}
+
A number of symbolic type specifiers for builtin types are predefined as
shown in \xref{tab:codegen.c-types.simple}. These are all defined as if by
@|define-simple-c-type|, so can be used to construct qualified types.
@|ullong| \\ \hlx{v}
@|size_t| & @|size-t| \\ \hlx{}
@|ptrdiff_t| & @|ptrdiff-t| \\ \hlx{v}
+ @|int$n$_t| & @|int$n$-t|
+ (for $n \in \{ @|8|, @|16|, @|32|, @|64| \}$)
+ \\ \hlx{}
+ @|uint$n$_t| & @|uint$n$-t| \\ \hlx{}
+ @|int_least$n$_t| & @|int_least$n$-t| \\ \hlx{}
+ @|uint_least$n$_t| & @|uint_least$n$-t| \\ \hlx{}
+ @|int_fast$n$_t| & @|int_fast$n$-t| \\ \hlx{}
+ @|uint_fast$n$_t| & @|uint_fast$n$-t| \\ \hlx{v}
+ @|intptr_t| & @|intptr-t| \\ \hlx{}
+ @|uintptr_t| & @|uintptr-t| \\ \hlx{}
+ @|intmax_t| & @|intmax-t| \\ \hlx{}
+ @|uintmax_t| & @|uintmax-t| \\ \hlx{v}
@|float| & @|float| \\ \hlx{}
@|double| & @|double| \\ \hlx{}
@|long double| & @|long-double| \\ \hlx{v}
\begin{table}
\begin{tabular}[C]{*2{>{\codeface}l}} \hlx*{hv}
- \thd{\textbf{Class}} & \thd{\textbf{Name format}} \\ \hlx{vhv}
- temporary-name & @<tag> \\
- temporary-argument & sod__a@<tag> \\
- temporary-function & sod__f@<tag> \\
- temporary-variable & sod__v@<tag> \\ \hlx*{vh}
+ \thd{Class} & \thd{Name format} \\ \hlx{vhv}
+ temporary-name & @<tag> \\
+ temporary-argument & sod__a@<tag> \\
+ temporary-function & sod__f@<tag> \\
+ temporary-variable & sod__v@<tag> \\ \hlx*{vh}
\end{tabular}
\caption{Temporary name formats}
\label{tab:codegen.codegen.temps-format}
\def\x#1{\desclabel{var}{#1}}
\x{*sod-ap*} \x{*sod-master-ap*} \x{*null-pointer*}
\begin{tabular}[C]{*2{>{\codeface}l}} \hlx*{hv}
- \thd{\textbf{Variable}} & \thd{\textbf{Name format}} \\ \hlx{vhv}
- {}*sod-ap* & sod__ap \\
- {}*sod-master-ap* & sod__master_ap \\
- {}*null-pointer* & NULL \\ \hlx*{vh}
+ \thd{Variable} & \thd{Name format} \\ \hlx{vhv}
+ {}*sod-ap* & sod__ap \\
+ {}*sod-master-ap* & sod__master_ap \\
+ {}*null-pointer* & NULL \\ \hlx*{vh}
\end{tabular}
\caption{Well-known temporary names}
\label{tab:codegen.codegen.well-known-temps}
\begin{table}
\begin{tabular}[C]{ll>{\codeface}l} \hlx*{hv}
\thd{Class name} &
- \thd{Arguments} &
- \thd{Output format} \\ \hlx{vhv}
+ \thd{Arguments} &
+ \thd{Output format}\\ \hlx{vhv}
@|var| & @<name> @<type> @|\&optional| @<init>
& @<type> @<name> @[= @<init>@];
\\ \hlx{v}
\begin{describe*}
{\dhead*{cls}{@<code>-inst (inst) \&key \dots}
- \dhead*{fn}{make-@<code>-inst \dots}
+ \dhead*{fun}{make-@<code>-inst \dots}
\dhead*{gf}{inst-@<slot> @<inst> @> @<value>}}
\def\instclass#1#2#3{%
#1{cls}{#3-inst}[#2]%
\begin{describe}{cls}{c-fragment () \&key :location :text}
\end{describe}
-\begin{describe}{gf}{c-fragment-text @<fragment> @> @<string>}
-\end{describe}
+\begin{describe*}
+ {\dhead{gf}{c-fragment-text @<fragment> @> @<string>}
+ \dhead{meth}{c-fragment}
+ {file-location (@<fragment> c-fragment) @> @<floc>}}
+\end{describe*}
\begin{describe}{fun}
{scan-c-fragment @<scanner> @<end-chars>