Module: wine Branch: master Commit: 69dcc641dfbc14066a9faa55c643e4bf2f6e7758 URL: http://source.winehq.org/git/wine.git/?a=commit;h=69dcc641dfbc14066a9faa55c6...
Author: Jacek Caban jacek@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)