From: Richard Pospesel richard@torproject.org
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- This supersedes https://source.winehq.org/patches/data/167615.
tools/widl/parser.y | 8 +++++--- tools/widl/typetree.c | 4 ++-- tools/widl/typetree.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y index b75be01077..4421b6ef71 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -1188,7 +1188,8 @@ static void decl_builtin_basic(const char *name, enum type_basic_type type)
static void decl_builtin_alias(const char *name, type_t *t) { - reg_type(type_new_alias(t, name), name, NULL, 0); + const decl_spec_t ds = {.type = t}; + reg_type(type_new_alias(&ds, name), name, NULL, 0); }
void init_types(void) @@ -1802,7 +1803,8 @@ static declarator_t *make_declarator(var_t *var)
static type_t *make_safearray(type_t *type) { - const decl_spec_t ds = {.type = type_new_alias(type, "SAFEARRAY")}; + decl_spec_t ds = {.type = type}; + ds.type = type_new_alias(&ds, "SAFEARRAY"); return type_new_array(NULL, &ds, TRUE, 0, NULL, NULL, FC_RP); }
@@ -1976,7 +1978,7 @@ static type_t *reg_typedefs(decl_spec_t *decl_spec, declarator_list_t *decls, at cur->loc_info.line_number);
name = declare_var(attrs, decl_spec, decl, 0); - cur = type_new_alias(name->declspec.type, name->name); + cur = type_new_alias(&name->declspec, name->name); cur->attrs = attrs;
if (is_incomplete(cur)) diff --git a/tools/widl/typetree.c b/tools/widl/typetree.c index 3e9ac89ad9..ef9a6699b2 100644 --- a/tools/widl/typetree.c +++ b/tools/widl/typetree.c @@ -184,13 +184,13 @@ type_t *type_new_pointer(unsigned char pointer_default, type_t *ref, attr_list_t return t; }
-type_t *type_new_alias(type_t *t, const char *name) +type_t *type_new_alias(const decl_spec_t *t, const char *name) { type_t *a = make_type(TYPE_ALIAS);
a->name = xstrdup(name); a->attrs = NULL; - a->details.alias.aliasee.type = t; + a->details.alias.aliasee = *t; init_loc_info(&a->loc_info);
return a; diff --git a/tools/widl/typetree.h b/tools/widl/typetree.h index 9453e9d161..6377614999 100644 --- a/tools/widl/typetree.h +++ b/tools/widl/typetree.h @@ -31,7 +31,7 @@ enum name_type {
type_t *type_new_function(var_list_t *args); type_t *type_new_pointer(unsigned char pointer_default, type_t *ref, attr_list_t *attrs); -type_t *type_new_alias(type_t *t, const char *name); +type_t *type_new_alias(const decl_spec_t *t, const char *name); type_t *type_new_module(char *name); type_t *type_new_array(const char *name, const decl_spec_t *element, int declptr, unsigned int dim, expr_t *size_is, expr_t *length_is,