From: Hans Leidekker hans@codeweavers.com
--- tools/widl/metadata.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+)
diff --git a/tools/widl/metadata.c b/tools/widl/metadata.c index a58089e3455..22259eda121 100644 --- a/tools/widl/metadata.c +++ b/tools/widl/metadata.c @@ -1396,6 +1396,29 @@ static void add_struct_type_step2( type_t *type ) add_contract_attr_step2( type ); }
+static void add_interface_type_step1( type_t *type ) +{ + UINT name, namespace; + + name = add_name( type, &namespace ); + + type->md.ref = add_typeref_row( resolution_scope(TABLE_MODULE, MODULE_ROW), name, namespace ); + + add_contract_attr_step1( type ); +} + +static void add_interface_type_step2( type_t *type ) +{ + UINT name, namespace, flags = TYPE_ATTR_INTERFACE | TYPE_ATTR_ABSTRACT | TYPE_ATTR_UNKNOWN; + + name = add_name( type, &namespace ); + + if (!is_attr( type->attrs, ATTR_EXCLUSIVETO )) flags |= TYPE_ATTR_PUBLIC; + type->md.def = add_typedef_row( flags, name, namespace, 0, 0, 0 ); + + add_contract_attr_step2( type ); +} + static UINT make_contractversion_value( const type_t *type, BYTE *buf ) { UINT version = get_attrv( type->attrs, ATTR_CONTRACTVERSION ), len = 2 + sizeof(version); @@ -1507,6 +1530,9 @@ static void build_tables( const statement_list_t *stmt_list ) case TYPE_STRUCT: add_struct_type_step1( type ); break; + case TYPE_INTERFACE: + add_interface_type_step1( type ); + break; case TYPE_APICONTRACT: add_apicontract_type_step1( type ); break; @@ -1530,6 +1556,9 @@ static void build_tables( const statement_list_t *stmt_list ) case TYPE_STRUCT: add_struct_type_step2( type ); break; + case TYPE_INTERFACE: + add_interface_type_step2( type ); + break; case TYPE_APICONTRACT: add_apicontract_type_step2( type ); break;