not specified, clients may still not rely on receiving fresh objects.
A convenient S-expression notation is provided by the
not specified, clients may still not rely on receiving fresh objects.
A convenient S-expression notation is provided by the
for corresponding use of the various constructor functions, and therefore
interns type objects in the same manner. The syntax accepted by the macro
for corresponding use of the various constructor functions, and therefore
interns type objects in the same manner. The syntax accepted by the macro
-can be extended in order to support new classes: see \descref{defctype}{mac},
-\descref{c-type-alias}{mac} and \descref{define-c-type-syntax}{mac}.
+can be extended in order to support new classes: see \descref{mac}{defctype},
+\descref{mac}{c-type-alias} and \descref{mac}{define-c-type-syntax}.
The descriptions of each of the various classes include descriptions of the
initargs which may be passed to @|make-instance| when constructing a new
The descriptions of each of the various classes include descriptions of the
initargs which may be passed to @|make-instance| when constructing a new
\begin{describe}{gf}{expand-c-type-spec @<type-spec> @> @<form>}
Returns the Lisp form that @|(c-type @<type-spec>)| would expand into.
\begin{describe}{gf}{expand-c-type-spec @<type-spec> @> @<form>}
Returns the Lisp form that @|(c-type @<type-spec>)| would expand into.
A default primary method for @|c-type-equal-p| is defined. It simply
returns @|nil|. This way, methods can specialize on both arguments
without fear that a call will fail because no methods are applicable.
\end{describe}
A default primary method for @|c-type-equal-p| is defined. It simply
returns @|nil|. This way, methods can specialize on both arguments
without fear that a call will fail because no methods are applicable.
\end{describe}
A default around-method for @|c-type-equal-p| is defined. It returns
true if @<c-type>_1 and @<c-type>_2 are @|eql|; otherwise it delegates to
the primary methods. Since several common kinds of C types are interned,
A default around-method for @|c-type-equal-p| is defined. It returns
true if @<c-type>_1 and @<c-type>_2 are @|eql|; otherwise it delegates to
the primary methods. Since several common kinds of C types are interned,
directly attached. If the @<kernel> function intends to provide its own
additional declarator operators, it should check the @<priority> in order
to determine whether parentheses are necessary. See also the
directly attached. If the @<kernel> function intends to provide its own
additional declarator operators, it should check the @<priority> in order
to determine whether parentheses are necessary. See also the
The @<spacep> argument indicates whether a space needs to be printed in
order to separate the declarator from the declaration specifiers. A kernel
which contains an identifier should insert a space before the identifier
when @<spacep> is non-nil. An `empty' kernel, as found in an abstract
declarator (one that specifies no name), looks more pleasing without a
The @<spacep> argument indicates whether a space needs to be printed in
order to separate the declarator from the declaration specifiers. A kernel
which contains an identifier should insert a space before the identifier
when @<spacep> is non-nil. An `empty' kernel, as found in an abstract
declarator (one that specifies no name), looks more pleasing without a
Every concrete subclass of @|c-type| is expected to provide a primary
method on this function. There is no default primary method.
Every concrete subclass of @|c-type| is expected to provide a primary
method on this function. There is no default primary method.
A default around method is defined on @|pprint-c-type| which `canonifies'
non-function @<kernel> arguments. In particular:
\begin{itemize}
A default around method is defined on @|pprint-c-type| which `canonifies'
non-function @<kernel> arguments. In particular:
\begin{itemize}
The default behaviour, on output, is to convert keywords to lowercase and
hope for the best: special cases can be dealt with by adding appropriate
The default behaviour, on output, is to convert keywords to lowercase and
hope for the best: special cases can be dealt with by adding appropriate
\begin{describe}{cls}{qualifiable-c-type (c-type) \&key :qualifiers}
The class @|qualifiable-c-type| describes C types which can bear
\begin{describe}{cls}{qualifiable-c-type (c-type) \&key :qualifiers}
The class @|qualifiable-c-type| describes C types which can bear
methods exist for qualifier keywords which need special handling, such as
@|:atomic|; they are not listed here explicitly.
methods exist for qualifier keywords which need special handling, such as
@|:atomic|; they are not listed here explicitly.
Returns the @<keyword>'s print-name, in lower case. This is sufficient
for the standard qualifiers @|:const|, @|:restrict|, and @|:volatile|.
\end{describe}
Returns the @<keyword>'s print-name, in lower case. This is sufficient
for the standard qualifiers @|:const|, @|:restrict|, and @|:volatile|.
\end{describe}
@|c-type-@<name>| is defined, for the first @<name> only, and initialized
with the newly constructed C type object.
@|c-type-@<name>| is defined, for the first @<name> only, and initialized
with the newly constructed C type object.
\begin{describe}{fun}
{find-simple-c-type @<string> @> @{ @<simple-c-type> @! @|nil| @}}
If @<string> is the name of a simple C type, as established by the
\begin{describe}{fun}
{find-simple-c-type @<string> @> @{ @<simple-c-type> @! @|nil| @}}
If @<string> is the name of a simple C type, as established by the
- keyword-argument list (e.g., in a \descref{c-keyword-function-type}
- [object]{cls}), and the @<default> value is provided and non-nil, then its
+ keyword-argument list (e.g., in a \descref{cls}{c-keyword-function-type}
+ [object]), and the @<default> value is provided and non-nil, then its
(unescaped) printed representation is used to provide a default value if
the keyword argument is not supplied by the caller.
\end{describe}
(unescaped) printed representation is used to provide a default value if
the keyword argument is not supplied by the caller.
\end{describe}
including file from defining such names as macros. This generic function
is used to convert names into a safe form.
including file from defining such names as macros. This generic function
is used to convert names into a safe form.
arguments; or
\item a possibly-improper list tail, beginning with an atom either as a
list item or as the final list cdr, indicating that the entire list tail
arguments; or
\item a possibly-improper list tail, beginning with an atom either as a
list item or as the final list cdr, indicating that the entire list tail
accepting the @<arguments>.
If the @<arguments> list contains a @|:keys| marker, then a
accepting the @<arguments>.
If the @<arguments> list contains a @|:keys| marker, then a
preceding the @|:keys| marker form the positional argument list, and those
following the marker form the list of keyword arguments.
\end{describe}
preceding the @|:keys| marker form the positional argument list, and those
following the marker form the list of keyword arguments.
\end{describe}
\begin{describe}{fun}{reify-variable-argument-tail @<arguments> @> @<list>}
If the @<argument> list contains an @|:ellipsis| marker, then replace it
with a @|va_list|. The name for the new argument, if any, is taken from
\begin{describe}{fun}{reify-variable-argument-tail @<arguments> @> @<list>}
If the @<argument> list contains an @|:ellipsis| marker, then replace it
with a @|va_list|. The name for the new argument, if any, is taken from
The @<lists> parameter is a list consisting of a number of
@|(@<report-function> . @<args>)| pairs: in each pair, @<report-function>
is either nil or a function designator, and @<args> is a list of
The @<lists> parameter is a list consisting of a number of
@|(@<report-function> . @<args>)| pairs: in each pair, @<report-function>
is either nil or a function designator, and @<args> is a list of
The resulting list contains exactly one argument for each distinct argument
name appearing in the input @<lists>; this argument will contain the
The resulting list contains exactly one argument for each distinct argument
name appearing in the input @<lists>; this argument will contain the
arguments and is expected to return two values:
\begin{itemize}
\item a file location @<floc> or other object acceptable to
arguments and is expected to return two values:
\begin{itemize}
\item a file location @<floc> or other object acceptable to
error; and
\item an object @<what>, whose printed representation should be a noun
phrase describing the object for which the argument lists are being
error; and
\item an object @<what>, whose printed representation should be a noun
phrase describing the object for which the argument lists are being
for the @<args> lists containing the conflicting argument objects are
called, in an arbitrary order, with a single argument which is the
offending @|argument| object; the function is expected to issue information
for the @<args> lists containing the conflicting argument objects are
called, in an arbitrary order, with a single argument which is the
offending @|argument| object; the function is expected to issue information
conflict. If a @<report-function> is nil, then nothing happens; this is
considered poor practice.
\end{describe}
conflict. If a @<report-function> is nil, then nothing happens; this is
considered poor practice.
\end{describe}
arguments, if any, will be printed by @<print-args>.
The @<print-kernel> function is a standard kernel-printing function
arguments, if any, will be printed by @<print-args>.
The @<print-kernel> function is a standard kernel-printing function
The @<print-args> function is given a single argument, which is the
@<stream> to print on. It should not print the surrounding parentheses.
The @<print-args> function is given a single argument, which is the
@<stream> to print on. It should not print the surrounding parentheses.
\begin{describe}{fun}{pprint-argument-list @<args> @<stream> @> @<flag>}
Print an argument list to @<stream>.
\begin{describe}{fun}{pprint-argument-list @<args> @<stream> @> @<flag>}
Print an argument list to @<stream>.