From: Francis De Brabandere francisdb@gmail.com
--- dlls/vbscript/interp.c | 32 ++++++++++++++++++++++---------- dlls/vbscript/tests/lang.vbs | 14 +++++++++++++- 2 files changed, 35 insertions(+), 11 deletions(-)
diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index ef333753640..4201408fbca 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -1316,17 +1316,29 @@ static HRESULT interp_redim(exec_ctx_t *ctx) return hres; }
- if (ref.type == REF_CONST) - return MAKE_VBSERROR(VBSE_ILLEGAL_ASSIGNMENT); - - if(ref.type != REF_VAR && ref.type != REF_NONE) { - FIXME("got ref.type = %d\n", ref.type); - return E_FAIL; - } + switch(ref.type) { + case REF_DISP: + case REF_OBJ: + case REF_CONST: + return MAKE_VBSERROR(VBSE_ILLEGAL_ASSIGNMENT); + + case REF_FUNC: + // TODO compile errors should be handled by the parser + // compilation error: Name redefined + return MAKE_VBSERROR(VBS_COMPILE_ERROR); + + case REF_NONE: + ref.type = REF_VAR; + hres = add_dynamic_var(ctx, identifier, FALSE, &ref.u.v); + // Fall through to REF_VAR case + + case REF_VAR: + // all ok + break;
- if(ref.type == REF_NONE) { - ref.type = REF_VAR; - hres = add_dynamic_var(ctx, identifier, FALSE, &ref.u.v); + default: + FIXME("!!!!!!got ref.type = %d\n", ref.type); + return E_FAIL; }
v = ref.u.v; diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index c2198f1ab37..ce62319375e 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -1707,11 +1707,23 @@ ok ubound(toCreateArr) = 3, "ubound(toCreateArr) = " & ubound(toCreateArr) toCreateArr(3) = 10 ok toCreateArr(3) = 10, "toCreateArr(3) = " & toCreateArr(3)
-const redimConst = 3 on error resume next +const redimConst = 3 redim redimConst(3) +' REF_CONST -> runtime error: Type mismatch: 'redimConst' ok err.number = 501, "redim <const> err.number = " & err.number err.clear +redim err(3) +' REF_DISP -> runtime error: Object doesn't support this property or method +ok err.number = 501, "redim <err> err.number = " & err.number +err.clear +Sub redimSub +End Sub +redim redimSub(3) +' REF_FUNC -> compilation error: Name redefined +todo_wine_ok err.number = -1, "redim <sub> err.number = " & err.number +err.clear +' TODO how do we test the REF_OBJ case? on error goto 0