From: Francis De Brabandere <francisdb@gmail.com> variant_call already handles arg_cnt=0 correctly for the three relevant cases (VT_DISPATCH invokes the default property via the new is_call plumbing in disp_call, an array fails with out-of-bounds, anything else returns type-mismatch), so the inline default-property handling from 02a15b1df6c can be collapsed into a single variant_call call. This brings non-array Dim variables and Dim arrays in line with native behavior: x() raises 13 (Type mismatch) and arr() raises 9 (Subscript out of range) instead of silently returning the value or array. --- dlls/vbscript/interp.c | 19 ++----------------- dlls/vbscript/tests/lang.vbs | 8 ++++---- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index 2dea36ccc33..f14110acbfa 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -682,23 +682,8 @@ static HRESULT do_icall(exec_ctx_t *ctx, VARIANT *res, BSTR identifier, unsigned if(arg_cnt) return variant_call(ctx, ref.u.v, arg_cnt, res); - if(is_call) { - VARIANT *v; - - v = V_VT(ref.u.v) == (VT_VARIANT|VT_BYREF) ? V_VARIANTREF(ref.u.v) : ref.u.v; - if(V_VT(v) == VT_DISPATCH) { - VARIANT result; - V_VT(&result) = VT_EMPTY; - hres = get_disp_value(ctx->script, V_DISPATCH(v), &result); - if(FAILED(hres)) - return hres; - if(res) - *res = result; - else - VariantClear(&result); - break; - } - } + if(is_call) + return variant_call(ctx, ref.u.v, 0, res); if(!res) { WARN("REF_VAR no res\n"); diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index 3c1c8b49da1..14017e93078 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -2759,24 +2759,24 @@ sub test_index_non_array x = 42 err.clear tmp = x() - call todo_wine_ok(err.number = 13, "read int(): err.number = " & err.number) + call ok(err.number = 13, "read int(): err.number = " & err.number) x = "hello" err.clear tmp = x() - call todo_wine_ok(err.number = 13, "read str(): err.number = " & err.number) + call ok(err.number = 13, "read str(): err.number = " & err.number) x = Empty err.clear tmp = x() - call todo_wine_ok(err.number = 13, "read empty(): err.number = " & err.number) + call ok(err.number = 13, "read empty(): err.number = " & err.number) ' empty parens on a Dim array: native raises 9 (subscript out of range, ' since () supplies zero indices for a multi-dim access). Dim arr(2) err.clear tmp = arr() - call todo_wine_ok(err.number = 9, "read arr(): err.number = " & err.number) + call ok(err.number = 9, "read arr(): err.number = " & err.number) on error goto 0 end sub -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10783