summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2010-06-06 13:35:14 -0300
committerJohan Dahlin <johan@gnome.org>2010-06-06 13:35:14 -0300
commit77575989154b89b5bbc2ccf550aaebbf9b4e8a4e (patch)
tree9945685e0d111001fe795e387b49383c821bbaf9
parentdd13bc7da211808f056783a280001061a733271c (diff)
downloadgobject-introspection-77575989154b89b5bbc2ccf550aaebbf9b4e8a4e.tar.gz
[gifieldinfo] Document, indent and check params
Document the remaining functions, indent to match coding style and check so that all info params are set and of the right type.
-rw-r--r--girepository/gifieldinfo.c741
1 files changed, 396 insertions, 345 deletions
diff --git a/girepository/gifieldinfo.c b/girepository/gifieldinfo.c
index d6f2da98..878f411c 100644
--- a/girepository/gifieldinfo.c
+++ b/girepository/gifieldinfo.c
@@ -43,9 +43,13 @@ GIFieldInfoFlags
g_field_info_get_flags (GIFieldInfo *info)
{
GIFieldInfoFlags flags;
-
GIRealInfo *rinfo = (GIRealInfo *)info;
- FieldBlob *blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset];
+ FieldBlob *blob;
+
+ g_return_val_if_fail (info != NULL, 0);
+ g_return_val_if_fail (GI_IS_FIELD_INFO (info), 0);
+
+ blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset];
flags = 0;
@@ -58,32 +62,73 @@ g_field_info_get_flags (GIFieldInfo *info)
return flags;
}
+/**
+ * g_field_info_get_size:
+ * @info: a #GIFieldInfo
+ *
+ * Obtain the size in bits of the field member, this is how
+ * much space you need to allocate to store the field.
+ *
+ * Returns: the field size
+ */
gint
g_field_info_get_size (GIFieldInfo *info)
{
GIRealInfo *rinfo = (GIRealInfo *)info;
- FieldBlob *blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset];
+ FieldBlob *blob;
+
+ g_return_val_if_fail (info != NULL, 0);
+ g_return_val_if_fail (GI_IS_FIELD_INFO (info), 0);
+
+ blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset];
return blob->bits;
}
+/**
+ * g_field_info_get_offset:
+ * @info: a #GIFieldInfo
+ *
+ * Obtain the offset in bits of the field member, this is relative
+ * to the beginning of the struct or union.
+ *
+ * Returns: the field offset
+ */
gint
g_field_info_get_offset (GIFieldInfo *info)
{
GIRealInfo *rinfo = (GIRealInfo *)info;
- FieldBlob *blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset];
+ FieldBlob *blob;
+
+ g_return_val_if_fail (info != NULL, 0);
+ g_return_val_if_fail (GI_IS_FIELD_INFO (info), 0);
+
+ blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset];
return blob->struct_offset;
}
+/**
+ * g_field_info_get_type:
+ *
+ * Obtain the type of a field as a #GITypeInfo.
+ *
+ * Returns: (transfer full): the #GITypeInfo. Free the struct by calling
+ * g_base_info_unref() when done.
+ */
GITypeInfo *
g_field_info_get_type (GIFieldInfo *info)
{
GIRealInfo *rinfo = (GIRealInfo *)info;
Header *header = (Header *)rinfo->typelib->data;
- FieldBlob *blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset];
+ FieldBlob *blob;
GIRealInfo *type_info;
+ g_return_val_if_fail (info != NULL, NULL);
+ g_return_val_if_fail (GI_IS_FIELD_INFO (info), NULL);
+
+ blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset];
+
if (blob->has_embedded_type)
{
type_info = (GIRealInfo *) g_info_new (GI_INFO_TYPE_TYPE,
@@ -115,195 +160,198 @@ g_field_info_get_field (GIFieldInfo *field_info,
gpointer mem,
GArgument *value)
{
- int offset;
- GITypeInfo *type_info;
- gboolean result = FALSE;
-
- if ((g_field_info_get_flags (field_info) & GI_FIELD_IS_READABLE) == 0)
- return FALSE;
-
- offset = g_field_info_get_offset (field_info);
- type_info = g_field_info_get_type (field_info);
-
- if (g_type_info_is_pointer (type_info))
- {
- value->v_pointer = G_STRUCT_MEMBER(gpointer, mem, offset);
- result = TRUE;
- }
- else
- {
- switch (g_type_info_get_tag (type_info))
- {
- case GI_TYPE_TAG_VOID:
- g_warning("Field %s: should not be have void type",
- g_base_info_get_name ((GIBaseInfo *)field_info));
- break;
- case GI_TYPE_TAG_BOOLEAN:
- value->v_boolean = G_STRUCT_MEMBER(gboolean, mem, offset) != FALSE;
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT8:
- case GI_TYPE_TAG_UINT8:
- value->v_uint8 = G_STRUCT_MEMBER(guint8, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT16:
- case GI_TYPE_TAG_UINT16:
- case GI_TYPE_TAG_SHORT:
- case GI_TYPE_TAG_USHORT:
- value->v_uint16 = G_STRUCT_MEMBER(guint16, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT32:
- case GI_TYPE_TAG_UINT32:
- case GI_TYPE_TAG_INT:
- case GI_TYPE_TAG_UINT:
- value->v_uint32 = G_STRUCT_MEMBER(guint32, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT64:
- case GI_TYPE_TAG_UINT64:
- value->v_uint64 = G_STRUCT_MEMBER(guint64, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_LONG:
- case GI_TYPE_TAG_ULONG:
- value->v_ulong = G_STRUCT_MEMBER(gulong, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_SSIZE:
- case GI_TYPE_TAG_SIZE:
- case GI_TYPE_TAG_GTYPE:
- value->v_size = G_STRUCT_MEMBER(gsize, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_FLOAT:
- value->v_float = G_STRUCT_MEMBER(gfloat, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_DOUBLE:
- value->v_double = G_STRUCT_MEMBER(gdouble, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_TIME_T:
+ int offset;
+ GITypeInfo *type_info;
+ gboolean result = FALSE;
+
+ g_return_val_if_fail (field_info != NULL, FALSE);
+ g_return_val_if_fail (GI_IS_FIELD_INFO (field_info), FALSE);
+
+ if ((g_field_info_get_flags (field_info) & GI_FIELD_IS_READABLE) == 0)
+ return FALSE;
+
+ offset = g_field_info_get_offset (field_info);
+ type_info = g_field_info_get_type (field_info);
+
+ if (g_type_info_is_pointer (type_info))
+ {
+ value->v_pointer = G_STRUCT_MEMBER (gpointer, mem, offset);
+ result = TRUE;
+ }
+ else
+ {
+ switch (g_type_info_get_tag (type_info))
+ {
+ case GI_TYPE_TAG_VOID:
+ g_warning("Field %s: should not be have void type",
+ g_base_info_get_name ((GIBaseInfo *)field_info));
+ break;
+ case GI_TYPE_TAG_BOOLEAN:
+ value->v_boolean = G_STRUCT_MEMBER (gboolean, mem, offset) != FALSE;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT8:
+ case GI_TYPE_TAG_UINT8:
+ value->v_uint8 = G_STRUCT_MEMBER (guint8, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT16:
+ case GI_TYPE_TAG_UINT16:
+ case GI_TYPE_TAG_SHORT:
+ case GI_TYPE_TAG_USHORT:
+ value->v_uint16 = G_STRUCT_MEMBER (guint16, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT32:
+ case GI_TYPE_TAG_UINT32:
+ case GI_TYPE_TAG_INT:
+ case GI_TYPE_TAG_UINT:
+ value->v_uint32 = G_STRUCT_MEMBER (guint32, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT64:
+ case GI_TYPE_TAG_UINT64:
+ value->v_uint64 = G_STRUCT_MEMBER (guint64, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_LONG:
+ case GI_TYPE_TAG_ULONG:
+ value->v_ulong = G_STRUCT_MEMBER (gulong, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_SSIZE:
+ case GI_TYPE_TAG_SIZE:
+ case GI_TYPE_TAG_GTYPE:
+ value->v_size = G_STRUCT_MEMBER (gsize, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_FLOAT:
+ value->v_float = G_STRUCT_MEMBER (gfloat, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_DOUBLE:
+ value->v_double = G_STRUCT_MEMBER (gdouble, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_TIME_T:
#if SIZEOF_TIME_T == 4
- value->v_int32 = G_STRUCT_MEMBER(time_t, mem, offset);
+ value->v_int32 = G_STRUCT_MEMBER (time_t, mem, offset);
#elif SIZEOF_TIME_T == 8
- value->v_int64 = G_STRUCT_MEMBER(time_t, mem, offset);
+ value->v_int64 = G_STRUCT_MEMBER (time_t, mem, offset);
#else
# error "Unexpected size for time_t: not 4 or 8"
#endif
- result = TRUE;
- break;
- case GI_TYPE_TAG_UTF8:
- case GI_TYPE_TAG_FILENAME:
- case GI_TYPE_TAG_ARRAY:
- case GI_TYPE_TAG_GLIST:
- case GI_TYPE_TAG_GSLIST:
- case GI_TYPE_TAG_GHASH:
- g_warning("Field %s: type %s should have is_pointer set",
- g_base_info_get_name ((GIBaseInfo *)field_info),
- g_type_tag_to_string (g_type_info_get_tag (type_info)));
- break;
- case GI_TYPE_TAG_ERROR:
- /* Needs to be handled by the language binding directly */
- break;
- case GI_TYPE_TAG_INTERFACE:
- {
- GIBaseInfo *interface = g_type_info_get_interface (type_info);
- switch (g_base_info_get_type (interface))
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_UTF8:
+ case GI_TYPE_TAG_FILENAME:
+ case GI_TYPE_TAG_ARRAY:
+ case GI_TYPE_TAG_GLIST:
+ case GI_TYPE_TAG_GSLIST:
+ case GI_TYPE_TAG_GHASH:
+ g_warning("Field %s: type %s should have is_pointer set",
+ g_base_info_get_name ((GIBaseInfo *)field_info),
+ g_type_tag_to_string (g_type_info_get_tag (type_info)));
+ break;
+ case GI_TYPE_TAG_ERROR:
+ /* Needs to be handled by the language binding directly */
+ break;
+ case GI_TYPE_TAG_INTERFACE:
+ {
+ GIBaseInfo *interface = g_type_info_get_interface (type_info);
+ switch (g_base_info_get_type (interface))
+ {
+ case GI_INFO_TYPE_STRUCT:
+ case GI_INFO_TYPE_UNION:
+ case GI_INFO_TYPE_BOXED:
+ /* Needs to be handled by the language binding directly */
+ break;
+ case GI_INFO_TYPE_OBJECT:
+ break;
+ case GI_INFO_TYPE_ENUM:
+ case GI_INFO_TYPE_FLAGS:
{
- case GI_INFO_TYPE_STRUCT:
- case GI_INFO_TYPE_UNION:
- case GI_INFO_TYPE_BOXED:
- /* Needs to be handled by the language binding directly */
- break;
- case GI_INFO_TYPE_OBJECT:
- break;
- case GI_INFO_TYPE_ENUM:
- case GI_INFO_TYPE_FLAGS:
- {
- /* FIXME: there's a mismatch here between the value->v_int we use
- * here and the glong result returned from g_value_info_get_value().
- * But to switch this to glong, we'd have to make g_function_info_invoke()
- * translate value->v_long to the proper ABI for an enum function
- * call parameter, which will usually be int, and then fix up language
- * bindings.
- */
- GITypeTag storage_type = g_enum_info_get_storage_type ((GIEnumInfo *)interface);
- switch (storage_type)
- {
- case GI_TYPE_TAG_INT8:
- case GI_TYPE_TAG_UINT8:
- value->v_int = (gint)G_STRUCT_MEMBER(guint8, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT16:
- case GI_TYPE_TAG_UINT16:
- case GI_TYPE_TAG_SHORT:
- case GI_TYPE_TAG_USHORT:
- value->v_int = (gint)G_STRUCT_MEMBER(guint16, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT32:
- case GI_TYPE_TAG_UINT32:
- case GI_TYPE_TAG_INT:
- case GI_TYPE_TAG_UINT:
- value->v_int = (gint)G_STRUCT_MEMBER(guint32, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT64:
- case GI_TYPE_TAG_UINT64:
- value->v_int = (gint)G_STRUCT_MEMBER(guint64, mem, offset);
- result = TRUE;
- break;
- case GI_TYPE_TAG_LONG:
- case GI_TYPE_TAG_ULONG:
- value->v_int = (gint)G_STRUCT_MEMBER(gulong, mem, offset);
- result = TRUE;
- break;
- default:
- g_warning("Field %s: Unexpected enum storage type %s",
- g_base_info_get_name ((GIBaseInfo *)field_info),
- g_type_tag_to_string (storage_type));
- break;
- }
- break;
- }
- case GI_INFO_TYPE_VFUNC:
- case GI_INFO_TYPE_CALLBACK:
- g_warning("Field %s: Interface type %d should have is_pointer set",
- g_base_info_get_name ((GIBaseInfo *)field_info),
- g_base_info_get_type (interface));
- break;
- case GI_INFO_TYPE_INVALID:
- case GI_INFO_TYPE_INTERFACE:
- case GI_INFO_TYPE_FUNCTION:
- case GI_INFO_TYPE_CONSTANT:
- case GI_INFO_TYPE_ERROR_DOMAIN:
- case GI_INFO_TYPE_VALUE:
- case GI_INFO_TYPE_SIGNAL:
- case GI_INFO_TYPE_PROPERTY:
- case GI_INFO_TYPE_FIELD:
- case GI_INFO_TYPE_ARG:
- case GI_INFO_TYPE_TYPE:
- case GI_INFO_TYPE_UNRESOLVED:
- g_warning("Field %s: Interface type %d not expected",
- g_base_info_get_name ((GIBaseInfo *)field_info),
- g_base_info_get_type (interface));
+ /* FIXME: there's a mismatch here between the value->v_int we use
+ * here and the glong result returned from g_value_info_get_value().
+ * But to switch this to glong, we'd have to make g_function_info_invoke()
+ * translate value->v_long to the proper ABI for an enum function
+ * call parameter, which will usually be int, and then fix up language
+ * bindings.
+ */
+ GITypeTag storage_type = g_enum_info_get_storage_type ((GIEnumInfo *)interface);
+ switch (storage_type)
+ {
+ case GI_TYPE_TAG_INT8:
+ case GI_TYPE_TAG_UINT8:
+ value->v_int = (gint)G_STRUCT_MEMBER (guint8, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT16:
+ case GI_TYPE_TAG_UINT16:
+ case GI_TYPE_TAG_SHORT:
+ case GI_TYPE_TAG_USHORT:
+ value->v_int = (gint)G_STRUCT_MEMBER (guint16, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT32:
+ case GI_TYPE_TAG_UINT32:
+ case GI_TYPE_TAG_INT:
+ case GI_TYPE_TAG_UINT:
+ value->v_int = (gint)G_STRUCT_MEMBER (guint32, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT64:
+ case GI_TYPE_TAG_UINT64:
+ value->v_int = (gint)G_STRUCT_MEMBER (guint64, mem, offset);
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_LONG:
+ case GI_TYPE_TAG_ULONG:
+ value->v_int = (gint)G_STRUCT_MEMBER (gulong, mem, offset);
+ result = TRUE;
+ break;
+ default:
+ g_warning("Field %s: Unexpected enum storage type %s",
+ g_base_info_get_name ((GIBaseInfo *)field_info),
+ g_type_tag_to_string (storage_type));
+ break;
+ }
break;
}
+ case GI_INFO_TYPE_VFUNC:
+ case GI_INFO_TYPE_CALLBACK:
+ g_warning("Field %s: Interface type %d should have is_pointer set",
+ g_base_info_get_name ((GIBaseInfo *)field_info),
+ g_base_info_get_type (interface));
+ break;
+ case GI_INFO_TYPE_INVALID:
+ case GI_INFO_TYPE_INTERFACE:
+ case GI_INFO_TYPE_FUNCTION:
+ case GI_INFO_TYPE_CONSTANT:
+ case GI_INFO_TYPE_ERROR_DOMAIN:
+ case GI_INFO_TYPE_VALUE:
+ case GI_INFO_TYPE_SIGNAL:
+ case GI_INFO_TYPE_PROPERTY:
+ case GI_INFO_TYPE_FIELD:
+ case GI_INFO_TYPE_ARG:
+ case GI_INFO_TYPE_TYPE:
+ case GI_INFO_TYPE_UNRESOLVED:
+ g_warning("Field %s: Interface type %d not expected",
+ g_base_info_get_name ((GIBaseInfo *)field_info),
+ g_base_info_get_type (interface));
+ break;
+ }
- g_base_info_unref ((GIBaseInfo *)interface);
- break;
- }
+ g_base_info_unref ((GIBaseInfo *)interface);
break;
}
- }
+ break;
+ }
+ }
- g_base_info_unref ((GIBaseInfo *)type_info);
+ g_base_info_unref ((GIBaseInfo *)type_info);
- return result;
+ return result;
}
/**
@@ -326,184 +374,187 @@ g_field_info_set_field (GIFieldInfo *field_info,
gpointer mem,
const GArgument *value)
{
- int offset;
- GITypeInfo *type_info;
- gboolean result = FALSE;
+ int offset;
+ GITypeInfo *type_info;
+ gboolean result = FALSE;
- if ((g_field_info_get_flags (field_info) & GI_FIELD_IS_WRITABLE) == 0)
- return FALSE;
+ g_return_val_if_fail (field_info != NULL, FALSE);
+ g_return_val_if_fail (GI_IS_FIELD_INFO (field_info), FALSE);
- offset = g_field_info_get_offset (field_info);
- type_info = g_field_info_get_type (field_info);
+ if ((g_field_info_get_flags (field_info) & GI_FIELD_IS_WRITABLE) == 0)
+ return FALSE;
- if (!g_type_info_is_pointer (type_info))
- {
- switch (g_type_info_get_tag (type_info))
- {
- case GI_TYPE_TAG_VOID:
- g_warning("Field %s: should not be have void type",
- g_base_info_get_name ((GIBaseInfo *)field_info));
- break;
- case GI_TYPE_TAG_BOOLEAN:
- G_STRUCT_MEMBER(gboolean, mem, offset) = value->v_boolean != FALSE;
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT8:
- case GI_TYPE_TAG_UINT8:
- G_STRUCT_MEMBER(guint8, mem, offset) = value->v_uint8;
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT16:
- case GI_TYPE_TAG_UINT16:
- case GI_TYPE_TAG_SHORT:
- case GI_TYPE_TAG_USHORT:
- G_STRUCT_MEMBER(guint16, mem, offset) = value->v_uint16;
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT32:
- case GI_TYPE_TAG_UINT32:
- case GI_TYPE_TAG_INT:
- case GI_TYPE_TAG_UINT:
- G_STRUCT_MEMBER(guint32, mem, offset) = value->v_uint32;
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT64:
- case GI_TYPE_TAG_UINT64:
- G_STRUCT_MEMBER(guint64, mem, offset) = value->v_uint64;
- result = TRUE;
- break;
- case GI_TYPE_TAG_LONG:
- case GI_TYPE_TAG_ULONG:
- G_STRUCT_MEMBER(gulong, mem, offset)= value->v_ulong;
- result = TRUE;
- break;
- case GI_TYPE_TAG_SSIZE:
- case GI_TYPE_TAG_SIZE:
- case GI_TYPE_TAG_GTYPE:
- G_STRUCT_MEMBER(gsize, mem, offset) = value->v_size;
- result = TRUE;
- break;
- case GI_TYPE_TAG_FLOAT:
- G_STRUCT_MEMBER(gfloat, mem, offset) = value->v_float;
- result = TRUE;
- break;
- case GI_TYPE_TAG_DOUBLE:
- G_STRUCT_MEMBER(gdouble, mem, offset)= value->v_double;
- result = TRUE;
- break;
- case GI_TYPE_TAG_TIME_T:
+ offset = g_field_info_get_offset (field_info);
+ type_info = g_field_info_get_type (field_info);
+
+ if (!g_type_info_is_pointer (type_info))
+ {
+ switch (g_type_info_get_tag (type_info))
+ {
+ case GI_TYPE_TAG_VOID:
+ g_warning("Field %s: should not be have void type",
+ g_base_info_get_name ((GIBaseInfo *)field_info));
+ break;
+ case GI_TYPE_TAG_BOOLEAN:
+ G_STRUCT_MEMBER (gboolean, mem, offset) = value->v_boolean != FALSE;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT8:
+ case GI_TYPE_TAG_UINT8:
+ G_STRUCT_MEMBER (guint8, mem, offset) = value->v_uint8;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT16:
+ case GI_TYPE_TAG_UINT16:
+ case GI_TYPE_TAG_SHORT:
+ case GI_TYPE_TAG_USHORT:
+ G_STRUCT_MEMBER (guint16, mem, offset) = value->v_uint16;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT32:
+ case GI_TYPE_TAG_UINT32:
+ case GI_TYPE_TAG_INT:
+ case GI_TYPE_TAG_UINT:
+ G_STRUCT_MEMBER (guint32, mem, offset) = value->v_uint32;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT64:
+ case GI_TYPE_TAG_UINT64:
+ G_STRUCT_MEMBER (guint64, mem, offset) = value->v_uint64;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_LONG:
+ case GI_TYPE_TAG_ULONG:
+ G_STRUCT_MEMBER (gulong, mem, offset)= value->v_ulong;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_SSIZE:
+ case GI_TYPE_TAG_SIZE:
+ case GI_TYPE_TAG_GTYPE:
+ G_STRUCT_MEMBER (gsize, mem, offset) = value->v_size;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_FLOAT:
+ G_STRUCT_MEMBER (gfloat, mem, offset) = value->v_float;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_DOUBLE:
+ G_STRUCT_MEMBER (gdouble, mem, offset)= value->v_double;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_TIME_T:
#if SIZEOF_TIME_T == 4
- G_STRUCT_MEMBER(time_t, mem, offset) = value->v_int32;
+ G_STRUCT_MEMBER (time_t, mem, offset) = value->v_int32;
#elif SIZEOF_TIME_T == 8
- G_STRUCT_MEMBER(time_t, mem, offset) = value->v_int64;
+ G_STRUCT_MEMBER (time_t, mem, offset) = value->v_int64;
#else
# error "Unexpected size for time_t: not 4 or 8"
#endif
- result = TRUE;
- break;
- case GI_TYPE_TAG_UTF8:
- case GI_TYPE_TAG_FILENAME:
- case GI_TYPE_TAG_ARRAY:
- case GI_TYPE_TAG_GLIST:
- case GI_TYPE_TAG_GSLIST:
- case GI_TYPE_TAG_GHASH:
- g_warning("Field %s: type %s should have is_pointer set",
- g_base_info_get_name ((GIBaseInfo *)field_info),
- g_type_tag_to_string (g_type_info_get_tag (type_info)));
- break;
- case GI_TYPE_TAG_ERROR:
- /* Needs to be handled by the language binding directly */
- break;
- case GI_TYPE_TAG_INTERFACE:
- {
- GIBaseInfo *interface = g_type_info_get_interface (type_info);
- switch (g_base_info_get_type (interface))
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_UTF8:
+ case GI_TYPE_TAG_FILENAME:
+ case GI_TYPE_TAG_ARRAY:
+ case GI_TYPE_TAG_GLIST:
+ case GI_TYPE_TAG_GSLIST:
+ case GI_TYPE_TAG_GHASH:
+ g_warning("Field %s: type %s should have is_pointer set",
+ g_base_info_get_name ((GIBaseInfo *)field_info),
+ g_type_tag_to_string (g_type_info_get_tag (type_info)));
+ break;
+ case GI_TYPE_TAG_ERROR:
+ /* Needs to be handled by the language binding directly */
+ break;
+ case GI_TYPE_TAG_INTERFACE:
+ {
+ GIBaseInfo *interface = g_type_info_get_interface (type_info);
+ switch (g_base_info_get_type (interface))
+ {
+ case GI_INFO_TYPE_STRUCT:
+ case GI_INFO_TYPE_UNION:
+ case GI_INFO_TYPE_BOXED:
+ /* Needs to be handled by the language binding directly */
+ break;
+ case GI_INFO_TYPE_OBJECT:
+ break;
+ case GI_INFO_TYPE_ENUM:
+ case GI_INFO_TYPE_FLAGS:
{
- case GI_INFO_TYPE_STRUCT:
- case GI_INFO_TYPE_UNION:
- case GI_INFO_TYPE_BOXED:
- /* Needs to be handled by the language binding directly */
- break;
- case GI_INFO_TYPE_OBJECT:
- break;
- case GI_INFO_TYPE_ENUM:
- case GI_INFO_TYPE_FLAGS:
- {
- /* See FIXME above
- */
- GITypeTag storage_type = g_enum_info_get_storage_type ((GIEnumInfo *)interface);
- switch (storage_type)
- {
- case GI_TYPE_TAG_INT8:
- case GI_TYPE_TAG_UINT8:
- G_STRUCT_MEMBER(guint8, mem, offset) = (guint8)value->v_int;
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT16:
- case GI_TYPE_TAG_UINT16:
- case GI_TYPE_TAG_SHORT:
- case GI_TYPE_TAG_USHORT:
- G_STRUCT_MEMBER(guint16, mem, offset) = (guint16)value->v_int;
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT32:
- case GI_TYPE_TAG_UINT32:
- case GI_TYPE_TAG_INT:
- case GI_TYPE_TAG_UINT:
- G_STRUCT_MEMBER(guint32, mem, offset) = (guint32)value->v_int;
- result = TRUE;
- break;
- case GI_TYPE_TAG_INT64:
- case GI_TYPE_TAG_UINT64:
- G_STRUCT_MEMBER(guint64, mem, offset) = (guint64)value->v_int;
- result = TRUE;
- break;
- case GI_TYPE_TAG_LONG:
- case GI_TYPE_TAG_ULONG:
- G_STRUCT_MEMBER(gulong, mem, offset) = (gulong)value->v_int;
- result = TRUE;
- break;
- default:
- g_warning("Field %s: Unexpected enum storage type %s",
- g_base_info_get_name ((GIBaseInfo *)field_info),
- g_type_tag_to_string (storage_type));
- break;
- }
- break;
- }
- break;
- case GI_INFO_TYPE_VFUNC:
- case GI_INFO_TYPE_CALLBACK:
- g_warning("Field%s: Interface type %d should have is_pointer set",
- g_base_info_get_name ((GIBaseInfo *)field_info),
- g_base_info_get_type (interface));
- break;
- case GI_INFO_TYPE_INVALID:
- case GI_INFO_TYPE_INTERFACE:
- case GI_INFO_TYPE_FUNCTION:
- case GI_INFO_TYPE_CONSTANT:
- case GI_INFO_TYPE_ERROR_DOMAIN:
- case GI_INFO_TYPE_VALUE:
- case GI_INFO_TYPE_SIGNAL:
- case GI_INFO_TYPE_PROPERTY:
- case GI_INFO_TYPE_FIELD:
- case GI_INFO_TYPE_ARG:
- case GI_INFO_TYPE_TYPE:
- case GI_INFO_TYPE_UNRESOLVED:
- g_warning("Field %s: Interface type %d not expected",
- g_base_info_get_name ((GIBaseInfo *)field_info),
- g_base_info_get_type (interface));
+ /* See FIXME above
+ */
+ GITypeTag storage_type = g_enum_info_get_storage_type ((GIEnumInfo *)interface);
+ switch (storage_type)
+ {
+ case GI_TYPE_TAG_INT8:
+ case GI_TYPE_TAG_UINT8:
+ G_STRUCT_MEMBER (guint8, mem, offset) = (guint8)value->v_int;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT16:
+ case GI_TYPE_TAG_UINT16:
+ case GI_TYPE_TAG_SHORT:
+ case GI_TYPE_TAG_USHORT:
+ G_STRUCT_MEMBER (guint16, mem, offset) = (guint16)value->v_int;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT32:
+ case GI_TYPE_TAG_UINT32:
+ case GI_TYPE_TAG_INT:
+ case GI_TYPE_TAG_UINT:
+ G_STRUCT_MEMBER (guint32, mem, offset) = (guint32)value->v_int;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_INT64:
+ case GI_TYPE_TAG_UINT64:
+ G_STRUCT_MEMBER (guint64, mem, offset) = (guint64)value->v_int;
+ result = TRUE;
+ break;
+ case GI_TYPE_TAG_LONG:
+ case GI_TYPE_TAG_ULONG:
+ G_STRUCT_MEMBER (gulong, mem, offset) = (gulong)value->v_int;
+ result = TRUE;
+ break;
+ default:
+ g_warning("Field %s: Unexpected enum storage type %s",
+ g_base_info_get_name ((GIBaseInfo *)field_info),
+ g_type_tag_to_string (storage_type));
+ break;
+ }
break;
}
+ break;
+ case GI_INFO_TYPE_VFUNC:
+ case GI_INFO_TYPE_CALLBACK:
+ g_warning("Field%s: Interface type %d should have is_pointer set",
+ g_base_info_get_name ((GIBaseInfo *)field_info),
+ g_base_info_get_type (interface));
+ break;
+ case GI_INFO_TYPE_INVALID:
+ case GI_INFO_TYPE_INTERFACE:
+ case GI_INFO_TYPE_FUNCTION:
+ case GI_INFO_TYPE_CONSTANT:
+ case GI_INFO_TYPE_ERROR_DOMAIN:
+ case GI_INFO_TYPE_VALUE:
+ case GI_INFO_TYPE_SIGNAL:
+ case GI_INFO_TYPE_PROPERTY:
+ case GI_INFO_TYPE_FIELD:
+ case GI_INFO_TYPE_ARG:
+ case GI_INFO_TYPE_TYPE:
+ case GI_INFO_TYPE_UNRESOLVED:
+ g_warning("Field %s: Interface type %d not expected",
+ g_base_info_get_name ((GIBaseInfo *)field_info),
+ g_base_info_get_type (interface));
+ break;
+ }
- g_base_info_unref ((GIBaseInfo *)interface);
- break;
- }
+ g_base_info_unref ((GIBaseInfo *)interface);
break;
}
- }
+ break;
+ }
+ }
- g_base_info_unref ((GIBaseInfo *)type_info);
+ g_base_info_unref ((GIBaseInfo *)type_info);
- return result;
+ return result;
}