From: Francis De Brabandere <francisdb@gmail.com> When a non-dispatch variable (integer, string, empty, etc.) is used as a statement with no arguments, return VBSE_TYPE_MISMATCH (error 13) instead of E_NOTIMPL. This matches native Windows VBScript behavior. --- dlls/vbscript/interp.c | 4 ++-- dlls/vbscript/tests/lang.vbs | 40 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index 00ef7d93eb6..93c9629c267 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -645,8 +645,8 @@ static HRESULT do_icall(exec_ctx_t *ctx, VARIANT *res, BSTR identifier, unsigned } if(!res) { - FIXME("REF_VAR no res\n"); - return E_NOTIMPL; + WARN("REF_VAR no res\n"); + return MAKE_VBSERROR(VBSE_TYPE_MISMATCH); } V_VT(res) = VT_BYREF|VT_VARIANT; diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index e0feba54b7e..75997c93829 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -2437,4 +2437,44 @@ arr (0) = 2 xor -2 Call ok(indexedObj(3) = 6, "indexedObj(3) = " & indexedObj(3)) Call ok(indexedObj(0) = 0, "indexedObj(0) = " & indexedObj(0)) +' Test calling a dispatch variable as statement (invokes default property) +funcCalled = "" +Set obj = New DefaultSubTest1 +obj 3 +Call ok(funcCalled = "init3", "dispatch var as statement: funcCalled = " & funcCalled) + +' Test calling a dispatch variable (default Function, no args) as statement +funcCalled = "" +Set obj = New DefaultSubTest2 +obj +Call ok(funcCalled = "init", "dispatch var (default func) as statement: funcCalled = " & funcCalled) + +' Test calling non-dispatch variables as statement gives type mismatch (error 13) +On Error Resume Next + +dim intCallVar +intCallVar = 42 +Err.Clear +intCallVar +Call ok(Err.Number = 13, "int var as statement: err = " & Err.Number) + +dim strCallVar +strCallVar = "hello" +Err.Clear +strCallVar +Call ok(Err.Number = 13, "string var as statement: err = " & Err.Number) + +dim emptyCallVar +Err.Clear +emptyCallVar +Call ok(Err.Number = 13, "empty var as statement: err = " & Err.Number) + +dim boolCallVar +boolCallVar = True +Err.Clear +boolCallVar +Call ok(Err.Number = 13, "bool var as statement: err = " & Err.Number) + +On Error GoTo 0 + reportSuccess() -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10462