From: Rémi Bernon rbernon@codeweavers.com
--- tools/widl/parser.y | 3 ++- tools/widl/register.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y index 3111b401ea1..e57b1412a80 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -429,7 +429,8 @@ gbl_statements | gbl_statements apicontract ';' { $$ = $1; reg_type($2, $2->name, current_namespace, 0); } | gbl_statements apicontract_def { $$ = append_statement($1, make_statement_type_decl( @$, $2 )); reg_type($2, $2->name, current_namespace, 0); } - | gbl_statements runtimeclass ';' { $$ = $1; reg_type($2, $2->name, current_namespace, 0); } + | gbl_statements runtimeclass ';' { $$ = append_statement($1, make_statement_reference( @$, $2 )); + reg_type($2, $2->name, current_namespace, 0); } | gbl_statements runtimeclass_def { $$ = append_statement($1, make_statement_type_decl( @$, $2 )); reg_type($2, $2->name, current_namespace, 0); } | gbl_statements moduledef { $$ = append_statement($1, make_statement_module( @$, $2 )); } diff --git a/tools/widl/register.c b/tools/widl/register.c index 9ad0314d2da..7e142b5e4f1 100644 --- a/tools/widl/register.c +++ b/tools/widl/register.c @@ -194,7 +194,8 @@ static void write_runtimeclasses_registry( const statement_list_t *stmts )
if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { - if (stmt->type != STMT_TYPE) continue; + if (stmt->type != STMT_TYPE && stmt->type != STMT_TYPEREF) continue; + if (stmt->type == STMT_TYPEREF && strcmp( stmt->where.input_name, input_name )) continue; /* ignore #included statements */ if (type_get_type((type = stmt->u.type)) != TYPE_RUNTIMECLASS) continue; if (!get_attrp(type->attrs, ATTR_ACTIVATABLE) && !get_attrp(type->attrs, ATTR_STATIC)) continue; put_str( indent, "ForceRemove %s\n", format_namespace( type->namespace, "", ".", type->name, NULL ) );