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