Kevin Puetz : widl: Parse attribute custom(guid,expr).
Alexandre Julliard
julliard at winehq.org
Wed Nov 18 15:48:02 CST 2020
Module: wine
Branch: master
Commit: 7afd550f34d87bed1e3f94c28a4fd10587a66de7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=7afd550f34d87bed1e3f94c28a4fd10587a66de7
Author: Kevin Puetz <PuetzKevinA at JohnDeere.com>
Date: Tue Nov 17 19:14:14 2020 -0600
widl: Parse attribute custom(guid,expr).
Signed-off-by: Kevin Puetz <PuetzKevinA at JohnDeere.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
tools/widl/parser.l | 2 +-
tools/widl/parser.y | 15 +++++++++++++++
tools/widl/widltypes.h | 7 +++++++
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/tools/widl/parser.l b/tools/widl/parser.l
index b715342ad59..d7d96702322 100644
--- a/tools/widl/parser.l
+++ b/tools/widl/parser.l
@@ -339,6 +339,7 @@ static const struct keyword attr_keywords[] =
{"context_handle_noserialize", tCONTEXTHANDLENOSERIALIZE, 0},
{"context_handle_serialize", tCONTEXTHANDLENOSERIALIZE, 0},
{"control", tCONTROL, 0},
+ {"custom", tCUSTOM, 0},
{"decode", tDECODE, 0},
{"defaultbind", tDEFAULTBIND, 0},
{"defaultcollelem", tDEFAULTCOLLELEM, 0},
@@ -431,7 +432,6 @@ static const struct keyword attr_keywords[] =
};
/* attributes TODO:
- custom
first_is
last_is
max_is
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index caf4569179b..160e4029a6e 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -58,6 +58,7 @@ static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t
static attr_t *make_attr(enum attr_type type);
static attr_t *make_attrv(enum attr_type type, unsigned int val);
static attr_t *make_attrp(enum attr_type type, void *val);
+static attr_t *make_custom_attr(UUID *id, expr_t *pval);
static expr_list_t *append_expr(expr_list_t *list, expr_t *expr);
static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_t *decl, int top);
static var_list_t *set_var_types(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_list_t *decls);
@@ -177,6 +178,7 @@ static typelib_t *current_typelib;
%token tCALLAS tCALLBACK tCASE tCDECL tCHAR tCOCLASS tCODE tCOMMSTATUS
%token tCONST tCONTEXTHANDLE tCONTEXTHANDLENOSERIALIZE
%token tCONTEXTHANDLESERIALIZE tCONTROL tCPPQUOTE
+%token tCUSTOM
%token tDECODE tDEFAULT tDEFAULTBIND
%token tDEFAULTCOLLELEM
%token tDEFAULTVALUE
@@ -506,6 +508,7 @@ attribute: { $$ = NULL; }
| tCONTEXTHANDLENOSERIALIZE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
| tCONTEXTHANDLESERIALIZE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
| tCONTROL { $$ = make_attr(ATTR_CONTROL); }
+ | tCUSTOM '(' uuid_string ',' expr_const ')' { $$ = make_custom_attr($3, $5); }
| tDECODE { $$ = make_attr(ATTR_DECODE); }
| tDEFAULT { $$ = make_attr(ATTR_DEFAULT); }
| tDEFAULTBIND { $$ = make_attr(ATTR_DEFAULTBIND); }
@@ -1366,6 +1369,17 @@ static attr_t *make_attrp(enum attr_type type, void *val)
return a;
}
+static attr_t *make_custom_attr(UUID *id, expr_t *pval)
+{
+ attr_t *a = xmalloc(sizeof(attr_t));
+ attr_custdata_t *cstdata = xmalloc(sizeof(attr_custdata_t));
+ a->type = ATTR_CUSTOM;
+ cstdata->id = *id;
+ cstdata->pval = pval;
+ a->u.pval = cstdata;
+ return a;
+}
+
static expr_list_t *append_expr(expr_list_t *list, expr_t *expr)
{
if (!expr) return list;
@@ -2142,6 +2156,7 @@ struct allowed_attr allowed_attr[] =
/* ATTR_COMMSTATUS */ { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" },
/* ATTR_CONTEXTHANDLE */ { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" },
/* ATTR_CONTROL */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, "control" },
+ /* ATTR_CUSTOM */ { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, "custom" },
/* ATTR_DECODE */ { 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "decode" },
/* ATTR_DEFAULT */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, "default" },
/* ATTR_DEFAULTBIND */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" },
diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h
index 2e2ee7a206b..b02b80e122c 100644
--- a/tools/widl/widltypes.h
+++ b/tools/widl/widltypes.h
@@ -37,6 +37,7 @@ typedef GUID UUID;
typedef struct _loc_info_t loc_info_t;
typedef struct _attr_t attr_t;
+typedef struct _attr_custdata_t attr_custdata_t;
typedef struct _expr_t expr_t;
typedef struct _type_t type_t;
typedef struct _var_t var_t;
@@ -84,6 +85,7 @@ enum attr_type
ATTR_COMMSTATUS,
ATTR_CONTEXTHANDLE,
ATTR_CONTROL,
+ ATTR_CUSTOM,
ATTR_DECODE,
ATTR_DEFAULT,
ATTR_DEFAULTBIND,
@@ -338,6 +340,11 @@ struct _expr_t {
struct list entry;
};
+struct _attr_custdata_t {
+ GUID id;
+ expr_t *pval;
+};
+
struct struct_details
{
var_list_t *fields;
More information about the wine-cvs
mailing list