widl [3/3]: Support SAFEARRAY(type) syntax
Dan Hipschman
dsh at linux.ucla.edu
Fri Jul 21 14:11:28 CDT 2006
This depends on the previous two patches. It adds support for MIDL's
SAFEARRAY(foo) syntax.
ChangeLog:
* Support SAFEARRAY(T) syntax
---
tools/widl/parser.l | 1 +
tools/widl/parser.y | 8 ++++++++
2 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/tools/widl/parser.l b/tools/widl/parser.l
index cefdca9..4fedd34 100644
--- a/tools/widl/parser.l
+++ b/tools/widl/parser.l
@@ -145,6 +145,7 @@ static UUID* parse_uuid(const char*u)
yylval.num = strtoul(yytext, NULL, 0);
return aNUM;
}
+SAFEARRAY{ws}*/\( return tSAFEARRAY;
{cident} return kw_token(yytext);
\n line_number++;
{ws}
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index 5607e4b..c3af3c5 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -83,6 +83,7 @@ static ifref_t *make_ifref(type_t *iface
static var_t *make_var(char *name);
static func_t *make_func(var_t *def, var_t *args);
static class_t *make_class(char *name);
+static type_t *make_safearray(void);
static type_t *reg_type(type_t *type, const char *name, int t);
static type_t *reg_types(type_t *type, var_t *names, int t);
@@ -179,6 +180,7 @@ static type_t std_uhyper = { "MIDL_uhype
%token tREQUESTEDIT
%token tRESTRICTED
%token tRETVAL
+%token tSAFEARRAY
%token tSHORT
%token tSIGNED
%token tSINGLE
@@ -777,6 +779,7 @@ type: tVOID { $$ = make_tref(NULL,
| tSTRUCT aIDENTIFIER { $$ = make_tref(NULL, get_type(RPC_FC_STRUCT, $2, tsSTRUCT)); }
| uniondef { $$ = make_tref(NULL, $1); }
| tUNION aIDENTIFIER { $$ = make_tref(NULL, find_type2($2, tsUNION)); }
+ | tSAFEARRAY '(' type ')' { $$ = make_tref(NULL, make_safearray()); }
;
typedef: tTYPEDEF m_attributes type pident_list { typeref_t *tref = uniq_tref($3);
@@ -1139,6 +1142,11 @@ static class_t *make_class(char *name)
return c;
}
+static type_t *make_safearray(void)
+{
+ return make_type(RPC_FC_FP, find_type("SAFEARRAY", 0));
+}
+
#define HASHMAX 64
static int hash_ident(const char *name)
More information about the wine-patches
mailing list