Jacek Caban : vbscript: Added interp_step implementation.
Alexandre Julliard
julliard at winehq.org
Thu Sep 22 13:39:48 CDT 2011
Module: wine
Branch: master
Commit: d55aa556ad6fcd89106d4d5220250834f579fbb7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d55aa556ad6fcd89106d4d5220250834f579fbb7
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Sep 22 14:23:51 2011 +0200
vbscript: Added interp_step implementation.
---
dlls/vbscript/interp.c | 41 +++++++++++++++++++++++++++++++++++++++--
1 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index 5e41845..c95183d 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -245,6 +245,12 @@ static inline VARIANT *stack_pop(exec_ctx_t *ctx)
return ctx->stack + --ctx->top;
}
+static inline VARIANT *stack_top(exec_ctx_t *ctx, unsigned n)
+{
+ assert(ctx->top >= n);
+ return ctx->stack + (ctx->top-n-1);
+}
+
static HRESULT stack_push(exec_ctx_t *ctx, VARIANT *v)
{
if(ctx->stack_size == ctx->top) {
@@ -745,8 +751,39 @@ static HRESULT interp_new(exec_ctx_t *ctx)
static HRESULT interp_step(exec_ctx_t *ctx)
{
const BSTR ident = ctx->instr->arg2.bstr;
- FIXME("%s\n", debugstr_w(ident));
- return E_NOTIMPL;
+ BOOL gteq_zero;
+ VARIANT zero;
+ ref_t ref;
+ HRESULT hres;
+
+ TRACE("%s\n", debugstr_w(ident));
+
+ V_VT(&zero) = VT_I2;
+ V_I2(&zero) = 0;
+ hres = VarCmp(stack_top(ctx, 0), &zero, ctx->script->lcid, 0);
+ if(FAILED(hres))
+ return hres;
+
+ gteq_zero = hres == VARCMP_GT || hres == VARCMP_EQ;
+
+ hres = lookup_identifier(ctx, ident, VBDISP_ANY, &ref);
+ if(FAILED(hres))
+ return hres;
+
+ if(ref.type != REF_VAR) {
+ FIXME("%s is not REF_VAR\n", debugstr_w(ident));
+ return E_FAIL;
+ }
+
+ hres = VarCmp(ref.u.v, stack_top(ctx, 1), ctx->script->lcid, 0);
+ if(FAILED(hres))
+ return hres;
+
+ if(hres == VARCMP_EQ || hres == (gteq_zero ? VARCMP_LT : VARCMP_GT))
+ ctx->instr++;
+ else
+ instr_jmp(ctx, ctx->instr->arg1.uint);
+ return S_OK;
}
static HRESULT interp_jmp(exec_ctx_t *ctx)
More information about the wine-cvs
mailing list