Module: wine Branch: refs/heads/master Commit: 12a9dfd62fcfb0be520b0bba2954b780dc994329 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=12a9dfd62fcfb0be520b0bba...
Author: Dan Hipschman dsh@linux.ucla.edu Date: Mon Jul 24 14:40:44 2006 -0700
widl: Support SAFEARRAY(type) 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 7257bd8..a7b1269 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)