Module: wine Branch: master Commit: 93dd2521169e0bd33248f28f6792b9b67f8c52da URL: http://source.winehq.org/git/wine.git/?a=commit;h=93dd2521169e0bd33248f28f67...
Author: Alexandre Julliard julliard@winehq.org Date: Fri May 27 12:07:29 2011 +0200
widl: Output a list of binding routines in client files.
---
tools/widl/client.c | 23 ++++++++++++++++++++++- tools/widl/header.c | 4 +--- tools/widl/widltypes.h | 3 +++ 3 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/tools/widl/client.c b/tools/widl/client.c index b5ac0ae..aec379c 100644 --- a/tools/widl/client.c +++ b/tools/widl/client.c @@ -351,7 +351,10 @@ static void write_stubdescriptor(type_t *iface, int expr_eval_routines) indent--; print_client("},\n"); print_client("0,\n"); - print_client("0,\n"); + if (!list_empty( &generic_handle_list )) + print_client("BindingRoutines,\n"); + else + print_client("0,\n"); if (expr_eval_routines) print_client("ExprEvalRoutines,\n"); else @@ -496,6 +499,23 @@ static void write_client_ifaces(const statement_list_t *stmts, int expr_eval_rou } }
+static void write_generic_handle_routine_list(void) +{ + generic_handle_t *gh; + + if (list_empty( &generic_handle_list )) return; + print_client( "static const GENERIC_BINDING_ROUTINE_PAIR BindingRoutines[] =\n" ); + print_client( "{\n" ); + indent++; + LIST_FOR_EACH_ENTRY( gh, &generic_handle_list, generic_handle_t, entry ) + { + print_client( "{ (GENERIC_BINDING_ROUTINE)%s_bind, (GENERIC_UNBIND_ROUTINE)%s_unbind },\n", + gh->name, gh->name ); + } + indent--; + print_client( "};\n\n" ); +} + static void write_client_routines(const statement_list_t *stmts) { unsigned int proc_offset = 0; @@ -508,6 +528,7 @@ static void write_client_routines(const statement_list_t *stmts) expr_eval_routines = write_expr_eval_routines(client, client_token); if (expr_eval_routines) write_expr_eval_routine_list(client, client_token); + write_generic_handle_routine_list(); write_user_quad_list(client);
write_client_ifaces(stmts, expr_eval_routines, &proc_offset); diff --git a/tools/widl/header.c b/tools/widl/header.c index e0322c6..9df03cc 100644 --- a/tools/widl/header.c +++ b/tools/widl/header.c @@ -36,13 +36,11 @@ #include "expr.h" #include "typetree.h"
-typedef struct _user_type_t generic_handle_t; - static int indentation = 0; static int is_object_interface = 0; user_type_list_t user_type_list = LIST_INIT(user_type_list); static context_handle_list_t context_handle_list = LIST_INIT(context_handle_list); -static struct list generic_handle_list = LIST_INIT(generic_handle_list); +generic_handle_list_t generic_handle_list = LIST_INIT(generic_handle_list);
static void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name);
diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h index 295ad70..1f3c275 100644 --- a/tools/widl/widltypes.h +++ b/tools/widl/widltypes.h @@ -48,6 +48,7 @@ typedef struct _importinfo_t importinfo_t; typedef struct _typelib_t typelib_t; typedef struct _user_type_t user_type_t; typedef struct _user_type_t context_handle_t; +typedef struct _user_type_t generic_handle_t; typedef struct _type_list_t type_list_t; typedef struct _statement_t statement_t;
@@ -60,6 +61,7 @@ typedef struct list ifref_list_t; typedef struct list array_dims_t; typedef struct list user_type_list_t; typedef struct list context_handle_list_t; +typedef struct list generic_handle_list_t; typedef struct list statement_list_t;
enum attr_type @@ -530,6 +532,7 @@ typedef enum {
extern syskind_t typelib_kind; extern user_type_list_t user_type_list; +extern generic_handle_list_t generic_handle_list; void check_for_additional_prototype_types(const var_list_t *list);
void init_types(void);