Jacek Caban : vbscript: Better function call parsing.
Alexandre Julliard
julliard at winehq.org
Thu Sep 8 14:52:12 CDT 2011
Module: wine
Branch: master
Commit: 69dcc641dfbc14066a9faa55c643e4bf2f6e7758
URL: http://source.winehq.org/git/wine.git/?a=commit;h=69dcc641dfbc14066a9faa55c643e4bf2f6e7758
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Sep 8 14:55:35 2011 +0200
vbscript: Better function call parsing.
---
dlls/vbscript/parser.y | 16 ++++++++++++++--
dlls/vbscript/tests/run.c | 6 ++++++
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/parser.y b/dlls/vbscript/parser.y
index 5fb6bd2..d5c7d40 100644
--- a/dlls/vbscript/parser.y
+++ b/dlls/vbscript/parser.y
@@ -39,6 +39,8 @@ static member_expression_t *new_member_expression(parser_ctx_t*,expression_t*,co
static statement_t *new_call_statement(parser_ctx_t*,member_expression_t*);
+#define CHECK_ERROR if(((parser_ctx_t*)ctx)->hres != S_OK) YYABORT
+
%}
%pure_parser
@@ -47,6 +49,7 @@ static statement_t *new_call_statement(parser_ctx_t*,member_expression_t*);
%union {
const WCHAR *string;
statement_t *statement;
+ expression_t *expression;
member_expression_t *member;
}
@@ -55,6 +58,7 @@ static statement_t *new_call_statement(parser_ctx_t*,member_expression_t*);
%type <statement> Statement StatementNl
%type <member> MemberExpression
+%type <expression> Arguments_opt ArgumentList_opt
%%
@@ -69,12 +73,20 @@ StatementNl
: Statement tNL { $$ = $1; }
Statement
- : MemberExpression /* FIXME: Arguments_opt */ { $$ = new_call_statement(ctx, $1); }
+ : MemberExpression Arguments_opt { $1->args = $2; $$ = new_call_statement(ctx, $1); CHECK_ERROR; }
MemberExpression
- : tIdentifier { $$ = new_member_expression(ctx, NULL, $1); }
+ : tIdentifier { $$ = new_member_expression(ctx, NULL, $1); CHECK_ERROR; }
/* FIXME: MemberExpressionArgs '.' tIdentifier */
+Arguments_opt
+ : /* empty */ { $$ = NULL; }
+ | '(' ArgumentList_opt ')' { $$ = $2; }
+
+ArgumentList_opt
+ : /* empty */ { $$ = NULL; }
+ /* | ArgumentList { $$ = $1; } */
+
%%
static int parser_error(const char *str)
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index 4f70224..9b1abd4 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -469,6 +469,12 @@ static void run_tests(void)
parse_script_a("reportSuccess");
CHECK_CALLED(global_success_d);
CHECK_CALLED(global_success_i);
+
+ SET_EXPECT(global_success_d);
+ SET_EXPECT(global_success_i);
+ parse_script_a("reportSuccess()");
+ CHECK_CALLED(global_success_d);
+ CHECK_CALLED(global_success_i);
}
static BOOL check_vbscript(void)
More information about the wine-cvs
mailing list