[PATCH] widl: Allow optional interface parameter on the [activatable] attribute.
From: Bernhard Kölbl <besentv(a)gmail.com> As per MIDL 3.0. Needed for some WinRT runtime classes. Signed-off-by: Bernhard Kölbl <besentv(a)gmail.com> Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> --- tools/widl/parser.y | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/widl/parser.y b/tools/widl/parser.y index fa863921c92..a945d0f2fca 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -278,6 +278,7 @@ static typelib_t *current_typelib; %type <expr_list> m_exprs /* exprs expr_list */ expr_list_int_const %type <expr> contract_req %type <expr> static_attr +%type <expr> activatable_attr %type <type> delegatedef %type <stgclass> storage_cls_spec %type <type_qualifier> type_qualifier m_type_qual_list @@ -580,8 +581,14 @@ static_attr: decl_spec ',' contract_req { if ($1->type->type_type != TYPE_INTER $$ = make_exprt(EXPR_MEMBER, declare_var(NULL, $1, make_declarator(NULL), 0), $3); } +activatable_attr: + decl_spec ',' contract_req { if ($1->type->type_type != TYPE_INTERFACE) + error_loc("type %s is not an interface\n", $1->type->name); + $$ = make_exprt(EXPR_MEMBER, declare_var(NULL, $1, make_declarator(NULL), 0), $3); + | contract_req { $$ = $1; } /* activatable on the default activation factory */ + attribute: { $$ = NULL; } - | tACTIVATABLE '(' contract_req ')' { $$ = make_attrp(ATTR_ACTIVATABLE, $3); } + | tACTIVATABLE '(' activatable_attr ')' { $$ = make_attrp(ATTR_ACTIVATABLE, $3); } | tAGGREGATABLE { $$ = make_attr(ATTR_AGGREGATABLE); } | tANNOTATION '(' aSTRING ')' { $$ = make_attrp(ATTR_ANNOTATION, $3); } | tAPPOBJECT { $$ = make_attr(ATTR_APPOBJECT); } -- 2.34.1
Hi, While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=105615 Your paranoid android. === debian11 (build log) === ../wine/tools/widl/parser.y:587.49-3393.0: error: missing ‘}’ at end of file Task: The win32 Wine build failed === debian11 (build log) === ../wine/tools/widl/parser.y:587.49-3393.0: error: missing ‘}’ at end of file Task: The wow64 Wine build failed
participants (2)
-
Marvin -
Rémi Bernon