Jacek Caban : widl: Declare C++ interfaces in namespaces if needed.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jul 31 17:25:55 CDT 2015
Module: wine
Branch: master
Commit: 99d296b6fe4df9e09c0db52fdbc40a0374059c05
URL: http://source.winehq.org/git/wine.git/?a=commit;h=99d296b6fe4df9e09c0db52fdbc40a0374059c05
Author: Jacek Caban <jacek at 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");
More information about the wine-cvs
mailing list