[PATCH v2 0/1] MR10462: vbscript: Return type mismatch when calling non-dispatch variable as statement.
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. -- v2: vbscript: Return type mismatch when calling non-dispatch variable as statement. https://gitlab.winehq.org/wine/wine/-/merge_requests/10462
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 6be173f75d0..e0f46b68ade 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 055a63047c0..dd56f510550 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -2549,4 +2549,44 @@ Call ok(Err.Number = 5, "GetRef vbNullString error is " & Err.Number) On Error Goto 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
This merge request was approved by Jacek Caban. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10462
participants (3)
-
Francis De Brabandere -
Francis De Brabandere (@francisdb) -
Jacek Caban (@jacek)