From 010f6ff55004ece9dd504a7267e279eb6cde9aff Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Mon, 31 May 2010 17:54:42 -0300 Subject: [gifunctioninfo] Move out to another file Move out GIFunctionInfo to gifunctioninfo.[ch] --- girepository/Makefile.am | 4 +- girepository/gifunctioninfo.c | 169 ++++++++++++++++++++++++++++++++++++++++++ girepository/gifunctioninfo.h | 97 ++++++++++++++++++++++++ girepository/ginfo.c | 142 ----------------------------------- girepository/girepository.h | 89 +--------------------- girepository/gitypes.h | 25 +++++++ 6 files changed, 296 insertions(+), 230 deletions(-) create mode 100644 girepository/gifunctioninfo.c create mode 100644 girepository/gifunctioninfo.h (limited to 'girepository') diff --git a/girepository/Makefile.am b/girepository/Makefile.am index 3bd30103..09fc0ee7 100644 --- a/girepository/Makefile.am +++ b/girepository/Makefile.am @@ -1,6 +1,7 @@ girepodir = $(includedir)/gobject-introspection-1.0/ girepo_HEADERS = \ gibaseinfo.h \ + gifunctioninfo.h \ girepository.h \ girffi.h \ gitypelib.h \ @@ -12,7 +13,8 @@ noinst_LTLIBRARIES = libgirepository-parser.la libgirepository_1_0_la_SOURCES = \ gdump.c \ gfield.c \ - gibaseinfo.c \ + gibaseinfo.c \ + gifunctioninfo.c \ ginfo.c \ ginfo.h \ ginvoke.c \ diff --git a/girepository/gifunctioninfo.c b/girepository/gifunctioninfo.c new file mode 100644 index 00000000..30c7ca69 --- /dev/null +++ b/girepository/gifunctioninfo.c @@ -0,0 +1,169 @@ +/* GObject introspection: Repository implementation + * + * Copyright (C) 2005 Matthias Clasen + * Copyright (C) 2008,2009 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include + +#include +#include "girepository-private.h" +#include "gitypelib-internal.h" + +/* GIFunctionInfo functions */ + +/** + * SECTION:gifunctioninfo + * @Short_description: Struct representing a function + * @Title: GIFunctionInfo + * + * GIFunctionInfo represents a function, method or constructor. + * To find out what kind of entity a #GIFunctionInfo represents, call + * g_function_info_get_flags(). + * + * See also #GICallableInfo for information on how to retreive arguments and + * other metadata. + */ + +/** + * g_function_info_get_symbol: + * @info: a #GIFunctionInfo + * + * Obtain the symbol of the function. The symbol is the name of the + * exported function, suitable to be used as an argument to + * g_module_symbol(). + * + * Returns: the symbol + */ +const gchar * +g_function_info_get_symbol (GIFunctionInfo *info) +{ + GIRealInfo *rinfo; + FunctionBlob *blob; + + g_return_val_if_fail (info != NULL, NULL); + g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), NULL); + + rinfo = (GIRealInfo *)info; + blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; + + return g_typelib_get_string (rinfo->typelib, blob->symbol); +} + +/** + * g_function_info_get_flags: + * @info: a #GIFunctionInfo + * + * Obtain the #GIFunctionInfoFlags for the @info. + * + * Returns: the flags + */ +GIFunctionInfoFlags +g_function_info_get_flags (GIFunctionInfo *info) +{ + GIFunctionInfoFlags flags; + GIRealInfo *rinfo; + FunctionBlob *blob; + + g_return_val_if_fail (info != NULL, -1); + g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), -1); + + rinfo = (GIRealInfo *)info; + blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; + + flags = 0; + + /* Make sure we don't flag Constructors as methods */ + if (!blob->constructor && !blob->is_static) + flags = flags | GI_FUNCTION_IS_METHOD; + + if (blob->constructor) + flags = flags | GI_FUNCTION_IS_CONSTRUCTOR; + + if (blob->getter) + flags = flags | GI_FUNCTION_IS_GETTER; + + if (blob->setter) + flags = flags | GI_FUNCTION_IS_SETTER; + + if (blob->wraps_vfunc) + flags = flags | GI_FUNCTION_WRAPS_VFUNC; + + if (blob->throws) + flags = flags | GI_FUNCTION_THROWS; + + return flags; +} + +/** + * g_function_info_get_property: + * @info: a #GIFunctionInfo + * + * Obtain the property associated with this #GIFunctionInfo. + * Only #GIFunctionInfo with the flag %GI_FUNCTION_IS_GETTER or + * %GI_FUNCTION_IS_SETTER have a property set. For other cases, + * %NULL will be returned. + * + * Returns: (transfer full): the property or %NULL if not set. Free it with + * g_base_info_unref() when done. + */ +GIPropertyInfo * +g_function_info_get_property (GIFunctionInfo *info) +{ + GIRealInfo *rinfo; + FunctionBlob *blob; + GIInterfaceInfo *container; + + g_return_val_if_fail (info != NULL, NULL); + g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), NULL); + + rinfo = (GIRealInfo *)info; + blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; + container = (GIInterfaceInfo *)rinfo->container; + + return g_interface_info_get_property (container, blob->index); +} + +/** + * g_function_info_get_vfunc: + * @info: a #GIFunctionInfo + * + * Obtain the virtual function associated with this #GIFunctionInfo. + * Only #GIFunctionInfo with the flag %GI_FUNCTION_WRAPS_VFUNC has + * a virtual function set. For other cases, %NULL will be returned. + * + * Returns: (transfer full): the virtual function or %NULL if not set. + * Free it by calling g_base_info_unref() when done. + */ +GIVFuncInfo * +g_function_info_get_vfunc (GIFunctionInfo *info) +{ + GIRealInfo *rinfo; + FunctionBlob *blob; + GIInterfaceInfo *container; + + g_return_val_if_fail (info != NULL, NULL); + g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), NULL); + + rinfo = (GIRealInfo *)info; + blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; + container = (GIInterfaceInfo *)rinfo->container; + + return g_interface_info_get_vfunc (container, blob->index); +} + diff --git a/girepository/gifunctioninfo.h b/girepository/gifunctioninfo.h new file mode 100644 index 00000000..92e2089d --- /dev/null +++ b/girepository/gifunctioninfo.h @@ -0,0 +1,97 @@ +/* GObject introspection: Functions + * + * Copyright (C) 2005 Matthias Clasen + * Copyright (C) 2008,2009 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GIFUNCTIONINFO_H__ +#define __GIFUNCTIONINFO_H__ + +#if !defined (__GIREPOSITORY_H_INSIDE__) && !defined (GI_COMPILATION) +#error "Only can be included directly." +#endif + +#include + +G_BEGIN_DECLS + +#define GI_IS_FUNCTION_INFO(info) \ + (g_base_info_get_type((GIBaseInfo*)info) == GI_INFO_TYPE_FUNCTION) + +/** + * GIFunctionInfoFlags: + * @GI_FUNCTION_IS_METHOD: is a method. + * @GI_FUNCTION_IS_CONSTRUCTOR: is a constructor. + * @GI_FUNCTION_IS_GETTER: is a getter of a #GIPropertyInfo. + * @GI_FUNCTION_IS_SETTER: is a setter of a #GIPropertyInfo. + * @GI_FUNCTION_WRAPS_VFUNC: represents a virtual function. + * @GI_FUNCTION_THROWS: the function may throw an error. + * + * Flags for a #GIFunctionInfo struct. + */ +typedef enum +{ + GI_FUNCTION_IS_METHOD = 1 << 0, + GI_FUNCTION_IS_CONSTRUCTOR = 1 << 1, + GI_FUNCTION_IS_GETTER = 1 << 2, + GI_FUNCTION_IS_SETTER = 1 << 3, + GI_FUNCTION_WRAPS_VFUNC = 1 << 4, + GI_FUNCTION_THROWS = 1 << 5 +} GIFunctionInfoFlags; + +const gchar * g_function_info_get_symbol (GIFunctionInfo *info); +GIFunctionInfoFlags g_function_info_get_flags (GIFunctionInfo *info); +GIPropertyInfo * g_function_info_get_property (GIFunctionInfo *info); +GIVFuncInfo * g_function_info_get_vfunc (GIFunctionInfo *info); + +#define G_INVOKE_ERROR (g_invoke_error_quark ()) +GQuark g_invoke_error_quark (void); + +/** + * GInvokeError: + * @G_INVOKE_ERROR_FAILED: invokation failed, unknown error. + * @G_INVOKE_ERROR_SYMBOL_NOT_FOUND: symbol couldn't be found in any of the + * libraries associated with the typelib of the function. + * @G_INVOKE_ERROR_ARGUMENT_MISMATCH: the arguments provided didn't match + * the expected arguments for the functions type signature. + * + * An error occuring while invoking a function via + * g_function_info_invoke(). + */ + +typedef enum +{ + G_INVOKE_ERROR_FAILED, + G_INVOKE_ERROR_SYMBOL_NOT_FOUND, + G_INVOKE_ERROR_ARGUMENT_MISMATCH +} GInvokeError; + +gboolean g_function_info_invoke (GIFunctionInfo *info, + const GArgument *in_args, + int n_in_args, + const GArgument *out_args, + int n_out_args, + GArgument *return_value, + GError **error); + + +G_END_DECLS + + +#endif /* __G_IREPOSITORY_H__ */ + diff --git a/girepository/ginfo.c b/girepository/ginfo.c index 07377630..0c717cfa 100644 --- a/girepository/ginfo.c +++ b/girepository/ginfo.c @@ -29,148 +29,6 @@ #include "ginfo.h" #include "girepository-private.h" -/* GIFunctionInfo functions */ - -/** - * SECTION:gifunctioninfo - * @Short_description: Struct representing a function - * @Title: GIFunctionInfo - * - * GIFunctionInfo represents a function, method or constructor. - * To find out what kind of entity a #GIFunctionInfo represents, call - * g_function_info_get_flags(). - * - * See also #GICallableInfo for information on how to retreive arguments and - * other metadata. - */ - -/** - * g_function_info_get_symbol: - * @info: a #GIFunctionInfo - * - * Obtain the symbol of the function. The symbol is the name of the - * exported function, suitable to be used as an argument to - * g_module_symbol(). - * - * Returns: the symbol - */ -const gchar * -g_function_info_get_symbol (GIFunctionInfo *info) -{ - GIRealInfo *rinfo; - FunctionBlob *blob; - - g_return_val_if_fail (info != NULL, NULL); - g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), NULL); - - rinfo = (GIRealInfo *)info; - blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; - - return g_typelib_get_string (rinfo->typelib, blob->symbol); -} - -/** - * g_function_info_get_flags: - * @info: a #GIFunctionInfo - * - * Obtain the #GIFunctionInfoFlags for the @info. - * - * Returns: the flags - */ -GIFunctionInfoFlags -g_function_info_get_flags (GIFunctionInfo *info) -{ - GIFunctionInfoFlags flags; - GIRealInfo *rinfo; - FunctionBlob *blob; - - g_return_val_if_fail (info != NULL, -1); - g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), -1); - - rinfo = (GIRealInfo *)info; - blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; - - flags = 0; - - /* Make sure we don't flag Constructors as methods */ - if (!blob->constructor && !blob->is_static) - flags = flags | GI_FUNCTION_IS_METHOD; - - if (blob->constructor) - flags = flags | GI_FUNCTION_IS_CONSTRUCTOR; - - if (blob->getter) - flags = flags | GI_FUNCTION_IS_GETTER; - - if (blob->setter) - flags = flags | GI_FUNCTION_IS_SETTER; - - if (blob->wraps_vfunc) - flags = flags | GI_FUNCTION_WRAPS_VFUNC; - - if (blob->throws) - flags = flags | GI_FUNCTION_THROWS; - - return flags; -} - -/** - * g_function_info_get_property: - * @info: a #GIFunctionInfo - * - * Obtain the property associated with this #GIFunctionInfo. - * Only #GIFunctionInfo with the flag %GI_FUNCTION_IS_GETTER or - * %GI_FUNCTION_IS_SETTER have a property set. For other cases, - * %NULL will be returned. - * - * Returns: (transfer full): the property or %NULL if not set. Free it with - * g_base_info_unref() when done. - */ -GIPropertyInfo * -g_function_info_get_property (GIFunctionInfo *info) -{ - GIRealInfo *rinfo; - FunctionBlob *blob; - GIInterfaceInfo *container; - - g_return_val_if_fail (info != NULL, NULL); - g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), NULL); - - rinfo = (GIRealInfo *)info; - blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; - container = (GIInterfaceInfo *)rinfo->container; - - return g_interface_info_get_property (container, blob->index); -} - -/** - * g_function_info_get_vfunc: - * @info: a #GIFunctionInfo - * - * Obtain the virtual function associated with this #GIFunctionInfo. - * Only #GIFunctionInfo with the flag %GI_FUNCTION_WRAPS_VFUNC has - * a virtual function set. For other cases, %NULL will be returned. - * - * Returns: (transfer full): the virtual function or %NULL if not set. - * Free it by calling g_base_info_unref() when done. - */ -GIVFuncInfo * -g_function_info_get_vfunc (GIFunctionInfo *info) -{ - GIRealInfo *rinfo; - FunctionBlob *blob; - GIInterfaceInfo *container; - - g_return_val_if_fail (info != NULL, NULL); - g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), NULL); - - rinfo = (GIRealInfo *)info; - blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; - container = (GIInterfaceInfo *)rinfo->container; - - return g_interface_info_get_vfunc (container, blob->index); -} - /* GICallableInfo functions */ /** diff --git a/girepository/girepository.h b/girepository/girepository.h index e006b5e0..389877c1 100644 --- a/girepository/girepository.h +++ b/girepository/girepository.h @@ -27,7 +27,9 @@ #include #include #include +#include #include +#include G_BEGIN_DECLS @@ -143,93 +145,6 @@ void gi_cclosure_marshal_generic (GClosure *closure, gpointer invocation_hint, gpointer marshal_data); -/* GIFunctionInfo */ - -#define GI_IS_FUNCTION_INFO(info) \ - (g_base_info_get_type((GIBaseInfo*)info) == GI_INFO_TYPE_FUNCTION) - -/** - * GIFunctionInfoFlags: - * @GI_FUNCTION_IS_METHOD: is a method. - * @GI_FUNCTION_IS_CONSTRUCTOR: is a constructor. - * @GI_FUNCTION_IS_GETTER: is a getter of a #GIPropertyInfo. - * @GI_FUNCTION_IS_SETTER: is a setter of a #GIPropertyInfo. - * @GI_FUNCTION_WRAPS_VFUNC: represents a virtual function. - * @GI_FUNCTION_THROWS: the function may throw an error. - * - * Flags for a #GIFunctionInfo struct. - */ -typedef enum -{ - GI_FUNCTION_IS_METHOD = 1 << 0, - GI_FUNCTION_IS_CONSTRUCTOR = 1 << 1, - GI_FUNCTION_IS_GETTER = 1 << 2, - GI_FUNCTION_IS_SETTER = 1 << 3, - GI_FUNCTION_WRAPS_VFUNC = 1 << 4, - GI_FUNCTION_THROWS = 1 << 5 -} GIFunctionInfoFlags; - -const gchar * g_function_info_get_symbol (GIFunctionInfo *info); -GIFunctionInfoFlags g_function_info_get_flags (GIFunctionInfo *info); -GIPropertyInfo * g_function_info_get_property (GIFunctionInfo *info); -GIVFuncInfo * g_function_info_get_vfunc (GIFunctionInfo *info); - -typedef union -{ - gboolean v_boolean; - gint8 v_int8; - guint8 v_uint8; - gint16 v_int16; - guint16 v_uint16; - gint32 v_int32; - guint32 v_uint32; - gint64 v_int64; - guint64 v_uint64; - gfloat v_float; - gdouble v_double; - gshort v_short; - gushort v_ushort; - gint v_int; - guint v_uint; - glong v_long; - gulong v_ulong; - gssize v_ssize; - gsize v_size; - gchar * v_string; - gpointer v_pointer; -} GArgument; - -#define G_INVOKE_ERROR (g_invoke_error_quark ()) -GQuark g_invoke_error_quark (void); - -/** - * GInvokeError: - * @G_INVOKE_ERROR_FAILED: invokation failed, unknown error. - * @G_INVOKE_ERROR_SYMBOL_NOT_FOUND: symbol couldn't be found in any of the - * libraries associated with the typelib of the function. - * @G_INVOKE_ERROR_ARGUMENT_MISMATCH: the arguments provided didn't match - * the expected arguments for the functions type signature. - * - * An error occuring while invoking a function via - * g_function_info_invoke(). - */ - -typedef enum -{ - G_INVOKE_ERROR_FAILED, - G_INVOKE_ERROR_SYMBOL_NOT_FOUND, - G_INVOKE_ERROR_ARGUMENT_MISMATCH -} GInvokeError; - -gboolean g_function_info_invoke (GIFunctionInfo *info, - const GArgument *in_args, - int n_in_args, - const GArgument *out_args, - int n_out_args, - GArgument *return_value, - GError **error); - - /* GICallableInfo */ #define GI_IS_CALLABLE_INFO(info) \ diff --git a/girepository/gitypes.h b/girepository/gitypes.h index 8951d917..a51df08e 100644 --- a/girepository/gitypes.h +++ b/girepository/gitypes.h @@ -166,6 +166,31 @@ typedef GIBaseInfo GIErrorDomainInfo; */ typedef struct _GIUnresolvedInfo GIUnresolvedInfo; +typedef union +{ + gboolean v_boolean; + gint8 v_int8; + guint8 v_uint8; + gint16 v_int16; + guint16 v_uint16; + gint32 v_int32; + guint32 v_uint32; + gint64 v_int64; + guint64 v_uint64; + gfloat v_float; + gdouble v_double; + gshort v_short; + gushort v_ushort; + gint v_int; + guint v_uint; + glong v_long; + gulong v_ulong; + gssize v_ssize; + gsize v_size; + gchar * v_string; + gpointer v_pointer; +} GArgument; + /* Types of objects registered in the repository */ /** -- cgit v1.2.1