[gobject-introspection] repository: Add new public gi_type_info_extract_ffi_return_value() API
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gobject-introspection] repository: Add new public gi_type_info_extract_ffi_return_value() API
- Date: Mon, 5 Mar 2012 14:58:35 +0000 (UTC)
commit c2fc7cb45243aa9e0e1e5569cc742f69c76a671a
Author: Colin Walters <walters verbum org>
Date: Thu Feb 16 16:58:59 2012 -0500
repository: Add new public gi_type_info_extract_ffi_return_value() API
Dealing with FFI and return values is very tricky; this API allows
sharing the bits to do it between gobject-introspection and gjs (and
potentially other FFI binding consumers).
**NOTE** I swapped the order of the arguments, under the premise that
out arguments should generally be last.
https://bugzilla.gnome.org/show_bug.cgi?id=668902
girepository/gicallableinfo.c | 12 +++++-------
girepository/girffi.h | 6 ++++++
2 files changed, 11 insertions(+), 7 deletions(-)
---
diff --git a/girepository/gicallableinfo.c b/girepository/gicallableinfo.c
index fec77b8..25372ff 100644
--- a/girepository/gicallableinfo.c
+++ b/girepository/gicallableinfo.c
@@ -366,12 +366,10 @@ g_callable_info_iterate_return_attributes (GICallableInfo *info,
* Also see the ffi_call man page - the storage requirements for return
* values are "special".
*/
-typedef GIArgument GIFFIReturnValue;
-
-static void
-set_gargument_from_ffi_return_value (GITypeInfo *return_info,
- GIArgument *arg,
- GIFFIReturnValue *ffi_value)
+void
+gi_type_info_extract_ffi_return_value (GITypeInfo *return_info,
+ GIFFIReturnValue *ffi_value,
+ GIArgument *arg)
{
switch (g_type_info_get_tag (return_info)) {
case GI_TYPE_TAG_INT8:
@@ -618,7 +616,7 @@ _g_callable_info_invoke (GIFunctionInfo *info,
}
else
{
- set_gargument_from_ffi_return_value(rinfo, return_value, &ffi_return_value);
+ gi_type_info_extract_ffi_return_value (rinfo, &ffi_return_value, return_value);
success = TRUE;
}
out:
diff --git a/girepository/girffi.h b/girepository/girffi.h
index e976f92..56caff7 100644
--- a/girepository/girffi.h
+++ b/girepository/girffi.h
@@ -46,10 +46,16 @@ struct _GIFunctionInvoker {
gpointer padding[3];
};
+typedef GIArgument GIFFIReturnValue;
+
ffi_type * gi_type_tag_get_ffi_type (GITypeTag type_tag, gboolean is_pointer);
ffi_type * g_type_info_get_ffi_type (GITypeInfo *info);
+void gi_type_info_extract_ffi_return_value (GITypeInfo *return_info,
+ GIFFIReturnValue *ffi_value,
+ GIArgument *arg);
+
gboolean g_function_info_prep_invoker (GIFunctionInfo *info,
GIFunctionInvoker *invoker,
GError **error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]