From: Jacek Caban Subject: Re: [PATCH 1/7] widl: Generate helper macros for WinRT implementation. Message-Id: <8103e6a6-6534-5eba-edea-dbe6ff409de3@codeweavers.com> Date: Thu, 25 Feb 2021 14:34:08 +0100 In-Reply-To: <20210222090305.557337-1-rbernon@codeweavers.com> References: <20210222090305.557337-1-rbernon@codeweavers.com> Hi Rémi, On 22.02.2021 10:02, Rémi Bernon wrote: > +static void write_widl_using_method_macros(FILE *header, const type_t *iface, const type_t *top_iface) > +{ > + const statement_t *stmt; > + const char *name = top_iface->short_name ? top_iface->short_name : top_iface->name; > + > + if (type_iface_get_inherit(iface)) write_widl_using_method_macros(header, type_iface_get_inherit(iface), top_iface); > + > + STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) > + { > + const var_t *func = stmt->u.var; > + const char *func_name; > + > + if (is_override_method(iface, top_iface, func)) continue; > + if (is_callas(func->attrs)) continue; > + > + func_name = get_name(func); > + fprintf(header, "#define %s_%s %s_%s\n", name, func_name, top_iface->c_name, func_name); > + } > +} > + > +static char *format_widl_using_macro(const type_t *type) > +{ > + char *name = format_namespace(type->namespace, "WIDL_USING_", "_", "", NULL); > + int i = strlen(name); > + if (i) name[i - 1] = 0; /* remove trailing underscore */ Not a big deal, but maybe the helper should take care of that instead? For example NULL suffix could case the separator not to be appended. > diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h > index 81646cae1d1..bedba40d903 100644 > --- a/tools/widl/widltypes.h > +++ b/tools/widl/widltypes.h > @@ -504,6 +504,7 @@ struct _type_t { > const char *c_name; > const char *signature; > const char *qualified_name; > + const char *short_name; > unsigned int typestring_offset; > unsigned int ptrdesc; /* used for complex structs */ > int typelib_idx; Do you expect it to use useful outside void write_widl_using_macros()? It looks like something specific to that, so maybe we could just generate it there, when needed. Thanks, Jacek