Jacek Caban : jscript: Added variable object handling.
Alexandre Julliard
julliard at winehq.org
Tue Sep 9 05:50:46 CDT 2008
Module: wine
Branch: master
Commit: 652a0121a9cf55d47bce176bcbb7e55c6927ec04
URL: http://source.winehq.org/git/wine.git/?a=commit;h=652a0121a9cf55d47bce176bcbb7e55c6927ec04
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Sep 9 01:24:49 2008 +0200
jscript: Added variable object handling.
---
dlls/jscript/engine.c | 15 ++++++++++++---
dlls/jscript/engine.h | 3 ++-
dlls/jscript/jscript.c | 2 +-
3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index db13aef..b3ae71f 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -108,7 +108,7 @@ void scope_release(scope_chain_t *scope)
heap_free(scope);
}
-HRESULT create_exec_ctx(scope_chain_t *scope, exec_ctx_t **ret)
+HRESULT create_exec_ctx(DispatchEx *var_disp, scope_chain_t *scope, exec_ctx_t **ret)
{
exec_ctx_t *ctx;
@@ -116,6 +116,9 @@ HRESULT create_exec_ctx(scope_chain_t *scope, exec_ctx_t **ret)
if(!ctx)
return E_OUTOFMEMORY;
+ IDispatchEx_AddRef(_IDispatchEx_(var_disp));
+ ctx->var_disp = var_disp;
+
if(scope) {
scope_addref(scope);
ctx->scope_chain = scope;
@@ -132,6 +135,8 @@ void exec_release(exec_ctx_t *ctx)
if(ctx->scope_chain)
scope_release(ctx->scope_chain);
+ if(ctx->var_disp)
+ IDispatchEx_Release(_IDispatchEx_(ctx->var_disp));
heap_free(ctx);
}
@@ -300,8 +305,12 @@ static HRESULT identifier_eval(exec_ctx_t *ctx, BSTR identifier, DWORD flags, ex
}
if(flags & EXPR_NEWREF) {
- FIXME("create ref\n");
- return E_NOTIMPL;
+ hres = dispex_get_id(_IDispatchEx_(ctx->var_disp), identifier, fdexNameEnsure, &id);
+ if(FAILED(hres))
+ return hres;
+
+ exprval_set_idref(ret, (IDispatch*)_IDispatchEx_(ctx->var_disp), id);
+ return S_OK;
}
WARN("Could not find identifier %s\n", debugstr_w(identifier));
diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h
index 964e2b7..ce9253d 100644
--- a/dlls/jscript/engine.h
+++ b/dlls/jscript/engine.h
@@ -75,6 +75,7 @@ struct _exec_ctx_t {
parser_ctx_t *parser;
scope_chain_t *scope_chain;
+ DispatchEx *var_disp;
};
static inline void exec_addref(exec_ctx_t *ctx)
@@ -83,7 +84,7 @@ static inline void exec_addref(exec_ctx_t *ctx)
}
void exec_release(exec_ctx_t*);
-HRESULT create_exec_ctx(scope_chain_t*,exec_ctx_t**);
+HRESULT create_exec_ctx(DispatchEx*,scope_chain_t*,exec_ctx_t**);
HRESULT exec_source(exec_ctx_t*,parser_ctx_t*,source_elements_t*,jsexcept_t*,VARIANT*);
typedef struct _statement_t statement_t;
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index 50ba18c..a104aa9 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -80,7 +80,7 @@ static HRESULT exec_global_code(JScript *This, parser_ctx_t *parser_ctx)
VARIANT var;
HRESULT hres;
- hres = create_exec_ctx(NULL, &exec_ctx);
+ hres = create_exec_ctx(This->ctx->script_disp, NULL, &exec_ctx);
if(FAILED(hres))
return hres;
More information about the wine-cvs
mailing list