Jacek Caban : jscript: Added QueryService(SID_VariantConversion) implementation.
Module: wine Branch: master Commit: c6360c3e6e7fc3d82c436580320eaafc4af3bf3c URL: http://source.winehq.org/git/wine.git/?a=commit;h=c6360c3e6e7fc3d82c43658032... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Mar 12 12:12:40 2012 +0100 jscript: Added QueryService(SID_VariantConversion) implementation. --- dlls/jscript/jscript.c | 6 +++++- dlls/jscript/jscript.h | 1 + dlls/jscript/jsutils.c | 11 ++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 1ca5f9c..45edeb1 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -72,6 +72,7 @@ void script_release(script_ctx_t *ctx) jsheap_free(&ctx->tmp_heap); SysFreeString(ctx->last_match); + ctx->jscaller->ctx = NULL; IServiceProvider_Release(&ctx->jscaller->IServiceProvider_iface); heap_free(ctx); @@ -411,8 +412,10 @@ static ULONG WINAPI JScript_Release(IActiveScript *iface) if(!ref) { if(This->ctx && This->ctx->state != SCRIPTSTATE_CLOSED) IActiveScript_Close(&This->IActiveScript_iface); - if(This->ctx) + if(This->ctx) { + This->ctx->active_script = NULL; script_release(This->ctx); + } heap_free(This); unlock_module(); } @@ -709,6 +712,7 @@ static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface) ctx->ref = 1; ctx->state = SCRIPTSTATE_UNINITIALIZED; + ctx->active_script = &This->IActiveScript_iface; ctx->safeopt = This->safeopt; ctx->version = This->version; jsheap_init(&ctx->tmp_heap); diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 47df16d..cdb8eb6 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -293,6 +293,7 @@ struct _script_ctx_t { LONG ref; SCRIPTSTATE state; + IActiveScript *active_script; exec_ctx_t *exec_ctx; named_item_t *named_items; diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c index 6d77fe1..b9a35db 100644 --- a/dlls/jscript/jsutils.c +++ b/dlls/jscript/jsutils.c @@ -20,6 +20,7 @@ #include "wine/port.h" #include <math.h> +#include <assert.h> #include "jscript.h" #include "engine.h" @@ -769,8 +770,10 @@ static ULONG WINAPI JSCaller_Release(IServiceProvider *iface) TRACE("(%p) ref=%d\n", This, ref); - if(!ref) + if(!ref) { + assert(!This->ctx); heap_free(This); + } return ref; } @@ -780,6 +783,11 @@ static HRESULT WINAPI JSCaller_QueryService(IServiceProvider *iface, REFGUID gui { JSCaller *This = impl_from_IServiceProvider(iface); + if(IsEqualGUID(guidService, &SID_VariantConversion) && This->ctx && This->ctx->active_script) { + TRACE("(%p)->(SID_VariantConversion)\n", This); + return IActiveScript_QueryInterface(This->ctx->active_script, riid, ppv); + } + FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv); *ppv = NULL; @@ -803,6 +811,7 @@ HRESULT create_jscaller(script_ctx_t *ctx) ret->IServiceProvider_iface.lpVtbl = &ServiceProviderVtbl; ret->ref = 1; + ret->ctx = ctx; ctx->jscaller = ret; return S_OK;
participants (1)
-
Alexandre Julliard