This patch fixes a few issues surrounding the 'inline' function specifier in widl. The write_client_func_decl function was not taking inline into account when generating function declarations while write_type_v was including the inline specifier in function pointer declarations and generating invalid C code.
Signed-off-by: Richard Pospesel richard@torproject.net --- tools/widl/client.c | 1 + tools/widl/header.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/tools/widl/client.c b/tools/widl/client.c index 625641e0de..6299a2a211 100644 --- a/tools/widl/client.c +++ b/tools/widl/client.c @@ -58,6 +58,7 @@ static void write_client_func_decl( const type_t *iface, const var_t *func )
if (!callconv) callconv = "__cdecl"; write_declspec_decl_left(client, retdeclspec); + if (func->declspec.funcspecifier == FUNCTION_SPECIFIER_INLINE) fprintf(client, " inline"); fprintf(client, " %s ", callconv); fprintf(client, "%s%s(\n", prefix_client, get_name(func)); indent++; diff --git a/tools/widl/header.c b/tools/widl/header.c index c96064151a..3211d1d3d8 100644 --- a/tools/widl/header.c +++ b/tools/widl/header.c @@ -521,7 +521,7 @@ static void write_type_v(FILE *h, decl_spec_t *ds, int is_field, int declonly, c int i; const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV); if (!callconv && is_object_interface) callconv = "STDMETHODCALLTYPE"; - if (dpt->funcspecifier == FUNCTION_SPECIFIER_INLINE) fprintf(h, "inline "); + if (!is_ptr(ds->type) && dpt->funcspecifier == FUNCTION_SPECIFIER_INLINE) fprintf(h, "inline "); write_declspec_left(h, type_function_get_retdeclspec(pt), NAME_DEFAULT, declonly); fputc(' ', h); if (ptr_level) fputc('(', h); @@ -1435,6 +1435,7 @@ static void write_function_proto(FILE *header, const type_t *iface, const var_t if (!callconv) callconv = "__cdecl"; /* FIXME: do we need to handle call_as? */ write_declspec_decl_left(header, type_function_get_retdeclspec(fun->declspec.type)); + if (fun->declspec.funcspecifier == FUNCTION_SPECIFIER_INLINE) fprintf(header, " inline"); fprintf(header, " %s ", callconv); fprintf(header, "%s%s(\n", prefix, get_name(fun)); if (type_get_function_args(fun->declspec.type))