GICallableInfo

## GICallableInfo GICallableInfo — Struct representing a callable |

## Synopsis

    #define             GI_IS_CALLABLE_INFO                 (info)
    typedef             GICallableInfo;
    gboolean            g_callable_info_can_throw_gerror    (GICallableInfo *info);
    gint                g_callable_info_get_n_args          (GICallableInfo *info);
    GIArgInfo *         g_callable_info_get_arg             (GICallableInfo *info,
                                                             gint n);
    GITransfer          g_callable_info_get_caller_owns     (GICallableInfo *info);
    const gchar *       g_callable_info_get_return_attribute
                                                            (GICallableInfo *info,
                                                             const gchar *name);
    GITypeInfo *        g_callable_info_get_return_type     (GICallableInfo *info);
    gboolean            g_callable_info_invoke              (GICallableInfo *info,
                                                             gpointer function,
                                                             const GIArgument *in_args,
                                                             int n_in_args,
                                                             const GIArgument *out_args,
                                                             int n_out_args,
                                                             GIArgument *return_value,
                                                             gboolean is_method,
                                                             gboolean throws,
                                                             GError **error);
    gboolean            g_callable_info_is_method           (GICallableInfo *info);
    gboolean            g_callable_info_iterate_return_attributes
                                                            (GICallableInfo *info,
                                                             GIAttributeIter *iterator,
                                                             char **name,
                                                             char **value);
    void                g_callable_info_load_arg            (GICallableInfo *info,
                                                             gint n,
                                                             GIArgInfo *arg);
    void                g_callable_info_load_return_type    (GICallableInfo *info,
                                                             GITypeInfo *type);
    gboolean            g_callable_info_may_return_null     (GICallableInfo *info);
    gboolean            g_callable_info_skip_return         (GICallableInfo *info);

## Description

GICallableInfo represents an entity which is callable. Currently a function (GIFunctionInfo), virtual function, (GIVFuncInfo) or callback (GICallbackInfo).

A callable has a list of arguments (GIArgInfo), a return type, direction and a flag which decides if it returns null.

## Struct hierarchy

      GIBaseInfo
       +----GICallableInfo
             +----GIFunctionInfo
             +----GISignalInfo
             +----GIVFuncInfo

## Details

### GI_IS_CALLABLE_INFO()

    #define             GI_IS_CALLABLE_INFO(info)

Checks if `info` is a GICallableInfo or derived from it.

`info` : | an info structure

### GICallableInfo

    typedef GIBaseInfo GICallableInfo;

Represents a callable, either GIFunctionInfo, GICallbackInfo or GIVFuncInfo.

### g_callable_info_can_throw_gerror ()

    gboolean            g_callable_info_can_throw_gerror    (GICallableInfo *info);

TODO

`info` : | a GICallableInfo
Returns : | `TRUE` if this GICallableInfo can throw a GError

Since 1.34

### g_callable_info_get_n_args ()

    gint                g_callable_info_get_n_args          (GICallableInfo *info);

Obtain the number of arguments (both IN and OUT) for this callable.

`info` : | a GICallableInfo
Returns : | The number of arguments this callable expects.

### g_callable_info_get_arg ()

    GIArgInfo *         g_callable_info_get_arg             (GICallableInfo *info,
                                                             gint n);

Obtain information about a particular argument of this callable.

`info` : | a GICallableInfo
`n` : | the argument index to fetch
Returns : | the GIArgInfo. Free it with `g_base_info_unref()` when done. [transfer full]

### g_callable_info_get_caller_owns ()

    GITransfer          g_callable_info_get_caller_owns     (GICallableInfo *info);

See whether the caller owns the return value of this callable. GITransfer contains a list of possible transfer values.

`info` : | a GICallableInfo
Returns : | `TRUE` if the caller owns the return value, `FALSE` otherwise.

### g_callable_info_get_return_attribute ()

    const gchar *       g_callable_info_get_return_attribute
                                                            (GICallableInfo *info,
                                                             const gchar *name);

Retrieve an arbitrary attribute associated with the return value.

