summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--giscanner/scannerparser.y27
-rw-r--r--tests/scanner/regress.c2
-rw-r--r--tests/scanner/regress.h2
3 files changed, 27 insertions, 4 deletions
diff --git a/giscanner/scannerparser.y b/giscanner/scannerparser.y
index d9490b00..2735f5f4 100644
--- a/giscanner/scannerparser.y
+++ b/giscanner/scannerparser.y
@@ -206,6 +206,29 @@ toggle_conditional (GISourceScanner *scanner)
}
}
+static void
+set_or_merge_base_type (GISourceType *type,
+ GISourceType *base)
+{
+ if (base->type == CTYPE_INVALID)
+ {
+ g_assert (base->base_type == NULL);
+
+ type->storage_class_specifier |= base->storage_class_specifier;
+ type->type_qualifier |= base->type_qualifier;
+ type->function_specifier |= base->function_specifier;
+ type->is_bitfield |= base->is_bitfield;
+
+ ctype_free (base);
+ }
+ else
+ {
+ g_assert (type->base_type == NULL);
+
+ type->base_type = base;
+ }
+}
+
%}
%error-verbose
@@ -786,7 +809,7 @@ declaration_specifiers
$$->name = name;
ctype_free ($2);
} else {
- $$->base_type = $2;
+ set_or_merge_base_type ($1, $2);
}
}
| type_specifier
@@ -983,7 +1006,7 @@ specifier_qualifier_list
: type_specifier specifier_qualifier_list
{
$$ = $1;
- $$->base_type = $2;
+ set_or_merge_base_type ($1, $2);
}
| type_specifier
| type_qualifier specifier_qualifier_list
diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c
index 92bf6c4e..85e00d9b 100644
--- a/tests/scanner/regress.c
+++ b/tests/scanner/regress.c
@@ -4294,7 +4294,7 @@ regress_test_versioning (void)
void
regress_like_xkl_config_item_set_name (RegressLikeXklConfigItem *self,
- const char *name)
+ char const *name)
{
strncpy (self->name, name, sizeof (self->name) - 1);
self->name[sizeof(self->name)-1] = '\0';
diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h
index 7f315fdc..cf0059e4 100644
--- a/tests/scanner/regress.h
+++ b/tests/scanner/regress.h
@@ -1398,7 +1398,7 @@ typedef struct {
_GI_TEST_EXTERN
void regress_like_xkl_config_item_set_name (RegressLikeXklConfigItem *self,
- const char *name);
+ char const *name);
#define REGRESS_UTF8_CONSTANT "const \xe2\x99\xa5 utf8"