Jacek Caban : vbscript: Added support for setting array elements.
Alexandre Julliard
julliard at winehq.org
Wed Nov 13 13:34:41 CST 2013
Module: wine
Branch: master
Commit: 7917b67a18673457519334fb8339d6b2c8205369
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7917b67a18673457519334fb8339d6b2c8205369
Author: Jacek Caban <jacek at 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:
More information about the wine-cvs
mailing list