[PATCH] widl: Prefer types defined in the same typelib to imported types.
Zebediah Figura
z.figura12 at gmail.com
Tue May 29 21:25:50 CDT 2018
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
Fixes the warnings reported by Alexandre Julliard in reply to 146588.
tools/widl/write_msft.c | 56 +++++++++++++++++++++++++------------------------
1 file changed, 29 insertions(+), 27 deletions(-)
diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 52c68b4..f7e53e4 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -993,7 +993,13 @@ static int encode_type(
importinfo_t *importinfo;
int typeinfo_offset;
- if ((importinfo = find_importinfo(typelib, type->name)))
+ if (type->typelib_idx > -1)
+ {
+ chat("encode_type: VT_USERDEFINED - found already defined type %s at %d\n",
+ type->name, type->typelib_idx);
+ typeinfo_offset = typelib->typelib_typeinfo_offsets[type->typelib_idx];
+ }
+ else if ((importinfo = find_importinfo(typelib, type->name)))
{
chat("encode_type: VT_USERDEFINED - found imported type %s in %s\n",
type->name, importinfo->importlib->name);
@@ -1003,36 +1009,32 @@ static int encode_type(
else
{
/* typedef'd types without public attribute aren't included in the typelib */
- while (type->typelib_idx < 0 && type_is_alias(type) && !is_attr(type->attrs, ATTR_PUBLIC))
+ while (type_is_alias(type) && !is_attr(type->attrs, ATTR_PUBLIC))
type = type_alias_get_aliasee(type);
- chat("encode_type: VT_USERDEFINED - type %p name = %s real type %d idx %d\n", type,
- type->name, type_get_type(type), type->typelib_idx);
+ chat("encode_type: VT_USERDEFINED - adding new type %s, real type %d\n",
+ type->name, type_get_type(type));
- if (type->typelib_idx == -1)
+ switch (type_get_type(type))
{
- chat("encode_type: trying to ref not added type\n");
- switch (type_get_type(type))
- {
- case TYPE_STRUCT:
- add_structure_typeinfo(typelib, type);
- break;
- case TYPE_INTERFACE:
- add_interface_typeinfo(typelib, type);
- break;
- case TYPE_ENUM:
- add_enum_typeinfo(typelib, type);
- break;
- case TYPE_UNION:
- add_union_typeinfo(typelib, type);
- break;
- case TYPE_COCLASS:
- add_coclass_typeinfo(typelib, type);
- break;
- default:
- error("encode_type: VT_USERDEFINED - unhandled type %d\n",
- type_get_type(type));
- }
+ case TYPE_STRUCT:
+ add_structure_typeinfo(typelib, type);
+ break;
+ case TYPE_INTERFACE:
+ add_interface_typeinfo(typelib, type);
+ break;
+ case TYPE_ENUM:
+ add_enum_typeinfo(typelib, type);
+ break;
+ case TYPE_UNION:
+ add_union_typeinfo(typelib, type);
+ break;
+ case TYPE_COCLASS:
+ add_coclass_typeinfo(typelib, type);
+ break;
+ default:
+ error("encode_type: VT_USERDEFINED - unhandled type %d\n",
+ type_get_type(type));
}
typeinfo_offset = typelib->typelib_typeinfo_offsets[type->typelib_idx];
--
2.7.4
More information about the wine-devel
mailing list