[PATCH v2] widl: Allow optional interface parameter on the [activatable] attribute.
Rémi Bernon
rbernon at codeweavers.com
Sat Jan 22 00:55:32 CST 2022
From: Bernhard Kölbl <besentv at gmail.com>
As per MIDL 3.0. Needed for some WinRT runtime classes.
Signed-off-by: Bernhard Kölbl <besentv at gmail.com>
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
v2: Borked the v1 while fixing up the tabs, oops...
tools/widl/parser.y | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index fa863921c92..6ee527da926 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,15 @@ 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
More information about the wine-devel
mailing list