Jacek Caban : widl: Check dispinterfaces for duplicated methods.
Alexandre Julliard
julliard at winehq.org
Tue Feb 4 15:33:20 CST 2020
Module: wine
Branch: master
Commit: 26ad9a7ba316b36774ea77ca2af64144cea61b7d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=26ad9a7ba316b36774ea77ca2af64144cea61b7d
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Feb 4 19:58:51 2020 +0100
widl: Check dispinterfaces for duplicated methods.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
tools/widl/parser.y | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index 92b4f8ebd5..3ef8d89ba1 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -2701,6 +2701,25 @@ static void add_explicit_handle_if_necessary(const type_t *iface, var_t *func)
static void check_functions(const type_t *iface, int is_inside_library)
{
const statement_t *stmt;
+ /* check for duplicates */
+ if (is_attr(iface->attrs, ATTR_DISPINTERFACE))
+ {
+ var_list_t *methods = type_dispiface_get_methods(iface);
+ var_t *func, *func_iter;
+
+ if (methods) LIST_FOR_EACH_ENTRY( func, methods, var_t, entry )
+ {
+ LIST_FOR_EACH_ENTRY( func_iter, methods, var_t, entry )
+ {
+ if (func == func_iter) break;
+ if (strcmp(func->name, func_iter->name)) continue;
+ if (is_attr(func->attrs, ATTR_PROPGET) != is_attr(func_iter->attrs, ATTR_PROPGET)) continue;
+ if (is_attr(func->attrs, ATTR_PROPPUT) != is_attr(func_iter->attrs, ATTR_PROPPUT)) continue;
+ if (is_attr(func->attrs, ATTR_PROPPUTREF) != is_attr(func_iter->attrs, ATTR_PROPPUTREF)) continue;
+ error_loc_info(&func->loc_info, "duplicated function \'%s\'\n", func->name);
+ }
+ }
+ }
if (is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE))
{
STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
More information about the wine-cvs
mailing list