On 1/19/21 7:04 AM, Rémi Bernon wrote:
Signed-off-by: Rémi Bernon rbernon@codeweavers.com
tools/widl/header.c | 7 +++++++ tools/widl/parser.l | 4 ++++ tools/widl/parser.y | 18 ++++++++++++++++-- tools/widl/widltypes.h | 9 +++++++++ 4 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/tools/widl/header.c b/tools/widl/header.c index 223ab5c5ca9..21f8528c31d 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_MARSHALING_BEHAVIOR))
- {
case MARSHALING_AGILE: fprintf(header, " * Class Marshaling Behavior: Agile - Class is agile\n *\n"); break;
case MARSHALING_STANDARD: fprintf(header, " * Class Marshaling Behavior: Standard - Class marshals using the standard marshaler\n *\n"); break;
case MARSHALING_NONE: fprintf(header, " * Class Marshaling Behavior: None - Class cannot be marshaled\n *\n"); break;
default: break;
- }
}
I guess I should have asked this earlier, but is there a point in writing these comments?
static void write_apicontract_guard_start(FILE *header, const expr_t *expr) diff --git a/tools/widl/parser.l b/tools/widl/parser.l index 9dce03577c6..01c6f800a08 100644 --- a/tools/widl/parser.l +++ b/tools/widl/parser.l @@ -320,6 +320,7 @@ static const struct keyword keywords[] = { static const struct keyword attr_keywords[] = { {"aggregatable", tAGGREGATABLE, 0},
- {"agile", tAGILE, 1}, {"all_nodes", tALLNODES, 0}, {"allocate", tALLOCATE, 0}, {"annotation", tANNOTATION, 0},
@@ -381,12 +382,14 @@ static const struct keyword attr_keywords[] = {"length_is", tLENGTHIS, 0}, {"licensed", tLICENSED, 0}, {"local", tLOCAL, 0},
- {"marshaling_behavior", tMARSHALINGBEHAVIOR, 1}, {"maybe", tMAYBE, 0}, {"message", tMESSAGE, 0}, {"neutral", tNEUTRAL, 0}, {"nocode", tNOCODE, 0}, {"nonbrowsable", tNONBROWSABLE, 0}, {"noncreatable", tNONCREATABLE, 0},
- {"none", tNONE, 1}, {"nonextensible", tNONEXTENSIBLE, 0}, {"notify", tNOTIFY, 0}, {"notify_flag", tNOTIFYFLAG, 0},
@@ -416,6 +419,7 @@ static const struct keyword attr_keywords[] = {"single_node", tSINGLENODE, 0}, {"size_is", tSIZEIS, 0}, {"source", tSOURCE, 0},
- {"standard", tSTANDARD, 1}, {"strict_context_handle", tSTRICTCONTEXTHANDLE, 0}, {"string", tSTRING, 0}, {"switch_is", tSWITCHIS, 0},
diff --git a/tools/widl/parser.y b/tools/widl/parser.y index b729d772fcd..48f180cdb49 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -174,7 +174,9 @@ static typelib_t *current_typelib; %token GREATEREQUAL LESSEQUAL %token LOGICALOR LOGICALAND %token ELLIPSIS -%token tAGGREGATABLE tALLNODES tALLOCATE tANNOTATION +%token tAGGREGATABLE +%token tAGILE +%token tALLNODES tALLOCATE tANNOTATION %token tAPICONTRACT %token tAPPOBJECT tASYNC tASYNCUUID %token tAUTOHANDLE tBINDABLE tBOOLEAN tBROADCAST tBYTE tBYTECOUNT @@ -216,12 +218,14 @@ static typelib_t *current_typelib; %token tLENGTHIS tLIBRARY %token tLICENSED tLOCAL %token tLONG +%token tMARSHALINGBEHAVIOR %token tMAYBE tMESSAGE %token tMETHODS %token tMODULE %token tNAMESPACE %token tNOCODE tNONBROWSABLE %token tNONCREATABLE +%token tNONE %token tNONEXTENSIBLE %token tNOTIFY tNOTIFYFLAG %token tNULL @@ -247,6 +251,7 @@ static typelib_t *current_typelib; %token tSIZEIS tSIZEOF %token tSMALL %token tSOURCE +%token tSTANDARD %token tSTATIC %token tSTDCALL %token tSTRICTCONTEXTHANDLE @@ -299,7 +304,7 @@ static typelib_t *current_typelib; %type <type> coclass coclasshdr coclassdef %type <type> apicontract %type <num> contract_ver -%type <num> pointer_type threading_type version +%type <num> pointer_type threading_type marshaling_behavior version %type <str> libraryhdr callconv cppquote importlib import t_ident %type <uuid> uuid_string %type <import> import_start @@ -505,6 +510,12 @@ str_list: aSTRING { $$ = append_str( NULL, $1 ); } | str_list ',' aSTRING { $$ = append_str( $1, $3 ); } ;
+marshaling_behavior:
tAGILE { $$ = MARSHALING_AGILE; }
- | tNONE { $$ = MARSHALING_NONE; }
- | tSTANDARD { $$ = MARSHALING_STANDARD; }
- ;
contract_ver: aNUM { $$ = MAKEVERSION(0, $1); } | aNUM '.' aNUM { $$ = MAKEVERSION($3, $1); } @@ -572,6 +583,8 @@ attribute: { $$ = NULL; } | tLCID { $$ = make_attr(ATTR_PARAMLCID); } | tLICENSED { $$ = make_attr(ATTR_LICENSED); } | tLOCAL { $$ = make_attr(ATTR_LOCAL); }
- | tMARSHALINGBEHAVIOR '(' marshaling_behavior ')'
| tMAYBE { $$ = make_attr(ATTR_MAYBE); } | tMESSAGE { $$ = make_attr(ATTR_MESSAGE); } | tNOCODE { $$ = make_attr(ATTR_NOCODE); }{ $$ = make_attrv(ATTR_MARSHALING_BEHAVIOR, $3); }
@@ -2230,6 +2243,7 @@ struct allowed_attr allowed_attr[] = /* ATTR_LIBLCID */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "lcid" }, /* ATTR_LICENSED */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "licensed" }, /* ATTR_LOCAL */ { 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "local" },
- /* ATTR_MARSHALING_BEHAVIOR */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "marshaling_behavior" }, /* ATTR_MAYBE */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "maybe" }, /* ATTR_MESSAGE */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "message" }, /* ATTR_NOCODE */ { 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nocode" },
diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h index d5862426ad4..6c130d4701e 100644 --- a/tools/widl/widltypes.h +++ b/tools/widl/widltypes.h @@ -125,6 +125,7 @@ enum attr_type ATTR_LIBLCID, ATTR_LICENSED, ATTR_LOCAL,
- ATTR_MARSHALING_BEHAVIOR, ATTR_MAYBE, ATTR_MESSAGE, ATTR_NOCODE,
@@ -271,6 +272,14 @@ enum threading_type THREADING_BOTH };
+enum marshaling_type +{
- MARSHALING_INVALID = 0,
- MARSHALING_NONE,
- MARSHALING_AGILE,
- MARSHALING_STANDARD,
+};
enum type_basic_type { TYPE_BASIC_INT8 = 1,