1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-08 20:06:18 +00:00

widl: Handle encapsulated unions in type libraries.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2019-08-21 11:18:07 -05:00 committed by Alexandre Julliard
parent 732f67ed38
commit 4f4763ab6b

View File

@ -976,6 +976,7 @@ static int encode_type(
switch (type_get_type(type)) switch (type_get_type(type))
{ {
case TYPE_STRUCT: case TYPE_STRUCT:
case TYPE_ENCAPSULATED_UNION:
add_structure_typeinfo(typelib, type); add_structure_typeinfo(typelib, type);
break; break;
case TYPE_INTERFACE: case TYPE_INTERFACE:
@ -2119,6 +2120,7 @@ static void add_interface_typeinfo(msft_typelib_t *typelib, type_t *interface)
static void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure) static void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure)
{ {
var_list_t *fields;
int idx = 0; int idx = 0;
var_t *cur; var_t *cur;
msft_typeinfo_t *msft_typeinfo; msft_typeinfo_t *msft_typeinfo;
@ -2130,9 +2132,16 @@ static void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure)
msft_typeinfo = create_msft_typeinfo(typelib, TKIND_RECORD, structure->name, structure->attrs); msft_typeinfo = create_msft_typeinfo(typelib, TKIND_RECORD, structure->name, structure->attrs);
msft_typeinfo->typeinfo->size = 0; msft_typeinfo->typeinfo->size = 0;
if (type_struct_get_fields(structure)) if (type_get_type(structure) == TYPE_STRUCT)
LIST_FOR_EACH_ENTRY( cur, type_struct_get_fields(structure), var_t, entry ) fields = type_struct_get_fields(structure);
else
fields = type_encapsulated_union_get_fields(structure);
if (fields)
{
LIST_FOR_EACH_ENTRY( cur, fields, var_t, entry )
add_var_desc(msft_typeinfo, idx++, cur); add_var_desc(msft_typeinfo, idx++, cur);
}
} }
static void add_enum_typeinfo(msft_typelib_t *typelib, type_t *enumeration) static void add_enum_typeinfo(msft_typelib_t *typelib, type_t *enumeration)
@ -2320,6 +2329,7 @@ static void add_type_typeinfo(msft_typelib_t *typelib, type_t *type)
add_interface_typeinfo(typelib, type); add_interface_typeinfo(typelib, type);
break; break;
case TYPE_STRUCT: case TYPE_STRUCT:
case TYPE_ENCAPSULATED_UNION:
add_structure_typeinfo(typelib, type); add_structure_typeinfo(typelib, type);
break; break;
case TYPE_ENUM: case TYPE_ENUM: