diff options
-rw-r--r-- | giscanner/scannerparser.y | 27 | ||||
-rw-r--r-- | tests/scanner/regress.c | 2 | ||||
-rw-r--r-- | tests/scanner/regress.h | 2 |
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" |