From: Rémi Bernon rbernon@codeweavers.com
--- tools/widl/parser.y | 3 ++- tools/widl/register.c | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y index 91ac325be82..83af2721cf4 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..91079b65fd6 100644 --- a/tools/widl/register.c +++ b/tools/widl/register.c @@ -194,9 +194,11 @@ 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 (type_get_type((type = stmt->u.type)) != TYPE_RUNTIMECLASS) continue; if (!get_attrp(type->attrs, ATTR_ACTIVATABLE) && !get_attrp(type->attrs, ATTR_STATIC)) continue; + if (stmt->type == STMT_TYPEREF && !type->defined) continue; + put_str( indent, "ForceRemove %s\n", format_namespace( type->namespace, "", ".", type->name, NULL ) ); put_str( indent++, "{\n" ); put_str( indent, "val 'DllPath' = s '%%MODULE%%'\n" );