[PATCH v2 0/1] MR10375: vbscript: Return proper error for For Each on non-collection types.
Return MAKE_VBSERROR(VBSE_NOT_ENUM) (error 451, "Object not a collection") instead of E_NOTIMPL/E_FAIL when For Each is used on a value that is not a collection. This affects both interp_newenum (when the expression is not a dispatch or array type) and interp_enumnext (when the enumerator was never initialized due to a prior error). -- v2: vbscript: Return proper error for For Each on non-collection types. https://gitlab.winehq.org/wine/wine/-/merge_requests/10375
From: Francis De Brabandere <francisdb@gmail.com> Return MAKE_VBSERROR(VBSE_NOT_ENUM) (error 451, "Object not a collection") instead of E_NOTIMPL/E_FAIL when For Each is used on a value that is not a collection. This affects both interp_newenum (when the expression is not a dispatch or array type) and interp_enumnext (when the enumerator was never initialized due to a prior error). --- dlls/vbscript/interp.c | 6 ++---- dlls/vbscript/tests/error.vbs | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index 127fcc2c05e..fe883c8a0d2 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -1518,9 +1518,8 @@ static HRESULT interp_newenum(exec_ctx_t *ctx) break; } default: - FIXME("Unsupported for %s\n", debugstr_variant(v.v)); release_val(&v); - return E_NOTIMPL; + return MAKE_VBSERROR(VBSE_NOT_ENUM); } return S_OK; @@ -1539,8 +1538,7 @@ static HRESULT interp_enumnext(exec_ctx_t *ctx) TRACE("\n"); if(V_VT(stack_top(ctx, 0)) == VT_EMPTY) { - FIXME("uninitialized\n"); - return E_FAIL; + return MAKE_VBSERROR(VBSE_NOT_ENUM); } assert(V_VT(stack_top(ctx, 0)) == VT_UNKNOWN); diff --git a/dlls/vbscript/tests/error.vbs b/dlls/vbscript/tests/error.vbs index 9b74dc8773e..80928432baa 100644 --- a/dlls/vbscript/tests/error.vbs +++ b/dlls/vbscript/tests/error.vbs @@ -197,7 +197,7 @@ sub testThrow next call ok(x = 2, "x = " & x) call ok(y = 1, "y = " & y) - call todo_wine_ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number) + call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number) Err.clear() y = 0 @@ -318,7 +318,7 @@ sub testForEachError() z = true call ok(y, "for each not executed") call ok(z, "line after next not executed") - call todo_wine_ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number) + call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number) end sub call testForEachError() -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10375
This merge request was approved by Jacek Caban. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10375
participants (3)
-
Francis De Brabandere -
Francis De Brabandere (@francisdb) -
Jacek Caban (@jacek)