[PATCH 2/2] widl: Generate C typedefs for namespaced struct / enum types.

Rémi Bernon rbernon at codeweavers.com
Tue Mar 23 15:10:21 CDT 2021


An C++ typedefs when the typedef name differs.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 tools/widl/header.c | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/tools/widl/header.c b/tools/widl/header.c
index 89e0ddf436e..349513e45f1 100644
--- a/tools/widl/header.c
+++ b/tools/widl/header.c
@@ -876,11 +876,31 @@ static void write_generic_handle_routines(FILE *header)
 
 static void write_typedef(FILE *header, type_t *type, int declonly)
 {
-  type_t *t = type_alias_get_aliasee_type(type);
-  if (winrt_mode && t->namespace && !is_global_namespace(t->namespace)) return;
-  fprintf(header, "typedef ");
-  write_type_v(header, type_alias_get_aliasee(type), FALSE, declonly, type->name, NAME_DEFAULT);
-  fprintf(header, ";\n");
+    type_t *t = type_alias_get_aliasee_type(type);
+    if (winrt_mode && t->namespace && !is_global_namespace(t->namespace))
+    {
+        fprintf(header, "#ifndef __cplusplus\n");
+        fprintf(header, "typedef ");
+        write_type_v(header, type_alias_get_aliasee(type), FALSE, declonly, type->c_name, NAME_C);
+        fprintf(header, ";\n");
+        if (strcmp(type->name, t->name))
+        {
+            fprintf(header, "#else /* __cplusplus */\n");
+            write_namespace_start(header, t->namespace);
+            indent(header, 0);
+            fprintf(header, "typedef ");
+            write_type_v(header, type_alias_get_aliasee(type), FALSE, declonly, type->name, NAME_DEFAULT);
+            fprintf(header, ";\n");
+            write_namespace_end(header, t->namespace);
+        }
+        fprintf(header, "#endif /* __cplusplus */\n\n");
+    }
+    else
+    {
+        fprintf(header, "typedef ");
+        write_type_v(header, type_alias_get_aliasee(type), FALSE, declonly, type->name, NAME_DEFAULT);
+        fprintf(header, ";\n");
+    }
 }
 
 int is_const_decl(const var_t *var)
-- 
2.30.2




More information about the wine-devel mailing list