[PATCH 3/5] widl: Support WinRT mta threading attribute parsing.

Rémi Bernon rbernon at codeweavers.com
Tue Jan 19 07:04:53 CST 2021


As a WinRT specific alias to free-threaded model.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 tools/widl/header.c | 7 +++++++
 tools/widl/parser.l | 1 +
 tools/widl/parser.y | 2 ++
 3 files changed, 10 insertions(+)

diff --git a/tools/widl/header.c b/tools/widl/header.c
index 21f8528c31d..b6cf43e7228 100644
--- a/tools/widl/header.c
+++ b/tools/widl/header.c
@@ -1494,6 +1494,13 @@ static void write_winrt_type_comments(FILE *header, const type_t *type)
         fprintf(header, " * Introduced to %s in version %d.%d\n *\n", name, (ver >> 16) & 0xffff, ver & 0xffff);
         free(name);
     }
+    switch (get_attrv(type->attrs, ATTR_THREADING))
+    {
+        case THREADING_SINGLE: fprintf(header, " * Class Threading Model:  Single Threaded Apartment\n *\n"); break;
+        case THREADING_BOTH: fprintf(header, " * Class Threading Model:  Both Single and Multi Threaded Apartment\n *\n"); break;
+        case THREADING_FREE: fprintf(header, " * Class Threading Model:  Multi Threaded Apartment\n *\n"); break;
+        default: break;
+    }
     switch (get_attrv(type->attrs, ATTR_MARSHALING_BEHAVIOR))
     {
         case MARSHALING_AGILE: fprintf(header, " * Class Marshaling Behavior:  Agile - Class is agile\n *\n"); break;
diff --git a/tools/widl/parser.l b/tools/widl/parser.l
index 01c6f800a08..067966a85d4 100644
--- a/tools/widl/parser.l
+++ b/tools/widl/parser.l
@@ -385,6 +385,7 @@ static const struct keyword attr_keywords[] =
 	{"marshaling_behavior",         tMARSHALINGBEHAVIOR,        1},
 	{"maybe",                       tMAYBE,                     0},
 	{"message",                     tMESSAGE,                   0},
+	{"mta" ,                        tMTA,                       1},
 	{"neutral",                     tNEUTRAL,                   0},
 	{"nocode",                      tNOCODE,                    0},
 	{"nonbrowsable",                tNONBROWSABLE,              0},
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index 48f180cdb49..4ce84cc2440 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -222,6 +222,7 @@ static typelib_t *current_typelib;
 %token tMAYBE tMESSAGE
 %token tMETHODS
 %token tMODULE
+%token tMTA
 %token tNAMESPACE
 %token tNOCODE tNONBROWSABLE
 %token tNONCREATABLE
@@ -1154,6 +1155,7 @@ threading_type:
 	| tSINGLE				{ $$ = THREADING_SINGLE; }
 	| tFREE					{ $$ = THREADING_FREE; }
 	| tBOTH					{ $$ = THREADING_BOTH; }
+	| tMTA					{ $$ = THREADING_FREE; }
 	;
 
 pointer_type:
-- 
2.30.0




More information about the wine-devel mailing list