Jacek Caban : vbscipt: Added object member assign parser/ compiler implementation.
Alexandre Julliard
julliard at winehq.org
Tue Sep 13 12:18:09 CDT 2011
Module: wine
Branch: master
Commit: a822569db2ec0fab893af53d97a1331720cc3211
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a822569db2ec0fab893af53d97a1331720cc3211
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Sep 13 11:35:33 2011 +0200
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 8cc55c7..877780d 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 4099642..3212935 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 0d56acd..5d9ae7d 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 49b2cfa..6367c12 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) \
More information about the wine-cvs
mailing list