[PATCH 0/4] MR9527: widl: Use the metadata short name for parameterized types.
From: Hans Leidekker <hans(a)codeweavers.com> --- tools/widl/metadata.c | 6 +++++- tools/widl/typetree.c | 14 ++++++++++++++ tools/widl/widltypes.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/tools/widl/metadata.c b/tools/widl/metadata.c index 16fb015f50e..7863f6c6fb5 100644 --- a/tools/widl/metadata.c +++ b/tools/widl/metadata.c @@ -1495,7 +1495,11 @@ static void create_typeref( type_t *type ) return; } - base_type->md.name = add_string( base_type->name ); + if (base_type->winmd_short_name) + base_type->md.name = add_string( base_type->winmd_short_name ); + else + base_type->md.name = add_string( base_type->name ); + namespace_str = format_namespace( base_type->namespace, "", ".", NULL, NULL ); base_type->md.namespace = add_string( namespace_str ); diff --git a/tools/widl/typetree.c b/tools/widl/typetree.c index c77efbc834f..8f5e885c4e2 100644 --- a/tools/widl/typetree.c +++ b/tools/widl/typetree.c @@ -55,6 +55,7 @@ type_t *make_type(enum type_type type) t->impl_name = NULL; t->param_name = NULL; t->short_name = NULL; + t->winmd_short_name = NULL; memset(&t->details, 0, sizeof(t->details)); memset(&t->md, 0, sizeof(t->md)); t->typestring_offset = 0; @@ -697,6 +698,18 @@ static char *format_parameterized_type_impl_name(type_t *type, typeref_list_t *p return str.buf; } +static char *format_parameterized_type_winmd_short_name(type_t *type, typeref_list_t *params) +{ + struct strbuf str = {0}; + unsigned int count = 0; + + strappend(&str, "%s", type->name); + if (params) count = list_count(params); + if (count) strappend(&str, "`%u", count); + + return str.buf; +} + type_t *type_new_function(var_list_t *args) { var_t *arg; @@ -1530,6 +1543,7 @@ type_t *type_parameterized_type_specialize_declare(type_t *type, typeref_list_t new_type->c_name = format_parameterized_type_c_name(type, params, "", "_C"); new_type->short_name = format_parameterized_type_short_name(type, params, ""); new_type->param_name = format_parameterized_type_c_name(type, params, "", "__C"); + new_type->winmd_short_name = format_parameterized_type_winmd_short_name(type, params); if (new_type->type_type == TYPE_DELEGATE) { diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h index d1ca36877f5..03b4daf2aa9 100644 --- a/tools/widl/widltypes.h +++ b/tools/widl/widltypes.h @@ -546,6 +546,7 @@ struct _type_t { const char *impl_name; /* C++ parameterized types impl base class name */ const char *param_name; /* used to build c_name of a parameterized type, when used as a parameter */ const char *short_name; /* widl specific short name */ + const char *winmd_short_name; /* metadata short name for parameterized type */ unsigned int typestring_offset; unsigned int ptrdesc; /* used for complex structs */ int typelib_idx; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9527
From: Hans Leidekker <hans(a)codeweavers.com> --- tools/widl/metadata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/widl/metadata.c b/tools/widl/metadata.c index 7863f6c6fb5..29e556f9df6 100644 --- a/tools/widl/metadata.c +++ b/tools/widl/metadata.c @@ -2764,7 +2764,7 @@ static void add_runtimeclass_type_step1( type_t *type ) if (iface_list) LIST_FOR_EACH_ENTRY( iface, iface_list, typeref_t, entry ) { - create_typeref( iface->type ); + add_interface_type_step1( iface->type ); } } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9527
From: Hans Leidekker <hans(a)codeweavers.com> --- tools/widl/metadata.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/widl/metadata.c b/tools/widl/metadata.c index 29e556f9df6..b979ff87748 100644 --- a/tools/widl/metadata.c +++ b/tools/widl/metadata.c @@ -1487,6 +1487,9 @@ static void create_typeref( type_t *type ) /* HSTRING is treated as a fundamental type */ if (type->name && !strcmp( type->name, "HSTRING__" )) return; + /* IInspectable is treated as a fundamental type */ + if (type->name && !strcmp( base_type->name, "IInspectable" )) return; + /* GUID is imported from mscorlib */ if (type->name && !strcmp( type->name, "GUID" )) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9527
From: Hans Leidekker <hans(a)codeweavers.com> --- include/windows.foundation.idl | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/include/windows.foundation.idl b/include/windows.foundation.idl index f4c1ea2800e..7fbb454dfe6 100644 --- a/include/windows.foundation.idl +++ b/include/windows.foundation.idl @@ -385,25 +385,25 @@ namespace Windows.Foundation { HRESULT GetPoint([out, retval] Windows.Foundation.Point *value); HRESULT GetSize([out, retval] Windows.Foundation.Size *value); HRESULT GetRect([out, retval] Windows.Foundation.Rect *value); - HRESULT GetUInt8Array([out] UINT32 *value_size, [out, size_is(*value_size)] BYTE **value); - HRESULT GetInt16Array([out] UINT32 *value_size, [out, size_is(*value_size)] INT16 **value); - HRESULT GetUInt16Array([out] UINT32 *value_size, [out, size_is(*value_size)] UINT16 **value); - HRESULT GetInt32Array([out] UINT32 *value_size, [out, size_is(*value_size)] INT32 **value); - HRESULT GetUInt32Array([out] UINT32 *value_size, [out, size_is(*value_size)] UINT32 **value); - HRESULT GetInt64Array([out] UINT32 *value_size, [out, size_is(*value_size)] INT64 **value); - HRESULT GetUInt64Array([out] UINT32 *value_size, [out, size_is(*value_size)] UINT64 **value); - HRESULT GetSingleArray([out] UINT32 *value_size, [out, size_is(*value_size)] FLOAT **value); - HRESULT GetDoubleArray([out] UINT32 *value_size, [out, size_is(*value_size)] DOUBLE **value); - HRESULT GetChar16Array([out] UINT32 *value_size, [out, size_is(*value_size)] WCHAR **value); - HRESULT GetBooleanArray([out] UINT32 *value_size, [out, size_is(*value_size)] boolean **value); - HRESULT GetStringArray([out] UINT32 *value_size, [out, size_is(*value_size)] HSTRING **value); - HRESULT GetInspectableArray([out] UINT32 *value_size, [out, size_is(*value_size)] IInspectable ***value); - HRESULT GetGuidArray([out] UINT32 *value_size, [out, size_is(*value_size)] GUID **value); - HRESULT GetDateTimeArray([out] UINT32 *value_size, [out, size_is(*value_size)] Windows.Foundation.DateTime **value); - HRESULT GetTimeSpanArray([out] UINT32 *value_size, [out, size_is(*value_size)] Windows.Foundation.TimeSpan **value); - HRESULT GetPointArray([out] UINT32 *value_size, [out, size_is(*value_size)] Windows.Foundation.Point **value); - HRESULT GetSizeArray([out] UINT32 *value_size, [out, size_is(*value_size)] Windows.Foundation.Size **value); - HRESULT GetRectArray([out] UINT32 *value_size, [out, size_is(*value_size)] Windows.Foundation.Rect **value); + HRESULT GetUInt8Array([out] UINT32 *value_size, [out, size_is(, *value_size)] BYTE **value); + HRESULT GetInt16Array([out] UINT32 *value_size, [out, size_is(, *value_size)] INT16 **value); + HRESULT GetUInt16Array([out] UINT32 *value_size, [out, size_is(, *value_size)] UINT16 **value); + HRESULT GetInt32Array([out] UINT32 *value_size, [out, size_is(, *value_size)] INT32 **value); + HRESULT GetUInt32Array([out] UINT32 *value_size, [out, size_is(, *value_size)] UINT32 **value); + HRESULT GetInt64Array([out] UINT32 *value_size, [out, size_is(, *value_size)] INT64 **value); + HRESULT GetUInt64Array([out] UINT32 *value_size, [out, size_is(, *value_size)] UINT64 **value); + HRESULT GetSingleArray([out] UINT32 *value_size, [out, size_is(, *value_size)] FLOAT **value); + HRESULT GetDoubleArray([out] UINT32 *value_size, [out, size_is(, *value_size)] DOUBLE **value); + HRESULT GetChar16Array([out] UINT32 *value_size, [out, size_is(, *value_size)] WCHAR **value); + HRESULT GetBooleanArray([out] UINT32 *value_size, [out, size_is(, *value_size)] boolean **value); + HRESULT GetStringArray([out] UINT32 *value_size, [out, size_is(, *value_size)] HSTRING **value); + HRESULT GetInspectableArray([out] UINT32 *value_size, [out, size_is(, *value_size)] IInspectable ***value); + HRESULT GetGuidArray([out] UINT32 *value_size, [out, size_is(, *value_size)] GUID **value); + HRESULT GetDateTimeArray([out] UINT32 *value_size, [out, size_is(, *value_size)] Windows.Foundation.DateTime **value); + HRESULT GetTimeSpanArray([out] UINT32 *value_size, [out, size_is(, *value_size)] Windows.Foundation.TimeSpan **value); + HRESULT GetPointArray([out] UINT32 *value_size, [out, size_is(, *value_size)] Windows.Foundation.Point **value); + HRESULT GetSizeArray([out] UINT32 *value_size, [out, size_is(, *value_size)] Windows.Foundation.Size **value); + HRESULT GetRectArray([out] UINT32 *value_size, [out, size_is(, *value_size)] Windows.Foundation.Rect **value); } [ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9527
This merge request was approved by Rémi Bernon. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9527
participants (3)
-
Hans Leidekker -
Hans Leidekker (@hans) -
Rémi Bernon