From: Eric Pouech epouech@codeweavers.com
(pure refactoring, used in next patch)
Signed-off-by: Eric Pouech epouech@codeweavers.com --- tools/widl/header.c | 86 +++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 39 deletions(-)
diff --git a/tools/widl/header.c b/tools/widl/header.c index e2ce883b788..55da9e0d3f8 100644 --- a/tools/widl/header.c +++ b/tools/widl/header.c @@ -1977,6 +1977,52 @@ static void write_forward_decls(FILE *header, const statement_list_t *stmts) } }
+static void write_header_stmts(FILE *header, const statement_list_t *stmts, const type_t *iface, int ignore_funcs); + +static void write_type(FILE *header, /*const */ type_t *type, bool is_defined) +{ + if (type_get_type(type) == TYPE_INTERFACE || type_get_type(type) == TYPE_DELEGATE) + { + type_t *iface = type, *async_iface; + + if (type_get_type(type) == TYPE_DELEGATE) iface = type_delegate_get_iface(iface); + async_iface = type_iface_get_async_iface(iface); + if (is_object(iface)) is_object_interface++; + if (is_attr(type->attrs, ATTR_DISPINTERFACE) || is_object(type)) + { + write_com_interface_start(header, iface); + write_header_stmts(header, type_iface_get_stmts(iface), type, TRUE); + write_com_interface_end(header, iface); + if (async_iface) + { + write_com_interface_start(header, async_iface); + write_com_interface_end(header, async_iface); + } + } + else + { + write_rpc_interface_start(header, iface); + write_header_stmts(header, type_iface_get_stmts(iface), iface, FALSE); + write_rpc_interface_end(header, iface); + } + if (is_object(iface)) is_object_interface--; + } + else if (type_get_type(type) == TYPE_COCLASS) + write_coclass(header, type); + else if (type_get_type(type) == TYPE_APICONTRACT) + write_apicontract(header, type); + else if (type_get_type(type) == TYPE_RUNTIMECLASS) + write_runtimeclass(header, type); + else if (type_get_type(type) != TYPE_PARAMETERIZED_TYPE) + write_type_definition(header, type, is_defined); + else + { + is_object_interface++; + write_parameterized_implementation(header, type, is_defined); + is_object_interface--; + } +} + static void write_header_stmts(FILE *header, const statement_list_t *stmts, const type_t *iface, int ignore_funcs) { const statement_t *stmt; @@ -1985,45 +2031,7 @@ static void write_header_stmts(FILE *header, const statement_list_t *stmts, cons switch (stmt->type) { case STMT_TYPE: - if (type_get_type(stmt->u.type) == TYPE_INTERFACE || type_get_type(stmt->u.type) == TYPE_DELEGATE) - { - type_t *iface = stmt->u.type, *async_iface; - if (type_get_type(stmt->u.type) == TYPE_DELEGATE) iface = type_delegate_get_iface(iface); - async_iface = type_iface_get_async_iface(iface); - if (is_object(iface)) is_object_interface++; - if (is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE) || is_object(stmt->u.type)) - { - write_com_interface_start(header, iface); - write_header_stmts(header, type_iface_get_stmts(iface), stmt->u.type, TRUE); - write_com_interface_end(header, iface); - if (async_iface) - { - write_com_interface_start(header, async_iface); - write_com_interface_end(header, async_iface); - } - } - else - { - write_rpc_interface_start(header, iface); - write_header_stmts(header, type_iface_get_stmts(iface), iface, FALSE); - write_rpc_interface_end(header, iface); - } - if (is_object(iface)) is_object_interface--; - } - else if (type_get_type(stmt->u.type) == TYPE_COCLASS) - write_coclass(header, stmt->u.type); - else if (type_get_type(stmt->u.type) == TYPE_APICONTRACT) - write_apicontract(header, stmt->u.type); - else if (type_get_type(stmt->u.type) == TYPE_RUNTIMECLASS) - write_runtimeclass(header, stmt->u.type); - else if (type_get_type(stmt->u.type) != TYPE_PARAMETERIZED_TYPE) - write_type_definition(header, stmt->u.type, stmt->is_defined); - else - { - is_object_interface++; - write_parameterized_implementation(header, stmt->u.type, stmt->is_defined); - is_object_interface--; - } + write_type(header, stmt->u.type, stmt->is_defined); break; case STMT_TYPEREF: /* FIXME: shouldn't write out forward declarations for undefined