Module: wine Branch: master Commit: b6a1912392ac0a1544ae3ba7d264c320b18a2d02 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b6a1912392ac0a1544ae3ba7d2...
Author: Jacek Caban jacek@codeweavers.com Date: Tue May 1 15:04:37 2012 +0200
jscript: Added support for VT_I2 in disp_propget.
---
dlls/jscript/dispex.c | 26 +++++++++++++++++++------- 1 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index f214ea0..3b52145 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -958,6 +958,15 @@ jsdisp_t *iface_to_jsdisp(IUnknown *iface) return ret; }
+static void ensure_retval_type(VARIANT *v) +{ + switch(V_VT(v)) { + case VT_I2: + V_VT(v) = VT_I4; + V_I4(v) = V_I2(v); + } +} + HRESULT jsdisp_get_id(jsdisp_t *jsdisp, const WCHAR *name, DWORD flags, DISPID *id) { dispex_prop_t *prop; @@ -1203,18 +1212,21 @@ HRESULT disp_propget(script_ctx_t *ctx, IDispatch *disp, DISPID id, VARIANT *val }
hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex); - if(FAILED(hres)) { + if(SUCCEEDED(hres)) { + hres = IDispatchEx_InvokeEx(dispex, id, ctx->lcid, INVOKE_PROPERTYGET, &dp, val, &ei->ei, + &ctx->jscaller->IServiceProvider_iface); + IDispatchEx_Release(dispex); + }else { ULONG err = 0;
TRACE("using IDispatch\n"); - return IDispatch_Invoke(disp, id, &IID_NULL, ctx->lcid, INVOKE_PROPERTYGET, &dp, val, &ei->ei, &err); + hres = IDispatch_Invoke(disp, id, &IID_NULL, ctx->lcid, INVOKE_PROPERTYGET, &dp, val, &ei->ei, &err); } + if(FAILED(hres)) + return hres;
- hres = IDispatchEx_InvokeEx(dispex, id, ctx->lcid, INVOKE_PROPERTYGET, &dp, val, &ei->ei, - &ctx->jscaller->IServiceProvider_iface); - IDispatchEx_Release(dispex); - - return hres; + ensure_retval_type(val); + return S_OK; }
HRESULT jsdisp_delete_idx(jsdisp_t *obj, DWORD idx)