Module: wine Branch: master Commit: 99d296b6fe4df9e09c0db52fdbc40a0374059c05 URL: http://source.winehq.org/git/wine.git/?a=commit;h=99d296b6fe4df9e09c0db52fdb...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Jul 31 13:38:06 2015 +0200
widl: Declare C++ interfaces in namespaces if needed.
---
tools/widl/header.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/tools/widl/header.c b/tools/widl/header.c index 7ae0e68..ec32512 100644 --- a/tools/widl/header.c +++ b/tools/widl/header.c @@ -1279,34 +1279,40 @@ static void write_com_interface_end(FILE *header, type_t *iface)
/* C++ interface */ fprintf(header, "#if defined(__cplusplus) && !defined(CINTERFACE)\n"); - if (uuid) - fprintf(header, "MIDL_INTERFACE("%s")\n", uuid_string(uuid)); - else + if (!is_global_namespace(iface->namespace)) { + write_line(header, 0, "} /* extern "C" */"); + write_namespace_start(header, iface->namespace); + } + if (uuid) { + write_line(header, 0, "MIDL_INTERFACE("%s")", uuid_string(uuid)); + indent(header, 0); + }else { + indent(header, 0); fprintf(header, "interface "); + } if (type_iface_get_inherit(iface)) { fprintf(header, "%s : public %s\n", iface->name, type_iface_get_inherit(iface)->name); - fprintf(header, "{\n"); + write_line(header, 1, "{"); } else { fprintf(header, "%s\n", iface->name); - fprintf(header, "{\n"); - fprintf(header, " BEGIN_INTERFACE\n"); - fprintf(header, "\n"); + write_line(header, 1, "{\n"); + write_line(header, 0, "BEGIN_INTERFACE\n"); } /* dispinterfaces don't have real functions, so don't write C++ functions for * them */ if (!dispinterface) - { - indentation++; write_cpp_method_def(header, iface); - indentation--; - } if (!type_iface_get_inherit(iface)) - fprintf(header, " END_INTERFACE\n"); - fprintf(header, "};\n"); + write_line(header, 0, "END_INTERFACE\n"); + write_line(header, -1, "};"); + if (!is_global_namespace(iface->namespace)) { + write_namespace_end(header, iface->namespace); + write_line(header, 0, "extern "C" {"); + } if (uuid) write_uuid_decl(header, iface->name, uuid); fprintf(header, "#else\n");