@c -*-texinfo-*-

@c This is part of the GNU G-Golf Reference Manual.
@c Copyright (C) 2019 - 2025 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.


@c @defindex ei


@node Function
@subsection Function

G-Golf GI function and argument high level API.@*
The G-Golf GI function and argument high level API.


@subheading Classes

@indentedblock
@table @code
@item @ref{<function>}
@item @ref{<argument>}
@end table
@end indentedblock

@subheading Accessors and Methods

@indentedblock
@table @code

@c <function> accessors
@item @ref{!info_}
@item @ref{!namespace_}
@item @ref{!g-name____}
@item @ref{!name}
@item @ref{!override?}
@item @ref{!i-func}
@item @ref{!o-func}
@item @ref{!o-spec-pos}
@item @ref{!flags}
@item @ref{!is-method?}
@item @ref{!n-arg}
@item @ref{!caller-owns}
@item @ref{!return-type_}
@item @ref{!type-desc}
@item @ref{!may-return-null}
@item @ref{!arguments}
@item @ref{!n-gi-arg-in}
@item @ref{!args-in}
@item @ref{!gi-args-in}
@item @ref{!gi-args-in-bv}
@item @ref{!n-gi-arg-out}
@item @ref{!args-out}
@item @ref{!gi-args-out}
@item @ref{!gi-args-out-bv}
@item @ref{!gi-arg-result}

@c <argument> accessors
@item @ref{!g-name_____}
@item @ref{!name_}
@item @ref{!closure}
@item @ref{!destroy}
@item @ref{!direction}
@item @ref{!transfert}
@item @ref{!scope}
@item @ref{!type-tag}
@item @ref{!type-desc_}
@item @ref{!forced-type}
@item @ref{!string-pointer}
@item @ref{!is-pointer?}
@item @ref{!may-be-null?}
@item @ref{!is-caller-allocate?}
@item @ref{!is-optional?}
@item @ref{!is-return-value?}
@item @ref{!is-skip?}
@item @ref{!arg-pos}
@item @ref{!gi-argument-in}
@item @ref{!gi-argument-in-bv-pos}
@item @ref{!gi-argument-out}
@item @ref{!gi-argument-out-bv-pos}
@item @ref{!gi-argument-field}
@end table
@end indentedblock


@c @subheading Variables

@c @indentedblock
@c @table @code
@c @item @ref{%gi-strip-boolean-result}
@c @end table
@c @end indentedblock


@subheading Classes


@anchor{<function>}
@deftp Class <function>

Its slots are:

@indentedblock
@table @code

@item @emph{info}
#:accessor !info

@item @emph{namespace}
#:accessor !namespace

@item @emph{g-name}
#:accessor !g-name

@item @emph{name}
#:accessor !name

@item @emph{override?}
#:accessor !override?

@item @emph{i-func}
#:accessor !i-func

@item @emph{o-func}
#:accessor !o-func

@item @emph{o-spec-pos}
#:accessor !o-spec-pos

@item @emph{flags}
#:accessor !flags

@item @emph{is-method?}
#:accessor !is-method

@item @emph{n-arg}
#:accessor !n-arg

@item @emph{caller-owns}
#:accessor !caller-owns

@item @emph{return-type}
#:accessor !return-type

@item @emph{type-desc}
#:accessor !type-desc

@item @emph{may-return-null?}
#:accessor !may-return-null?

@item @emph{arguments}
#:accessor !arguments

@item @emph{n-gi-arg-in}
#:accessor !n-gi-arg-in

@item @emph{args-in}
#:accessor !args-in

@item @emph{gi-args-in}
#:accessor !gi-args-in

@item @emph{gi-args-in-bv}
#:accessor !gi-args-in-bv

@item @emph{n-gi-arg-out}
#:accessor !n-gi-arg-out

@item @emph{args-out}
#:accessor !args-out

@item @emph{gi-args-out}
#:accessor !gi-args-out

@item @emph{gi-args-out-bv}
#:accessor !gi-args-out-bv

@item @emph{gi-arg-result}
#:accessor !gi-arg-result

@end table
@end indentedblock

Instances of the @code{<function>} class are immutable (to be precise,
there are not meant to be mutated, see @ref{GOOPS Notes - Conventions -
Recommendations}, 'Slots are not Immutable').

@end deftp


@anchor{<argument>}
@deftp Class <argument>

Its slots are:

@indentedblock
@table @code

@item @emph{g-name}
#:accessor !g-name	@*
#:init-keyword #:g-name

@item @emph{name}
#:accessor !name	@*
#:init-keyword #:name

@item @emph{closure}
#:accessor !closure

@item @emph{destroy}
#:accessor !destroy

@item @emph{direction}
#:accessor !direction	@*
#:init-keyword #:direction

@item @emph{transfert}
#:accessor !transfert

@item @emph{scope}
#:accessor !scope

@item @emph{type-tag}
#:accessor !type-tag	@*
#:init-keyword #:type-tag

@item @emph{type-desc}
#:accessor !type-desc	@*
#:init-keyword #:type-desc

@item @emph{forced-type}
#:accessor !forced-type	@*
#:init-keyword #:forced-type

@item @emph{string-pointer}
#:accessor !string-pointer

@item @emph{is-pointer?}
#:accessor !is-pointer?	@*
#:init-keyword #:is-pointer?

