Jacek Caban : widl: Generate async interface table.
Alexandre Julliard
julliard at winehq.org
Wed Nov 7 14:47:32 CST 2018
Module: wine
Branch: master
Commit: 824d51358511621616570b66a436034dac2f5140
URL: https://source.winehq.org/git/wine.git/?a=commit;h=824d51358511621616570b66a436034dac2f5140
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Nov 7 16:15:22 2018 +0100
widl: Generate async interface table.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
tools/widl/proxy.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/tools/widl/proxy.c b/tools/widl/proxy.c
index a6c3c32..4c7d85d 100644
--- a/tools/widl/proxy.c
+++ b/tools/widl/proxy.c
@@ -895,6 +895,7 @@ static void write_proxy_routines(const statement_list_t *stmts)
unsigned int proc_offset = 0;
char *file_id = proxy_token;
int i, count, have_baseiid = 0;
+ unsigned int table_version;
type_t **interfaces;
const type_t * delegate_to;
@@ -1006,6 +1007,26 @@ static void write_proxy_routines(const statement_list_t *stmts)
fprintf(proxy, "}\n");
fprintf(proxy, "\n");
+ table_version = get_stub_mode() == MODE_Oif ? 2 : 1;
+ for (i = 0; i < count; i++)
+ {
+ if (interfaces[i]->details.iface->async_iface != interfaces[i]) continue;
+ if (table_version != 6)
+ {
+ fprintf(proxy, "static const IID *_AsyncInterfaceTable[] =\n");
+ fprintf(proxy, "{\n");
+ table_version = 6;
+ }
+ fprintf(proxy, " &IID_%s,\n", interfaces[i]->name);
+ fprintf(proxy, " (IID*)(LONG_PTR)-1,\n");
+ }
+ if (table_version == 6)
+ {
+ fprintf(proxy, " 0\n");
+ fprintf(proxy, "};\n");
+ fprintf(proxy, "\n");
+ }
+
fprintf(proxy, "const ExtendedProxyFileInfo %s_ProxyFileInfo DECLSPEC_HIDDEN =\n", file_id);
fprintf(proxy, "{\n");
fprintf(proxy, " (const PCInterfaceProxyVtblList*)_%s_ProxyVtblList,\n", file_id);
@@ -1015,8 +1036,8 @@ static void write_proxy_routines(const statement_list_t *stmts)
else fprintf(proxy, " 0,\n");
fprintf(proxy, " _%s_IID_Lookup,\n", file_id);
fprintf(proxy, " %d,\n", count);
- fprintf(proxy, " %d,\n", get_stub_mode() == MODE_Oif ? 2 : 1);
- fprintf(proxy, " 0,\n");
+ fprintf(proxy, " %u,\n", table_version);
+ fprintf(proxy, " %s,\n", table_version == 6 ? "_AsyncInterfaceTable" : "0");
fprintf(proxy, " 0,\n");
fprintf(proxy, " 0,\n");
fprintf(proxy, " 0\n");
More information about the wine-cvs
mailing list