Module: wine Branch: master Commit: 3cd67463bf0bd41b8fe5e8d811683129fcaea6f1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3cd67463bf0bd41b8fe5e8d811...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Tue Nov 3 13:30:42 2015 +0800
widl: Attribute uuid() takes precedence over 'hidden'.
This means that definition like
[uuid(016fe2ec-b2c8-45f8-b23b-39e53a753900),hidden] typedef struct _m { int m1; } m;
makes both '_m' and 'm' appear in the typelib, and the tests confirm that.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
tools/widl/parser.y | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y index b42b4a2..e7f2ead 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -123,7 +123,6 @@ static statement_t *make_statement_importlib(const char *str); static statement_t *make_statement_module(type_t *type); static statement_t *make_statement_typedef(var_list_t *names); static statement_t *make_statement_import(const char *str); -static statement_t *make_statement_typedef(var_list_t *names); static statement_list_t *append_statement(statement_list_t *list, statement_t *stmt); static statement_list_t *append_statements(statement_list_t *, statement_list_t *); static attr_list_t *append_attribs(attr_list_t *, attr_list_t *); @@ -1881,22 +1880,20 @@ static type_t *reg_typedefs(decl_spec_t *decl_spec, declarator_list_t *decls, at const declarator_t *decl; type_t *type = decl_spec->type;
+ if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC)) + attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) ); + /* We must generate names for tagless enum, struct or union. Typedef-ing a tagless enum, struct or union means we want the typedef to be included in a library hence the public attribute. */ - if ((type_get_type_detect_alias(type) == TYPE_ENUM || - type_get_type_detect_alias(type) == TYPE_STRUCT || - type_get_type_detect_alias(type) == TYPE_UNION || - type_get_type_detect_alias(type) == TYPE_ENCAPSULATED_UNION) && - !type->name) + if (type_get_type_detect_alias(type) == TYPE_ENUM || + type_get_type_detect_alias(type) == TYPE_STRUCT || + type_get_type_detect_alias(type) == TYPE_UNION || + type_get_type_detect_alias(type) == TYPE_ENCAPSULATED_UNION) { - if (! is_attr(attrs, ATTR_PUBLIC) && ! is_attr (attrs, ATTR_HIDDEN)) - attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) ); - type->name = gen_name(); + if (!type->name) + type->name = gen_name(); } - else if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC) - && !is_attr(attrs, ATTR_HIDDEN)) - attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) );
LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry ) {