`info` : | a GICallableInfo
`name` : | a freeform string naming an attribute
Returns : | The value of the attribute, or `NULL` if no such attribute exists

### g_callable_info_get_return_type ()

    GITypeInfo *        g_callable_info_get_return_type     (GICallableInfo *info);

Obtain the return type of a callable item as a GITypeInfo.

`info` : | a GICallableInfo
Returns : | the GITypeInfo. Free the struct by calling `g_base_info_unref()` when done. [transfer full]

### g_callable_info_invoke ()

    gboolean            g_callable_info_invoke              (GICallableInfo *info,
                                                             gpointer function,
                                                             const GIArgument *in_args,
                                                             int n_in_args,
                                                             const GIArgument *out_args,
                                                             int n_out_args,
                                                             GIArgument *return_value,
                                                             gboolean is_method,
                                                             gboolean throws,
                                                             GError **error);

TODO

`info` : | TODO
`function` : | TODO
`in_args` : | TODO
`n_in_args` : | TODO
`out_args` : | TODO
`n_out_args` : | TODO
`return_value` : | TODO
`is_method` : | TODO
`throws` : | TODO
`error` : | TODO

### g_callable_info_is_method ()

    gboolean            g_callable_info_is_method           (GICallableInfo *info);

Determines if the callable info is a method. For GIVFuncInfos, GICallbackInfos, and GISignalInfos, this is always true. Otherwise, this looks at the `GI_FUNCTION_IS_METHOD` flag on the GIFunctionInfo.

Concretely, this function returns whether `g_callable_info_get_n_args()` matches the number of arguments in the raw C method. For methods, there is one more C argument than is exposed by introspection: the "self" or "this" object.

`info` : | a GICallableInfo
Returns : | `TRUE` if `info` is a method, `FALSE` otherwise

Since 1.34

### g_callable_info_iterate_return_attributes ()

    gboolean            g_callable_info_iterate_return_attributes
                                                            (GICallableInfo *info,
                                                             GIAttributeIter *iterator,
                                                             char **name,
                                                             char **value);

Iterate over all attributes associated with the return value. The iterator structure is typically stack allocated, and must have its first member initialized to `NULL`.

Both the `name` and `value` should be treated as constants and must not be freed.

See `g_base_info_iterate_attributes()` for an example of how to use a similar API.

`info` : | a GICallableInfo
`iterator` : | a GIAttributeIter structure, must be initialized; see below
`name` : | Returned name, must not be freed. [out][transfer none]
`value` : | Returned name, must not be freed. [out][transfer none]
Returns : | `TRUE` if there are more attributes

### g_callable_info_load_arg ()

    void                g_callable_info_load_arg            (GICallableInfo *info,
                                                             gint n,
                                                             GIArgInfo *arg);

Obtain information about a particular argument of this callable; this function is a variant of `g_callable_info_get_arg()` designed for stack allocation.

The initialized `arg` must not be referenced after `info` is deallocated.

`info` : | a GICallableInfo
`n` : | the argument index to fetch
`arg` : | Initialize with argument number `n`. [out caller-allocates]

### g_callable_info_load_return_type ()

    void                g_callable_info_load_return_type    (GICallableInfo *info,
                                                             GITypeInfo *type);

Obtain information about a return value of callable; this function is a variant of `g_callable_info_get_return_type()` designed for stack allocation.

The initialized `type` must not be referenced after `info` is deallocated.

`info` : | a GICallableInfo
`type` : | Initialized with return type of `info`. [out caller-allocates]

### g_callable_info_may_return_null ()

    gboolean            g_callable_info_may_return_null     (GICallableInfo *info);

See if a callable could return `NULL`.

`info` : | a GICallableInfo
Returns : | `TRUE` if callable could return `NULL`

### g_callable_info_skip_return ()

    gboolean            g_callable_info_skip_return         (GICallableInfo *info);

See if a callable's return value is only useful in C.

`info` : | a GICallableInfo
Returns : | `TRUE` if return value is only useful in C.