Module: wine Branch: master Commit: 7917b67a18673457519334fb8339d6b2c8205369 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7917b67a18673457519334fb83...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Nov 13 16:29:53 2013 +0100
vbscript: Added support for setting array elements.
---
dlls/vbscript/interp.c | 38 +++++++++++++++++++++++++++++++++----- 1 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index 10c9166..07b2a92 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -698,15 +698,43 @@ static HRESULT assign_ident(exec_ctx_t *ctx, BSTR name, DISPPARAMS *dp) case REF_VAR: { VARIANT *v = ref.u.v;
+ if(V_VT(v) == (VT_VARIANT|VT_BYREF)) + v = V_VARIANTREF(v); + if(arg_cnt(dp)) { - FIXME("arg_cnt %d not supported\n", arg_cnt(dp)); + SAFEARRAY *array; + + if(!(V_VT(v) & VT_ARRAY)) { + FIXME("array assign on type %d\n", V_VT(v)); + return E_FAIL; + } + + switch(V_VT(v)) { + case VT_ARRAY|VT_BYREF|VT_VARIANT: + array = *V_ARRAYREF(v); + break; + case VT_ARRAY|VT_VARIANT: + array = V_ARRAY(v); + break; + default: + FIXME("Unsupported array type %x\v", V_VT(v)); + return E_NOTIMPL; + } + + if(!array) { + FIXME("null array\n"); + return E_FAIL; + } + + hres = array_access(ctx, array, dp, &v); + if(FAILED(hres)) + return hres; + }else if(V_VT(v) == (VT_ARRAY|VT_BYREF|VT_VARIANT)) { + FIXME("non-array assign\n"); return E_NOTIMPL; }
- if(V_VT(v) == (VT_VARIANT|VT_BYREF)) - v = V_VARIANTREF(v); - - hres = VariantCopy(v, dp->rgvarg); + hres = VariantCopyInd(v, dp->rgvarg); break; } case REF_DISP: