Alexandre Julliard : widl:
Add a string list type and use it for the endpoint attribute.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Feb 7 16:00:00 CST 2007
Module: wine
Branch: master
Commit: cc9a07f19409097fdd48e4855e9a8ddbdc7b9b4c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cc9a07f19409097fdd48e4855e9a8ddbdc7b9b4c
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Feb 7 17:54:33 2007 +0100
widl: Add a string list type and use it for the endpoint attribute.
---
tools/widl/parser.y | 25 ++++++++++++++++++++++++-
tools/widl/widltypes.h | 7 +++++++
2 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index 3331709..0d03b03 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -64,6 +64,7 @@
# endif
#endif
+static str_list_t *append_str(str_list_t *list, char *str);
static attr_list_t *append_attr(attr_list_t *list, attr_t *attr);
static attr_t *make_attr(enum attr_type type);
static attr_t *make_attrv(enum attr_type type, unsigned long val);
@@ -122,6 +123,7 @@ static void check_arg(var_t *arg);
%union {
attr_t *attr;
attr_list_t *attr_list;
+ str_list_t *str_list;
expr_t *expr;
expr_list_t *expr_list;
array_dims_t *array_dims;
@@ -223,6 +225,7 @@ static void check_arg(var_t *arg);
%type <attr> attribute
%type <attr_list> m_attributes attributes attrib_list
+%type <str_list> str_list
%type <expr> m_expr expr expr_const
%type <expr_list> m_exprs /* exprs expr_list */ expr_list_const
%type <array_dims> array array_list
@@ -386,6 +389,10 @@ attrib_list: attribute
| attrib_list ']' '[' attribute { $$ = append_attr( $1, $4 ); }
;
+str_list: aSTRING { $$ = append_str( NULL, $1 ); }
+ | str_list ',' aSTRING { $$ = append_str( $1, $3 ); }
+ ;
+
attribute: { $$ = NULL; }
| tAGGREGATABLE { $$ = make_attr(ATTR_AGGREGATABLE); }
| tAPPOBJECT { $$ = make_attr(ATTR_APPOBJECT); }
@@ -406,7 +413,7 @@ attribute: { $$ = NULL; }
| tDISPLAYBIND { $$ = make_attr(ATTR_DISPLAYBIND); }
| tDLLNAME '(' aSTRING ')' { $$ = make_attrp(ATTR_DLLNAME, $3); }
| tDUAL { $$ = make_attr(ATTR_DUAL); }
- | tENDPOINT '(' aSTRING ')' { $$ = make_attrp(ATTR_ENDPOINT, $3); }
+ | tENDPOINT '(' str_list ')' { $$ = make_attrp(ATTR_ENDPOINT, $3); }
| tENTRY '(' aSTRING ')' { $$ = make_attrp(ATTR_ENTRY_STRING, $3); }
| tENTRY '(' expr_const ')' { $$ = make_attrp(ATTR_ENTRY_ORDINAL, $3); }
| tEXPLICITHANDLE { $$ = make_attr(ATTR_EXPLICIT_HANDLE); }
@@ -907,6 +914,22 @@ void init_types(void)
decl_builtin("handle_t", RPC_FC_BIND_PRIMITIVE);
}
+static str_list_t *append_str(str_list_t *list, char *str)
+{
+ struct str_list_entry_t *entry;
+
+ if (!str) return list;
+ if (!list)
+ {
+ list = xmalloc( sizeof(*list) );
+ list_init( list );
+ }
+ entry = xmalloc( sizeof(*entry) );
+ entry->str = str;
+ list_add_tail( list, &entry->entry );
+ return list;
+}
+
static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
{
if (!attr) return list;
diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h
index faaac6a..29ebd5e 100644
--- a/tools/widl/widltypes.h
+++ b/tools/widl/widltypes.h
@@ -47,6 +47,7 @@ typedef struct _importinfo_t importinfo_
typedef struct _typelib_t typelib_t;
typedef struct list attr_list_t;
+typedef struct list str_list_t;
typedef struct list func_list_t;
typedef struct list expr_list_t;
typedef struct list var_list_t;
@@ -162,6 +163,12 @@ enum type_kind
TKIND_MAX
};
+struct str_list_entry_t
+{
+ char *str;
+ struct list entry;
+};
+
struct _attr_t {
enum attr_type type;
union {
More information about the wine-cvs
mailing list