From a822569db2ec0fab893af53d97a1331720cc3211 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 13 Sep 2011 11:35:33 +0200 Subject: [PATCH] vbscipt: Added object member assign parser/compiler implementation. --- dlls/vbscript/compile.c | 7 +++++-- dlls/vbscript/interp.c | 6 ++++++ dlls/vbscript/parser.y | 4 ++-- dlls/vbscript/vbscript.h | 1 + 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/dlls/vbscript/compile.c b/dlls/vbscript/compile.c index 8cc55c7538e..877780d111a 100644 --- a/dlls/vbscript/compile.c +++ b/dlls/vbscript/compile.c @@ -303,8 +303,11 @@ static HRESULT compile_assign_statement(compile_ctx_t *ctx, assign_statement_t * } if(stat->member_expr->obj_expr) { - FIXME("obj_expr not implemented\n"); - hres = E_NOTIMPL; + hres = compile_expression(ctx, stat->member_expr->obj_expr); + if(FAILED(hres)) + return hres; + + hres = push_instr_bstr(ctx, OP_assign_member, stat->member_expr->identifier); }else { hres = push_instr_bstr(ctx, OP_assign_ident, stat->member_expr->identifier); } diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index 40996422cae..32129355624 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -257,6 +257,12 @@ static HRESULT interp_assign_ident(exec_ctx_t *ctx) return assign_ident(ctx, arg, v.v, v.owned); } +static HRESULT interp_assign_member(exec_ctx_t *ctx) +{ + FIXME("\n"); + return E_NOTIMPL; +} + static HRESULT interp_ret(exec_ctx_t *ctx) { TRACE("\n"); diff --git a/dlls/vbscript/parser.y b/dlls/vbscript/parser.y index 0d56acd1923..5d9ae7d27ee 100644 --- a/dlls/vbscript/parser.y +++ b/dlls/vbscript/parser.y @@ -113,8 +113,8 @@ Statement { $1->args = $2; $$ = new_assign_statement(ctx, $1, $4); CHECK_ERROR; } MemberExpression - : tIdentifier { $$ = new_member_expression(ctx, NULL, $1); CHECK_ERROR; } - /* FIXME: MemberExpressionArgs '.' tIdentifier */ + : tIdentifier { $$ = new_member_expression(ctx, NULL, $1); CHECK_ERROR; } + | CallExpression '.' tIdentifier { $$ = new_member_expression(ctx, $1, $3); CHECK_ERROR; } Arguments_opt : EmptyBrackets_opt { $$ = NULL; } diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h index 49b2cfa0a9d..6367c125536 100644 --- a/dlls/vbscript/vbscript.h +++ b/dlls/vbscript/vbscript.h @@ -91,6 +91,7 @@ typedef enum { #define OP_LIST \ X(add, 1, 0, 0) \ X(assign_ident, 1, ARG_BSTR, 0) \ + X(assign_member, 1, ARG_BSTR, 0) \ X(bool, 1, ARG_INT, 0) \ X(concat, 1, 0, 0) \ X(double, 1, ARG_DOUBLE, 0) \ -- 2.11.4.GIT