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