From: Tomeu Vizoso Date: Mon, 3 May 2010 17:17:00 +0000 (+0200) Subject: Revert "Add support for GArrays: add g_type_info_get_array_type() and properly scan... X-Git-Tag: GOBJECT_INTROSPECTION_0_6_11~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=39f2997b9f32598fa2288cdac36f513fcab590b5;p=platform%2Fupstream%2Fgobject-introspection.git Revert "Add support for GArrays: add g_type_info_get_array_type() and properly scan GArray args" This reverts commit 87291e08b0fd34b62e1ad9811c174108b38311a9. --- diff --git a/gir/gimarshallingtests.c b/gir/gimarshallingtests.c index 0a8b794..c48a430 100644 --- a/gir/gimarshallingtests.c +++ b/gir/gimarshallingtests.c @@ -1318,269 +1318,6 @@ g_i_marshalling_tests_array_zero_terminated_inout (gchar ***utf8s) /** - * g_i_marshalling_tests_garray_int_none_return: - * Returns: (element-type gint) (transfer none): - */ -GArray * -g_i_marshalling_tests_garray_int_none_return (void) -{ - static GArray *array = NULL; - gint i; - - if (array == NULL) { - array = g_array_new (TRUE, TRUE, sizeof (gint)); - for (i = -1; i < 3; i++) - g_array_append_val (array, i); - } - - return array; -} - -/** - * g_i_marshalling_tests_garray_utf8_none_return: - * Returns: (element-type utf8) (transfer none): - */ -GArray * -g_i_marshalling_tests_garray_utf8_none_return (void) -{ - static GArray *array = NULL; - static gchar *values[] = {"0", "1", "2", NULL}; - gint i; - - if (array == NULL) { - array = g_array_new (TRUE, TRUE, sizeof (gint)); - for (i = 0; values[i]; i++) - g_array_append_val (array, values[i]); - } - - return array; -} - -/** - * g_i_marshalling_tests_garray_utf8_container_return: - * Returns: (element-type utf8) (transfer container): - */ -GArray * -g_i_marshalling_tests_garray_utf8_container_return (void) -{ - GArray *array = NULL; - static gchar *values[] = {"0", "1", "2", NULL}; - gint i; - - array = g_array_new (TRUE, TRUE, sizeof (gint)); - for (i = 0; values[i]; i++) - g_array_append_val (array, values[i]); - - return array; -} - -/** - * g_i_marshalling_tests_garray_utf8_full_return: - * Returns: (element-type utf8) (transfer full): - */ -GArray * -g_i_marshalling_tests_garray_utf8_full_return (void) -{ - GArray *array = NULL; - static gchar *values[] = {"0", "1", "2", NULL}; - gint i; - - array = g_array_new (TRUE, TRUE, sizeof (gint)); - for (i = 0; values[i]; i++) { - gchar *str = g_strdup (values[i]); - g_array_append_val (array, str); - } - - return array; -} - -/** - * g_i_marshalling_tests_garray_int_none_in: - * @array_: (element-type gint) (transfer none): - */ -void -g_i_marshalling_tests_garray_int_none_in (GArray *array_) -{ - g_assert (array_->len == 4); - g_assert (g_array_index (array_, gint, 0) == -1); - g_assert (g_array_index (array_, gint, 1) == 0); - g_assert (g_array_index (array_, gint, 2) == 1); - g_assert (g_array_index (array_, gint, 3) == 2); -} - -/** - * g_i_marshalling_tests_garray_utf8_none_in: - * @array_: (element-type utf8) (transfer none): - */ -void -g_i_marshalling_tests_garray_utf8_none_in (GArray *array_) -{ - g_assert (array_->len == 3); - g_assert (strcmp (g_array_index (array_, gchar*, 0), "0") == 0); - g_assert (strcmp (g_array_index (array_, gchar*, 1), "1") == 0); - g_assert (strcmp (g_array_index (array_, gchar*, 2), "2") == 0); -} - -/** - * g_i_marshalling_tests_garray_utf8_container_in: - * @array_: (element-type utf8) (transfer container): - */ -void -g_i_marshalling_tests_garray_utf8_container_in (GArray *array_) -{ - g_assert (array_->len == 3); - g_assert (strcmp (g_array_index (array_, gchar*, 0), "0") == 0); - g_assert (strcmp (g_array_index (array_, gchar*, 1), "1") == 0); - g_assert (strcmp (g_array_index (array_, gchar*, 2), "2") == 0); - g_array_free (array_, TRUE); -} - -/** - * g_i_marshalling_tests_garray_utf8_full_in: - * @array_: (element-type utf8) (transfer full): - */ -void -g_i_marshalling_tests_garray_utf8_full_in (GArray *array_) -{ - g_assert (array_->len == 3); - g_assert (strcmp (g_array_index (array_, gchar*, 0), "0") == 0); - g_assert (strcmp (g_array_index (array_, gchar*, 1), "1") == 0); - g_assert (strcmp (g_array_index (array_, gchar*, 2), "2") == 0); - g_free (g_array_index (array_, gchar*, 0)); - g_free (g_array_index (array_, gchar*, 1)); - g_free (g_array_index (array_, gchar*, 2)); - g_array_free (array_, TRUE); -} - -/** - * g_i_marshalling_tests_garray_utf8_none_out: - * @array_: (out) (element-type utf8) (transfer none): - */ -void -g_i_marshalling_tests_garray_utf8_none_out (GArray **array_) -{ - static GArray *internal = NULL; - static gchar *values[] = {"0", "1", "2", NULL}; - gint i; - - if (internal == NULL) { - internal = g_array_new (TRUE, TRUE, sizeof (gint)); - for (i = 0; values[i]; i++) - g_array_append_val (internal, values[i]); - } - - *array_ = internal; -} - -/** - * g_i_marshalling_tests_garray_utf8_container_out: - * @array_: (out) (element-type utf8) (transfer container): - */ -void -g_i_marshalling_tests_garray_utf8_container_out (GArray **array_) -{ - static gchar *values[] = {"0", "1", "2", NULL}; - gint i; - - *array_ = NULL; - - *array_ = g_array_new (TRUE, TRUE, sizeof (gint)); - for (i = 0; values[i]; i++) - g_array_append_val (*array_, values[i]); -} - -/** - * g_i_marshalling_tests_garray_utf8_full_out: - * @array_: (out) (element-type utf8) (transfer full): - */ -void -g_i_marshalling_tests_garray_utf8_full_out (GArray **array_) -{ - static gchar *values[] = {"0", "1", "2", NULL}; - gint i; - - *array_ = NULL; - - *array_ = g_array_new (TRUE, TRUE, sizeof (gint)); - for (i = 0; values[i]; i++) { - gchar *str = g_strdup (values[i]); - g_array_append_val (*array_, str); - } -} - -/** - * g_i_marshalling_tests_garray_utf8_none_inout: - * @array_: (inout) (element-type utf8) (transfer none): - */ -void -g_i_marshalling_tests_garray_utf8_none_inout (GArray **array_) -{ - static GArray *internal = NULL; - static gchar *values[] = {"-2", "-1", "0", "1", NULL}; - gint i; - - g_assert ((*array_)->len == 3); - g_assert (strcmp (g_array_index (*array_, gchar*, 0), "0") == 0); - g_assert (strcmp (g_array_index (*array_, gchar*, 1), "1") == 0); - g_assert (strcmp (g_array_index (*array_, gchar*, 2), "2") == 0); - - if (internal == NULL) { - internal = g_array_new (TRUE, TRUE, sizeof (gint)); - for (i = 0; values[i]; i++) - g_array_append_val (internal, values[i]); - } - - *array_ = internal; -} - -/** - * g_i_marshalling_tests_garray_utf8_container_inout: - * @array_: (inout) (element-type utf8) (transfer container): - */ -void -g_i_marshalling_tests_garray_utf8_container_inout (GArray **array_) -{ - static gchar *val1 = "-1"; - static gchar *val2 = "-2"; - - g_assert ((*array_)->len == 3); - g_assert (strcmp (g_array_index (*array_, gchar*, 0), "0") == 0); - g_assert (strcmp (g_array_index (*array_, gchar*, 1), "1") == 0); - g_assert (strcmp (g_array_index (*array_, gchar*, 2), "2") == 0); - - g_array_remove_index (*array_, (*array_)->len - 1); - - g_array_prepend_val (*array_, val1); - g_array_prepend_val (*array_, val2); -} - -/** - * g_i_marshalling_tests_garray_utf8_full_inout: - * @array_: (inout) (element-type utf8) (transfer full): - */ -void -g_i_marshalling_tests_garray_utf8_full_inout (GArray **array_) -{ - static gchar *val1 = "-1"; - static gchar *val2 = "-2"; - gchar *val; - - g_assert ((*array_)->len == 3); - g_assert (strcmp (g_array_index (*array_, gchar*, 0), "0") == 0); - g_assert (strcmp (g_array_index (*array_, gchar*, 1), "1") == 0); - g_assert (strcmp (g_array_index (*array_, gchar*, 2), "2") == 0); - - g_free (g_array_index (*array_, gchar*, (*array_)->len - 1)); - g_array_remove_index (*array_, (*array_)->len - 1); - - val = g_strdup (val1); - g_array_prepend_val (*array_, val); - - val = g_strdup (val2); - g_array_prepend_val (*array_, val); -} - -/** * g_i_marshalling_tests_glist_int_none_return: * Returns: (element-type gint) (transfer none): */ diff --git a/gir/gimarshallingtests.h b/gir/gimarshallingtests.h index dd41866..298f544 100644 --- a/gir/gimarshallingtests.h +++ b/gir/gimarshallingtests.h @@ -296,26 +296,6 @@ void g_i_marshalling_tests_array_zero_terminated_out (gchar ***utf8s); void g_i_marshalling_tests_array_zero_terminated_inout (gchar ***utf8s); -/* GArray */ - -GArray *g_i_marshalling_tests_garray_int_none_return (void); -GArray *g_i_marshalling_tests_garray_utf8_none_return (void); -GArray *g_i_marshalling_tests_garray_utf8_container_return (void); -GArray *g_i_marshalling_tests_garray_utf8_full_return (void); - -void g_i_marshalling_tests_garray_int_none_in (GArray *array_); -void g_i_marshalling_tests_garray_utf8_none_in (GArray *array_); -void g_i_marshalling_tests_garray_utf8_container_in (GArray *array_); -void g_i_marshalling_tests_garray_utf8_full_in (GArray *array_); - -void g_i_marshalling_tests_garray_utf8_none_out (GArray **array_); -void g_i_marshalling_tests_garray_utf8_container_out (GArray **array_); -void g_i_marshalling_tests_garray_utf8_full_out (GArray **array_); - -void g_i_marshalling_tests_garray_utf8_none_inout (GArray **array_); -void g_i_marshalling_tests_garray_utf8_container_inout (GArray **array_); -void g_i_marshalling_tests_garray_utf8_full_inout (GArray **array_); - /* GList */ GList *g_i_marshalling_tests_glist_int_none_return (void); diff --git a/girepository/ginfo.c b/girepository/ginfo.c index 1d56a22..724109f 100644 --- a/girepository/ginfo.c +++ b/girepository/ginfo.c @@ -1093,23 +1093,6 @@ g_type_info_is_zero_terminated (GITypeInfo *info) return FALSE; } -GIArrayType -g_type_info_get_array_type (GITypeInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - SimpleTypeBlob *type = (SimpleTypeBlob *)&rinfo->typelib->data[rinfo->offset]; - - if (!(type->flags.reserved == 0 && type->flags.reserved2 == 0)) - { - ArrayTypeBlob *blob = (ArrayTypeBlob *)&rinfo->typelib->data[rinfo->offset]; - g_return_val_if_fail (blob->tag == GI_TYPE_TAG_ARRAY, -1); - - return blob->array_type; - } - - return -1; -} - gint g_type_info_get_n_error_domains (GITypeInfo *info) { diff --git a/girepository/girepository.h b/girepository/girepository.h index 9e62ab1..cfa5b39 100644 --- a/girepository/girepository.h +++ b/girepository/girepository.h @@ -383,13 +383,6 @@ typedef enum { * See docs/typelib-format.txt SimpleTypeBlob definition */ } GITypeTag; -typedef enum { - GI_ARRAY_TYPE_C, - GI_ARRAY_TYPE_ARRAY, - GI_ARRAY_TYPE_PTR_ARRAY, - GI_ARRAY_TYPE_BYTE_ARRAY -} GIArrayType; - #define G_TYPE_TAG_IS_BASIC(tag) (tag < GI_TYPE_TAG_ARRAY) const gchar* g_type_tag_to_string (GITypeTag type); @@ -402,7 +395,6 @@ GIBaseInfo * g_type_info_get_interface (GITypeInfo *info); gint g_type_info_get_array_length (GITypeInfo *info); gint g_type_info_get_array_fixed_size(GITypeInfo *info); gboolean g_type_info_is_zero_terminated (GITypeInfo *info); -GIArrayType g_type_info_get_array_type (GITypeInfo *info); gint g_type_info_get_n_error_domains (GITypeInfo *info); GIErrorDomainInfo *g_type_info_get_error_domain (GITypeInfo *info, diff --git a/girepository/girnode.c b/girepository/girnode.c index 6f4a44a..1694406 100644 --- a/girepository/girnode.c +++ b/girepository/girnode.c @@ -1497,7 +1497,6 @@ g_ir_node_build_typelib (GIrNode *node, array->zero_terminated = type->zero_terminated; array->has_length = type->has_length; array->has_size = type->has_size; - array->array_type = type->array_type; array->reserved2 = 0; if (array->has_length) array->dimensions.length = type->length; diff --git a/girepository/girnode.h b/girepository/girnode.h index 5e6cba0..7fe235b 100644 --- a/girepository/girnode.h +++ b/girepository/girnode.h @@ -138,7 +138,6 @@ struct _GIrNodeType gint length; gboolean has_size; gint size; - gint array_type; GIrNodeType *parameter_type1; GIrNodeType *parameter_type2; diff --git a/girepository/girparser.c b/girepository/girparser.c index 85f85e2..5b24604 100644 --- a/girepository/girparser.c +++ b/girepository/girparser.c @@ -1717,40 +1717,22 @@ start_type (GMarkupParseContext *context, typenode->is_pointer = TRUE; typenode->is_array = TRUE; - ctype = find_attribute ("c:type", attribute_names, attribute_values); - if (g_str_has_prefix (ctype, "GArray")) { - typenode->array_type = GI_ARRAY_TYPE_ARRAY; - } else if (g_str_has_prefix (ctype, "GByteArray")) { - typenode->array_type = GI_ARRAY_TYPE_BYTE_ARRAY; - } else if (g_str_has_prefix (ctype, "GPtrArray")) { - typenode->array_type = GI_ARRAY_TYPE_PTR_ARRAY; - } else { - typenode->array_type = GI_ARRAY_TYPE_C; - } + zero = find_attribute ("zero-terminated", attribute_names, attribute_values); + len = find_attribute ("length", attribute_names, attribute_values); + size = find_attribute ("fixed-size", attribute_names, attribute_values); - if (typenode->array_type == GI_ARRAY_TYPE_C) { - zero = find_attribute ("zero-terminated", attribute_names, attribute_values); - len = find_attribute ("length", attribute_names, attribute_values); - size = find_attribute ("fixed-size", attribute_names, attribute_values); - - typenode->has_length = len != NULL; - typenode->length = typenode->has_length ? atoi (len) : -1; - - typenode->has_size = size != NULL; - typenode->size = typenode->has_size ? atoi (size) : -1; - - if (zero) - typenode->zero_terminated = strcmp(zero, "1") == 0; - else - /* If neither zero-terminated nor length nor fixed-size is given, assume zero-terminated. */ - typenode->zero_terminated = !(typenode->has_length || typenode->has_size); - } else { - typenode->zero_terminated = FALSE; - typenode->has_length = FALSE; - typenode->length = -1; - typenode->has_size = FALSE; - typenode->size = -1; - } + typenode->zero_terminated = !(zero && strcmp (zero, "1") != 0); + typenode->has_length = len != NULL; + typenode->length = typenode->has_length ? atoi (len) : -1; + + typenode->has_size = size != NULL; + typenode->size = typenode->has_size ? atoi (size) : -1; + + if (zero) + typenode->zero_terminated = strcmp(zero, "1") == 0; + else + /* If neither zero-terminated nor length nor fixed-size is given, assume zero-terminated. */ + typenode->zero_terminated = !(typenode->has_length || typenode->has_size); } else { diff --git a/girepository/gtypelib.h b/girepository/gtypelib.h index 8208014..14edc98 100644 --- a/girepository/gtypelib.h +++ b/girepository/gtypelib.h @@ -524,14 +524,9 @@ typedef struct { * of the array. If both has_length and zero_terminated are set, the * convention is to pass -1 for the length if the array is * zero-terminated. - * @has_size: Indicates that size is the fixed size of the array. - * @array_type: Indicates whether this is a C array, GArray, GPtrArray, or - * GByteArray. If something other than a C array, the length and element size - * are implicit in the structure. * @length: The index of the parameter which is used to pass the length of the * array. The parameter must be an integer type and have the same * direction as this one. - * @size: The fixed size of the array. * @type: The type of the array elements. * * Arrays are passed by reference, thus is_pointer is always 1. @@ -544,8 +539,7 @@ typedef struct { guint16 zero_terminated :1; guint16 has_length :1; guint16 has_size :1; - guint16 array_type :2; - guint16 reserved2 :3; + guint16 reserved2 :5; union { guint16 length; diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py index f70bfa4..3480ac7 100644 --- a/giscanner/annotationparser.py +++ b/giscanner/annotationparser.py @@ -605,12 +605,6 @@ class AnnotationApplier(object): has_element_type = OPT_ELEMENT_TYPE in options has_array = OPT_ARRAY in options - if not has_array: - has_array = \ - node.type.name in ['GLib.Array', 'GLib.PtrArray', - 'GLib.ByteArray'] or \ - node.type.ctype in ['GArray*', 'GPtrArray*', 'GByteArray*'] - # FIXME: This is a hack :-( if (not isinstance(node, Field) and (not has_element_type and diff --git a/tests/scanner/foo-1.0-expected.gir b/tests/scanner/foo-1.0-expected.gir index 3bd2d89..d29a068 100644 --- a/tests/scanner/foo-1.0-expected.gir +++ b/tests/scanner/foo-1.0-expected.gir @@ -789,13 +789,6 @@ uses a C sugar return type."> - - - - - - - diff --git a/tests/scanner/foo-1.0-expected.tgir b/tests/scanner/foo-1.0-expected.tgir index 29753af..ea7aa70 100644 --- a/tests/scanner/foo-1.0-expected.tgir +++ b/tests/scanner/foo-1.0-expected.tgir @@ -645,13 +645,6 @@ - - - - - - - diff --git a/tests/scanner/foo.c b/tests/scanner/foo.c index a404aac..d2fb23b 100644 --- a/tests/scanner/foo.c +++ b/tests/scanner/foo.c @@ -455,16 +455,6 @@ foo_test_string_array (char **array) } /** - * foo_test_array: - * Returns: (element-type utf8) (transfer container): - */ -GArray * -foo_test_array (void) -{ - return NULL; -} - -/** * foo_rectangle_add: * @r1: (inout): add to this rect * @r2: source rectangle diff --git a/tests/scanner/foo.h b/tests/scanner/foo.h index 0ebcca2..61c2ca4 100644 --- a/tests/scanner/foo.h +++ b/tests/scanner/foo.h @@ -334,8 +334,6 @@ void foo_test_string_array (char **array); void foo_test_string_array_with_g (gchar **array); -GArray *foo_test_array (void); - const char * foo_test_const_char_retval (void); const FooStruct * foo_test_const_struct_retval (void); void foo_test_const_char_param (const char * param);