From: Gabriel Ivăncescu gabrielopcode@gmail.com
This is needed for duplicated argument names, as the last arg will shadow all the prior ones when it comes to name lookup.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/jscript/compile.c | 2 +- dlls/jscript/tests/lang.js | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/dlls/jscript/compile.c b/dlls/jscript/compile.c index e2690935212..2d2c2c9f40a 100644 --- a/dlls/jscript/compile.c +++ b/dlls/jscript/compile.c @@ -2567,7 +2567,7 @@ static HRESULT compile_function(compiler_ctx_t *ctx, statement_t *source, functi } }
- for(i = 0; i < func->param_cnt; i++) { + for(i = func->param_cnt; i--;) { if(!find_local(ctx, func->params[i], 0) && !alloc_local(ctx, func->params[i], -i-1, 0)) return E_OUTOFMEMORY; } diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index 36afcc82417..30d8a338fd3 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -313,13 +313,13 @@ argumentsTest(); (function(a, a, b, c) { get_a = function() { return a; } set_a = function(v) { a = v; } - todo_wine_ok(get_a() === 2, "function(a, a, b, c) get_a() = " + get_a()); - todo_wine_ok(a === 2, "function(a, a, b, c) a = " + a); + ok(get_a() === 2, "function(a, a, b, c) get_a() = " + get_a()); + ok(a === 2, "function(a, a, b, c) a = " + a); ok(b === 3, "function(a, a, b, c) b = " + b); ok(c === 4, "function(a, a, b, c) c = " + c); a = 42; - todo_wine_ok(arguments[0] === 1, "function(a, a, b, c) arguments[0] = " + arguments[0]); - todo_wine_ok(arguments[1] === 42, "function(a, a, b, c) arguments[1] = " + arguments[1]); + ok(arguments[0] === 1, "function(a, a, b, c) arguments[0] = " + arguments[0]); + ok(arguments[1] === 42, "function(a, a, b, c) arguments[1] = " + arguments[1]); ok(get_a() === 42, "function(a, a, b, c) get_a() = " + get_a() + " expected 42"); args = arguments; })(1, 2, 3, 4); @@ -327,14 +327,14 @@ argumentsTest(); ok(get_a() === 42, "function(a, a, b, c) get_a() after detach = " + get_a()); set_a(100); ok(get_a() === 100, "function(a, a, b, c) get_a() = " + get_a() + " expected 100"); - todo_wine_ok(args[0] === 1, "function(a, a, b, c) detached args[0] = " + args[0]); - todo_wine_ok(args[1] === 42, "function(a, a, b, c) detached args[1] = " + args[1]); + ok(args[0] === 1, "function(a, a, b, c) detached args[0] = " + args[0]); + ok(args[1] === 42, "function(a, a, b, c) detached args[1] = " + args[1]);
(function(a, a) { eval("var a = 7;"); ok(a === 7, "function(a, a) a = " + a); - todo_wine_ok(arguments[0] === 5, "function(a, a) arguments[0] = " + arguments[0]); - todo_wine_ok(arguments[1] === 7, "function(a, a) arguments[1] = " + arguments[1]); + ok(arguments[0] === 5, "function(a, a) arguments[0] = " + arguments[0]); + ok(arguments[1] === 7, "function(a, a) arguments[1] = " + arguments[1]); })(5, 6); })();