@item @emph{may-be-null?}
#:accessor !may-be-nul?	@*
#:init-keyword #:may-be-null?

@item @emph{is-caller-allocate?}
#:accessor !is-caller-allocate?

@item @emph{is-optional?}
#:accessor !is-optional?

@item @emph{is-return-value?}
#:accessor !is-return-value?

@item @emph{is-skip?}
#:accessor !is-skip?

@item @emph{arg-pos}
#:accessor !arg-pos	@*
#:init-keyword #:arg-pos

@item @emph{gi-argument-in}
#:accessor !gi-argument-in	@*
#:init-value #f

@item @emph{gi-argument-in-bv-pos}
#:accessor !gi-argument-in-bv-pos	@*
#:init-value #f

@item @emph{gi-argument-out}
#:accessor !gi-argument-out	@*
#:init-value #f

@item @emph{gi-argument-out-bv-pos}
#:accessor !gi-argument-out-bv-pos	@*
#:init-value #f

@item @emph{name}
#:accessor !gi-argument-field	@*
#:init-keyword #:gi-argument-field

@end table
@end indentedblock

Instances of the @code{<argument>} class are immutable (to be precise,
there are not meant to be mutated, see @ref{GOOPS Notes - Conventions -
Recommendations}, 'Slots are not Immutable').

@end deftp



@subheading Accessors and Methods

Note: in this section, the @var{function} and @var{argument} arguments
are [must be] a @code{<function>} and an @code{<argument>} instance,
respectively.


@anchor{!info_}
@anchor{!namespace_}
@anchor{!g-name____}
@anchor{!name}
@anchor{!override?}
@anchor{!i-func}
@anchor{!o-func}
@anchor{!o-spec-pos}
@anchor{!flags}
@anchor{!is-method?}
@anchor{!n-arg}
@anchor{!caller-owns}
@anchor{!return-type_}
@anchor{!type-desc}
@anchor{!may-return-null}
@anchor{!arguments}
@anchor{!n-gi-arg-in}
@anchor{!args-in}
@anchor{!gi-args-in}
@anchor{!gi-args-in-bv}
@anchor{!n-gi-arg-out}
@anchor{!args-out}
@anchor{!gi-args-out}
@anchor{!gi-args-out-bv}
@anchor{!gi-arg-result}
@deffn Accessor !info function
@deffnx Accessor !namespace function
@deffnx Accessor !g-name function
@deffnx Accessor !name function
@deffnx Accessor !override? function
@deffnx Accessor !i-func function
@deffnx Accessor !o-func function
@deffnx Accessor !o-spec-pos function
@deffnx Accessor !flags function
@deffnx Accessor !is-method? function
@deffnx Accessor !n-arg function
@deffnx Accessor !caller-owns function
@deffnx Accessor !return-type function
@deffnx Accessor !type-desc function
@deffnx Accessor !may-return-null function
@deffnx Accessor !arguments function
@deffnx Accessor !n-gi-arg-in function
@deffnx Accessor !args-in function
@deffnx Accessor !gi-args-in function
@deffnx Accessor !gi-args-in-bv function
@deffnx Accessor !n-gi-arg-out function
@deffnx Accessor !args-out function
@deffnx Accessor !gi-args-out function
@deffnx Accessor !gi-args-out-bv function
@deffnx Accessor !gi-arg-result function

Returns the content of their respective slot for @var{function}.
@end deffn

@anchor{!g-name_____}
@anchor{!name_}
@anchor{!closure}
@anchor{!destroy}
@anchor{!direction}
@anchor{!transfert}
@anchor{!scope}
@anchor{!type-tag}
@anchor{!type-desc_}
@anchor{!forced-type}
@anchor{!string-pointer}
@anchor{!is-pointer?}
@anchor{!may-be-null?}
@anchor{!is-caller-allocate?}
@anchor{!is-optional?}
@anchor{!is-return-value?}
@anchor{!is-skip?}
@anchor{!arg-pos}
@anchor{!gi-argument-in}
@anchor{!gi-argument-in-bv-pos}
@anchor{!gi-argument-out}
@anchor{!gi-argument-out-bv-pos}
@anchor{!gi-argument-field}
@deffn Accessor !g-name argument
@deffnx Accessor !name argument
@deffnx Accessor !closure argument
@deffnx Accessor !destroy argument
@deffnx Accessor !direction argument
@deffnx Accessor !transfert argument
@deffnx Accessor !scope argument
@deffnx Accessor !type-tag argument
@deffnx Accessor !type-desc argument
@deffnx Accessor !forced-type argument
@deffnx Accessor !string-pointer argument
@deffnx Accessor !is-pointer? argument
@deffnx Accessor !may-be-null? argument
@deffnx Accessor !is-caller-allocate? argument
@deffnx Accessor !is-optional? argument
@deffnx Accessor !is-return-value? argument
@deffnx Accessor !is-skip? argument
@deffnx Accessor !arg-pos argument
@deffnx Accessor !gi-argument-in argument
@deffnx Accessor !gi-argument-in-bv-pos argument
@deffnx Accessor !gi-argument-out argument
@deffnx Accessor !gi-argument-out-bv-pos argument
@deffnx Accessor !gi-argument-field argument

Returns the content of their respective slot for @var{argument}.
@end deffn


@c @subheading Variables
